* 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.
This commit is contained in:
Nick Clifton 2003-07-18 11:34:41 +00:00
parent 278a7cf7f0
commit 31e0f3cd45
5 changed files with 37 additions and 33 deletions

View 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

View 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

View 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)

View 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.

View 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, ' ');
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