* objdump.c (main) :Accept multiple -M switch.
authorNick Clifton <nickc@redhat.com>
Fri, 18 Jul 2003 11:34:41 +0000 (11:34 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 18 Jul 2003 11:34:41 +0000 (11:34 +0000)
* doc/binutils.texi: Document that multiple -M switches are accepted and that
  a single -M switch can contain comma separated options.
* arm-dis.c (parse_arm_disassembler_option): Do not expect option string to be
  NUL terminated.
  (parse_disassembler_options): Allow options to be space or comma separated.

binutils/ChangeLog
binutils/doc/binutils.texi
binutils/objdump.c
opcodes/ChangeLog
opcodes/arm-dis.c

index d715ad0c44c7a18be4c03903ca7ccbcd445e876b..11a79ce5a2298414efa59d2ec755a0f2dbdbef86 100644 (file)
@@ -1,3 +1,10 @@
+2003-07-18  Nick Clifton  <nickc@redhat.com>
+
+       * objdump.c (main) :Accept multiple -M switch.
+        * doc/binutils.texi: Document that multiple -M switches are
+        accepted and that a single -M switch can contain comma
+        separated options.
+
 2003-07-17  Nick Clifton  <nickc@redhat.com>
 
        * objdump.c (main): Issue a warning message if multiple -M
index 85025db946c071619370f9449242fae6cd3de0a0..256acf04448d04918cebb2c09012c05b2b37d7da 100644 (file)
@@ -1625,15 +1625,9 @@ architectures with the @option{-i} option.
 @item -M @var{options}
 @itemx --disassembler-options=@var{options}
 Pass target specific information to the disassembler.  Only supported on
-some targets.  Note only a single instance of the option on the
-command line is supported.  If the option occurs more than once, the
-earlier versions will be ignored.  If it is necessary to specify more
-than one disassembler option then they should be placed together into
-a space separated list.  ie:
-
-@smallexample
-  -M"first-disassembler-option second-disassembler-option"
-@end smallexample
+some targets.  If it is necessary to specify more than one
+disassembler option then multiple @option{-M} options can be used or
+can be placed together into a comma separated list.
 
 If the target is an ARM architecture then this switch can be used to
 select which register name set is used during disassembler.  Specifying
index 4fc84ffa5bb9c1beb89f789b1167b67b32d7374f..47da66f1ab8551c11828136f88883598294e8296 100644 (file)
@@ -2661,12 +2661,10 @@ main (argc, argv)
          break;
        case 'M':
          if (disassembler_options)
-           {
-             non_fatal ("multiple separate -M options are not supported.");
-             non_fatal ("please combine them into a single, space separated option.");
-             non_fatal ("ignoring option '-M%s'", disassembler_options);
-           }
-         disassembler_options = optarg;
+           /* Ignore potential memory leak for now.  */
+           disassembler_options = concat (disassembler_options, ",", optarg, NULL);
+         else
+           disassembler_options = optarg;
          break;
        case 'j':
          if (only == NULL)
index f1a11adfcfc1d56dfcc366056fcc6b8e3974bd69..73c190203cf38a12e59a1b18db5c38c733282397 100644 (file)
@@ -1,3 +1,10 @@
+2003-07-18  Nick Clifton  <nickc@redhat.com>
+
+       * arm-dis.c (parse_arm_disassembler_option): Do not expect
+       option string to be NUL terminated.
+        (parse_disassembler_options): Allow options to be space or
+       comma separated.  
+
 2003-07-17  Nick Clifton  <nickc@redhat.com>
 
        * po/es.po: New Spanish translation.
index 2c9e385707ab5a19d0dc222ffa012e0cd5ac56b4..97ec8423485fd32767efdbea30aad4504f5f2a34 100644 (file)
@@ -27,6 +27,7 @@
 #include "coff/internal.h"
 #include "libcoff.h"
 #include "opintl.h"
+#include "safe-ctype.h"
 
 /* FIXME: This shouldn't be done here.  */
 #include "elf-bfd.h"
@@ -1152,51 +1153,48 @@ parse_arm_disassembler_option (option)
       option += 10;
 
       for (i = NUM_ARM_REGNAMES; i--;)
-       if (streq (option, regnames[i].name))
+       if (strneq (option, regnames[i].name, strlen (regnames[i].name)))
          {
            regname_selected = i;
            break;
          }
 
       if (i < 0)
+       /* XXX - should break 'option' at following delimiter.  */
        fprintf (stderr, _("Unrecognised register name set: %s\n"), option);
     }
-  else if (streq (option, "force-thumb"))
+  else if (strneq (option, "force-thumb", 11))
     force_thumb = 1;
-  else if (streq (option, "no-force-thumb"))
+  else if (strneq (option, "no-force-thumb", 14))
     force_thumb = 0;
   else
+    /* XXX - should break 'option' at following delimiter.  */
     fprintf (stderr, _("Unrecognised disassembler option: %s\n"), option);
 
   return;
 }
 
-/* Parse the string of disassembler options, spliting it at whitespaces.  */
+/* Parse the string of disassembler options, spliting it at whitespaces
+   or commas.  (Whitespace separators supported for backwards compatibility).  */
 
 static void
 parse_disassembler_options (options)
      char * options;
 {
-  char * space;
-
   if (options == NULL)
     return;
 
-  do
+  while (*options)
     {
-      space = strchr (options, ' ');
-
-      if (space)
-       {
-         * space = '\0';
-         parse_arm_disassembler_option (options);
-         * space = ' ';
-         options = space + 1;
-       }
-      else
-       parse_arm_disassembler_option (options);
+      parse_arm_disassembler_option (options);
+
+      /* Skip forward to next seperator.  */
+      while ((*options) && (! ISSPACE (*options)) && (*options != ','))
+       ++ options;
+      /* Skip forward past seperators.  */
+      while (ISSPACE (*options) || (*options == ','))
+       ++ options;      
     }
-  while (space);
 }
 
 /* NOTE: There are no checks in these routines that