From 31e0f3cd45f5e24eb497bcbb1eec8e22b387ed9c Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 18 Jul 2003 11:34:41 +0000 Subject: [PATCH] * 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. * 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 | 7 +++++++ binutils/doc/binutils.texi | 12 +++--------- binutils/objdump.c | 10 ++++------ opcodes/ChangeLog | 7 +++++++ opcodes/arm-dis.c | 34 ++++++++++++++++------------------ 5 files changed, 37 insertions(+), 33 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index d715ad0c44..11a79ce5a2 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,10 @@ +2003-07-18 Nick Clifton + + * 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 * objdump.c (main): Issue a warning message if multiple -M diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi index 85025db946..256acf0444 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 4fc84ffa5b..47da66f1ab 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 f1a11adfcf..73c190203c 100644 --- a/opcodes/ChangeLog +++ b/opcodes/ChangeLog @@ -1,3 +1,10 @@ +2003-07-18 Nick Clifton + + * 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 * po/es.po: New Spanish translation. diff --git a/opcodes/arm-dis.c b/opcodes/arm-dis.c index 2c9e385707..97ec842348 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, ' '); + parse_arm_disassembler_option (options); - if (space) - { - * space = '\0'; - parse_arm_disassembler_option (options); - * space = ' '; - options = space + 1; - } - else - 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