* 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 d715ad0..11a79ce 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 85025db..256acf0 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 4fc84ff..47da66f 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 f1a11ad..73c1902 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 2c9e385..97ec842 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