aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--binutils/ChangeLog7
-rw-r--r--binutils/doc/binutils.texi12
-rw-r--r--binutils/objdump.c10
-rw-r--r--opcodes/ChangeLog7
-rw-r--r--opcodes/arm-dis.c36
5 files changed, 38 insertions, 34 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index d715ad0..11a79ce 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -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
diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi
index 85025db..256acf0 100644
--- a/binutils/doc/binutils.texi
+++ b/binutils/doc/binutils.texi
@@ -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
diff --git a/binutils/objdump.c b/binutils/objdump.c
index 4fc84ff..47da66f 100644
--- a/binutils/objdump.c
+++ b/binutils/objdump.c
@@ -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)
diff --git a/opcodes/ChangeLog b/opcodes/ChangeLog
index f1a11ad..73c1902 100644
--- a/opcodes/ChangeLog
+++ b/opcodes/ChangeLog
@@ -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.
diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c
index 2c9e385..97ec842 100644
--- a/opcodes/arm-dis.c
+++ b/opcodes/arm-dis.c
@@ -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