2009-07-20 H.J. Lu <hongjiu.lu@intel.com>
authorH.J. Lu <hjl.tools@gmail.com>
Mon, 20 Jul 2009 13:40:48 +0000 (13:40 +0000)
committerH.J. Lu <hjl.tools@gmail.com>
Mon, 20 Jul 2009 13:40:48 +0000 (13:40 +0000)
* 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.

binutils/ChangeLog
binutils/NEWS
binutils/doc/binutils.texi
binutils/objdump.c

index 20c69b5bcd39f2d751293eb7f66e8320dbf85788..89b1a668f89ec8582ad5633d12b58ab90038aee8 100644 (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>
 
        * dwarf.c (display_debug_lines): If do_debug_lines has not been
index 2edef3c25c51f7aa6cfb9f7380002f53a0eacea0..b3fd13774f44e3c458b81f30e5f08b4b2c5bb19a 100644 (file)
@@ -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 2364f9c594994621822f3dec1ca04874a5edc419..98438f2af4e3a67cbb476b97ae2ffee742c296ff 100644 (file)
@@ -1703,6 +1703,7 @@ objdump [@option{-a}|@option{--archive-headers}]
         [@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 except when
 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 b346aa7a52a40a818d716415a50d31c9a98356f4..760df3bbffde5fd0c40ebd3114dd215b5905b639 100644 (file)
@@ -104,6 +104,7 @@ static bfd_boolean disassemble_all; /* -D */
 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}
 };
 \f
@@ -1415,7 +1419,9 @@ disassemble_bytes (struct disassemble_info * info,
   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_info * info,
              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 = strtoul (optarg, NULL, 0);
+         if (insn_width <= 0)
+           fatal (_("error: instruction width must be positive"));
+         break;
        case 'E':
          if (strcmp (optarg, "B") == 0)
            endian = BFD_ENDIAN_BIG;