2009-07-20 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.
This commit is contained in:
H.J. Lu 2009-07-20 13:40:48 +00:00
parent 7769efb28e
commit 3dcb3fcb14
4 changed files with 36 additions and 2 deletions

View file

@ -1,3 +1,16 @@
2009-07-20 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.
2009-07-17 Nick Clifton <nickc@redhat.com> 2009-07-17 Nick Clifton <nickc@redhat.com>
* dwarf.c (display_debug_lines): If do_debug_lines has not been * dwarf.c (display_debug_lines): If do_debug_lines has not been

View file

@ -1,4 +1,8 @@
-*- text -*- -*- 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 * Readelf can now display the relocated contents of a section as a sequence
of bytes via the --relocated-dump=<name|number> command line option. of bytes via the --relocated-dump=<name|number> command line option.

View file

@ -1703,6 +1703,7 @@ objdump [@option{-a}|@option{--archive-headers}]
[@option{--special-syms}] [@option{--special-syms}]
[@option{--prefix=}@var{prefix}] [@option{--prefix=}@var{prefix}]
[@option{--prefix-strip=}@var{level}] [@option{--prefix-strip=}@var{level}]
[@option{--insn-width=}@var{width}]
[@option{-V}|@option{--version}] [@option{-V}|@option{--version}]
[@option{-H}|@option{--help}] [@option{-H}|@option{--help}]
@var{objfile}@dots{} @var{objfile}@dots{}
@ -2055,6 +2056,11 @@ in symbolic form. This is the default except when
When disassembling instructions, do not print the instruction bytes. When disassembling instructions, do not print the instruction bytes.
This is the default when @option{--prefix-addresses} is used. 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] @item -W[lLiaprmfFsoR]
@itemx --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges] @itemx --dwarf[=rawline,=decodedline,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]
@cindex DWARF @cindex DWARF

View file

@ -104,6 +104,7 @@ static bfd_boolean disassemble_all; /* -D */
static int disassemble_zeroes; /* --disassemble-zeroes */ static int disassemble_zeroes; /* --disassemble-zeroes */
static bfd_boolean formats_info; /* -i */ static bfd_boolean formats_info; /* -i */
static int wide_output; /* -w */ static int wide_output; /* -w */
static int insn_width; /* --insn-width */
static bfd_vma start_address = (bfd_vma) -1; /* --start-address */ static bfd_vma start_address = (bfd_vma) -1; /* --start-address */
static bfd_vma stop_address = (bfd_vma) -1; /* --stop-address */ static bfd_vma stop_address = (bfd_vma) -1; /* --stop-address */
static int dump_debugging; /* --debugging */ 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\ --stop-address=ADDR Only process data whose address is <= ADDR\n\
--prefix-addresses Print complete address alongside disassembly\n\ --prefix-addresses Print complete address alongside disassembly\n\
--[no-]show-raw-insn Display hex alongside symbolic 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\ --adjust-vma=OFFSET Add OFFSET to all displayed section addresses\n\
--special-syms Include special symbols in symbol dumps\n\ --special-syms Include special symbols in symbol dumps\n\
--prefix=PREFIX Add PREFIX to absolute paths for -S\n\ --prefix=PREFIX Add PREFIX to absolute paths for -S\n\
@ -259,6 +261,7 @@ enum option_values
OPTION_DWARF, OPTION_DWARF,
OPTION_PREFIX, OPTION_PREFIX,
OPTION_PREFIX_STRIP, OPTION_PREFIX_STRIP,
OPTION_INSN_WIDTH,
OPTION_ADJUST_VMA OPTION_ADJUST_VMA
}; };
@ -306,6 +309,7 @@ static struct option long_options[]=
{"wide", no_argument, NULL, 'w'}, {"wide", no_argument, NULL, 'w'},
{"prefix", required_argument, NULL, OPTION_PREFIX}, {"prefix", required_argument, NULL, OPTION_PREFIX},
{"prefix-strip", required_argument, NULL, OPTION_PREFIX_STRIP}, {"prefix-strip", required_argument, NULL, OPTION_PREFIX_STRIP},
{"insn-width", required_argument, NULL, OPTION_INSN_WIDTH},
{0, no_argument, 0, 0} {0, no_argument, 0, 0}
}; };
@ -1415,7 +1419,9 @@ disassemble_bytes (struct disassemble_info * info,
sfile.buffer = xmalloc (sfile.alloc); sfile.buffer = xmalloc (sfile.alloc);
sfile.pos = 0; sfile.pos = 0;
if (insns) if (insn_width)
octets_per_line = insn_width;
else if (insns)
octets_per_line = 4; octets_per_line = 4;
else else
octets_per_line = 16; octets_per_line = 16;
@ -1566,7 +1572,7 @@ disassemble_bytes (struct disassemble_info * info,
octets = (*disassemble_fn) (section->vma + addr_offset, info); octets = (*disassemble_fn) (section->vma + addr_offset, info);
info->fprintf_func = (fprintf_ftype) fprintf; info->fprintf_func = (fprintf_ftype) fprintf;
info->stream = stdout; 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; octets_per_line = info->bytes_per_line;
if (octets < 0) if (octets < 0)
{ {
@ -3251,6 +3257,11 @@ main (int argc, char **argv)
if (prefix_strip < 0) if (prefix_strip < 0)
fatal (_("error: prefix strip must be non-negative")); fatal (_("error: prefix strip must be non-negative"));
break; break;
case OPTION_INSN_WIDTH:
insn_width = strtoul (optarg, NULL, 0);
if (insn_width <= 0)
fatal (_("error: instruction width must be positive"));
break;
case 'E': case 'E':
if (strcmp (optarg, "B") == 0) if (strcmp (optarg, "B") == 0)
endian = BFD_ENDIAN_BIG; endian = BFD_ENDIAN_BIG;