public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
From: Nick Clifton <nickc@redhat.com>
To: binutils@sources.redhat.com
Subject: Re: [arnm-elf-objdump] Can't use two -M flags for disassembler (-Mforce-thumb and -Mreg-names-raw)
Date: Fri, 18 Jul 2003 11:34:00 -0000	[thread overview]
Message-ID: <m38yqwf4tn.fsf@redhat.com> (raw)
In-Reply-To: <20030717183908.GA25442@nevyn.them.org> (Daniel Jacobowitz's message of "Thu, 17 Jul 2003 14:39:08 -0400")

Hi Guys,

  I am applying this patch which should fix the parsing of the -M
  switch properly.

  It allows multiple -M switches on the command line, and it documents
  that a single -M switch can contain comma separated target specific
  options.  It also updates the arm disassembler to accept these comma
  separated options.

Cheers
        Nick

binutils/ChangeLog
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.

opcodes/ChangeLog
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.  

Index: binutils/objdump.c
===================================================================
RCS file: /cvs/src/src/binutils/objdump.c,v
retrieving revision 1.68
diff -c -3 -p -r1.68 objdump.c
*** binutils/objdump.c	17 Jul 2003 17:02:46 -0000	1.68
--- binutils/objdump.c	18 Jul 2003 11:17:36 -0000
*************** main (argc, argv)
*** 2661,2672 ****
  	  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;
  	  break;
  	case 'j':
  	  if (only == NULL)
--- 2661,2670 ----
  	  break;
  	case 'M':
  	  if (disassembler_options)
! 	    /* Ignore potential memory leak for now.  */
! 	    disassembler_options = concat (disassembler_options, ",", optarg, NULL);
! 	  else
! 	    disassembler_options = optarg;
  	  break;
  	case 'j':
  	  if (only == NULL)
Index: binutils/doc/binutils.texi
===================================================================
RCS file: /cvs/src/src/binutils/doc/binutils.texi,v
retrieving revision 1.43
diff -c -3 -p -r1.43 binutils.texi
*** binutils/doc/binutils.texi	17 Jul 2003 17:02:46 -0000	1.43
--- binutils/doc/binutils.texi	18 Jul 2003 11:17:40 -0000
*************** architectures with the @option{-i} optio
*** 1625,1639 ****
  @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
  
  If the target is an ARM architecture then this switch can be used to
  select which register name set is used during disassembler.  Specifying
--- 1625,1633 ----
  @item -M @var{options}
  @itemx --disassembler-options=@var{options}
  Pass target specific information to the disassembler.  Only supported on
! 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: opcodes/arm-dis.c
===================================================================
RCS file: /cvs/src/src/opcodes/arm-dis.c,v
retrieving revision 1.32
diff -c -3 -p -r1.32 arm-dis.c
*** opcodes/arm-dis.c	1 Apr 2003 13:08:06 -0000	1.32
--- opcodes/arm-dis.c	18 Jul 2003 11:17:41 -0000
***************
*** 27,32 ****
--- 27,33 ----
  #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"
*************** parse_arm_disassembler_option (option)
*** 1152,1202 ****
        option += 10;
  
        for (i = NUM_ARM_REGNAMES; i--;)
! 	if (streq (option, regnames[i].name))
  	  {
  	    regname_selected = i;
  	    break;
  	  }
  
        if (i < 0)
  	fprintf (stderr, _("Unrecognised register name set: %s\n"), option);
      }
!   else if (streq (option, "force-thumb"))
      force_thumb = 1;
!   else if (streq (option, "no-force-thumb"))
      force_thumb = 0;
    else
      fprintf (stderr, _("Unrecognised disassembler option: %s\n"), option);
  
    return;
  }
  
! /* Parse the string of disassembler options, spliting it at whitespaces.  */
  
  static void
  parse_disassembler_options (options)
       char * options;
  {
-   char * space;
- 
    if (options == NULL)
      return;
  
!   do
      {
!       space = strchr (options, ' ');
  
!       if (space)
! 	{
! 	  * space = '\0';
! 	  parse_arm_disassembler_option (options);
! 	  * space = ' ';
! 	  options = space + 1;
! 	}
!       else
! 	parse_arm_disassembler_option (options);
      }
-   while (space);
  }
  
  /* NOTE: There are no checks in these routines that
--- 1153,1200 ----
        option += 10;
  
        for (i = NUM_ARM_REGNAMES; i--;)
! 	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 (strneq (option, "force-thumb", 11))
      force_thumb = 1;
!   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
!    or commas.  (Whitespace separators supported for backwards compatibility).  */
  
  static void
  parse_disassembler_options (options)
       char * options;
  {
    if (options == NULL)
      return;
  
!   while (*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;      
      }
  }
  
  /* NOTE: There are no checks in these routines that
        

  reply	other threads:[~2003-07-18 11:34 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-07-10 15:38 Vincent Rubiolo
2003-07-11 14:35 ` Nick Clifton
     [not found] ` <H0000cba18680191.1057939164.eux100.sgp.st.com@MHS>
2003-07-14 14:48   ` Vincent Rubiolo
2003-07-17 14:44     ` Nick Clifton
     [not found]     ` <H0000cba186df243.1058453251.eux100.sgp.st.com@MHS>
2003-07-17 15:31       ` Vincent Rubiolo
2003-07-17 17:02         ` Nick Clifton
2003-07-17 18:39           ` Daniel Jacobowitz
2003-07-18 11:34             ` Nick Clifton [this message]
     [not found]             ` <H0000cba187217e5.1058853947.eux100.sgp.st.com@MHS>
2003-07-23  6:39               ` [arnm-elf-objdump] Can't use two -M flags for disassembler [SOLVED] Vincent Rubiolo
2003-07-18  8:05           ` [arnm-elf-objdump] Can't use two -M flags for disassembler (-Mforce-thumb and -Mreg-names-raw) Andreas Schwab

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m38yqwf4tn.fsf@redhat.com \
    --to=nickc@redhat.com \
    --cc=binutils@sources.redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).