This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
PATCH: Add --insn-width to objdump
- From: "H.J. Lu" <hongjiu dot lu at intel dot com>
- To: binutils at sources dot redhat dot com
- Date: Sun, 19 Jul 2009 11:50:16 -0700
- Subject: PATCH: Add --insn-width to objdump
- Reply-to: "H.J. Lu" <hjl dot tools at gmail dot com>
Hi,
This is a patch to add a new command line option, --insn-width, to
objdump to specify number of bytes to be displayed on a single line
when disassembling instructions. OK for trunk?
Thanks.
H.J.
----
2009-07-19 H.J. Lu <hongjiu.lu@intel.com>
* NEWS: Mention --insn-width.
* objdump.c (insn_width): New.
(usage): Display --insn-width.
(option_values): Add OPTION_INSN_WIDTH.
(long_options): Add --insn-width.
(disassemble_bytes): Handle insn_width.
(main): Handle OPTION_INSN_WIDTH.
* doc/binutils.texi: Document --insn-width.
Index: binutils/NEWS
===================================================================
--- binutils/NEWS (revision 6427)
+++ binutils/NEWS (working copy)
@@ -1,4 +1,8 @@
-*- text -*-
+* Add a new command line option, --insn-width=WIDTH, to objdump to specify
+number of bytes to be displayed on a single line when disassembling
+instructions.
+
* Readelf can now display the relocated contents of a section as a sequence
of bytes via the --relocated-dump=<name|number> command line option.
Index: binutils/doc/binutils.texi
===================================================================
--- binutils/doc/binutils.texi (revision 6340)
+++ binutils/doc/binutils.texi (working copy)
@@ -1703,6 +1703,7 @@ objdump [@option{-a}|@option{--archive-h
[@option{--special-syms}]
[@option{--prefix=}@var{prefix}]
[@option{--prefix-strip=}@var{level}]
+ [@option{--insn-width=}@var{width}]
[@option{-V}|@option{--version}]
[@option{-H}|@option{--help}]
@var{objfile}@dots{}
@@ -2055,6 +2056,11 @@ in symbolic form. This is the default e
When disassembling instructions, do not print the instruction bytes.
This is the default when @option{--prefix-addresses} is used.
+@item --insn-width=@var{width}
+@cindex Instruction width
+Display @var{width} bytes on a single line when disassembling
+instructions.
+
@item -W[lLiaprmfFsoR]
@itemx --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]
@cindex DWARF
Index: binutils/objdump.c
===================================================================
--- binutils/objdump.c (revision 6396)
+++ binutils/objdump.c (working copy)
@@ -104,6 +104,7 @@ static bfd_boolean disassemble_all; /* -
static int disassemble_zeroes; /* --disassemble-zeroes */
static bfd_boolean formats_info; /* -i */
static int wide_output; /* -w */
+static int insn_width; /* --insn-width */
static bfd_vma start_address = (bfd_vma) -1; /* --start-address */
static bfd_vma stop_address = (bfd_vma) -1; /* --stop-address */
static int dump_debugging; /* --debugging */
@@ -235,6 +236,7 @@ usage (FILE *stream, int status)
--stop-address=ADDR Only process data whose address is <= ADDR\n\
--prefix-addresses Print complete address alongside disassembly\n\
--[no-]show-raw-insn Display hex alongside symbolic disassembly\n\
+ --insn-width=WIDTH Display WIDTH bytes on a signle line for -d\n\
--adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n\
--special-syms Include special symbols in symbol dumps\n\
--prefix=PREFIX Add PREFIX to absolute paths for -S\n\
@@ -259,6 +261,7 @@ enum option_values
OPTION_DWARF,
OPTION_PREFIX,
OPTION_PREFIX_STRIP,
+ OPTION_INSN_WIDTH,
OPTION_ADJUST_VMA
};
@@ -306,6 +309,7 @@ static struct option long_options[]=
{"wide", no_argument, NULL, 'w'},
{"prefix", required_argument, NULL, OPTION_PREFIX},
{"prefix-strip", required_argument, NULL, OPTION_PREFIX_STRIP},
+ {"insn-width", required_argument, NULL, OPTION_INSN_WIDTH},
{0, no_argument, 0, 0}
};
@@ -1415,7 +1419,9 @@ disassemble_bytes (struct disassemble_in
sfile.buffer = xmalloc (sfile.alloc);
sfile.pos = 0;
- if (insns)
+ if (insn_width)
+ octets_per_line = insn_width;
+ else if (insns)
octets_per_line = 4;
else
octets_per_line = 16;
@@ -1566,7 +1572,7 @@ disassemble_bytes (struct disassemble_in
octets = (*disassemble_fn) (section->vma + addr_offset, info);
info->fprintf_func = (fprintf_ftype) fprintf;
info->stream = stdout;
- if (info->bytes_per_line != 0)
+ if (insn_width == 0 && info->bytes_per_line != 0)
octets_per_line = info->bytes_per_line;
if (octets < 0)
{
@@ -3251,6 +3257,11 @@ main (int argc, char **argv)
if (prefix_strip < 0)
fatal (_("error: prefix strip must be non-negative"));
break;
+ case OPTION_INSN_WIDTH:
+ insn_width = atoi (optarg);
+ if (insn_width < 0)
+ fatal (_("error: instruction width must be non-negative"));
+ break;
case 'E':
if (strcmp (optarg, "B") == 0)
endian = BFD_ENDIAN_BIG;