This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

PATCH: Add --insn-width to objdump


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;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]