This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] PR bootstrap/10169: Use getopt_long in mips-tfile.c


The following patch implements Kaveh's suggestion for fixing GNATS PR
bootstrap/10169 by using getopt_long instead of getopt in mips-tfile.c
and mips-tdump.c.  It also includes a bug-fix to gcov.c and gcov-dump.c
to zero-terminate the arrays passed to getopt_long.

Rather than just provide an empty long options table to getopt_long,
I decided to bring both programs one step closer to following GNU
standards, by accepting --version, which is equivalent to -v.  The
code to display a version number was already present in mips-tfile.c
and this implementation was simply copied into mips-tdump.c.

The following code has been tested on alphaev67-dec-osf5.1 with a
complete bootstrap, all languages except treelang and ada, and
regression tested with a top-level "make -k check" with no new
failures.

Ok for mainline?



2003-05-20  Roger Sayle  <roger@eyesopen.com>
	    Kaveh Ghazi  <ghazi@caip.rutgers.edu>

	PR bootstrap/10169
	* mips-tfile.c (main): Use getopt_long instead of getopt.
	Handle new command line option --version just like -v.
	(options): New global variable for getopt_long.
	* mips-tfile.c (main): Use getopt_long instead of getopt.
	New command line options --version and -v to display the
	program version number (to match mips-tfile behavior).
	(options): New global variable for getopt_long.

	* gcov.c (options): Zero-terminate getopt_long array.
	* gcov-dump.c (options): Likewise.

	* Makefile.in (mips-tdump.o): Add dependency on version.h.


Index: mips-tfile.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/mips-tfile.c,v
retrieving revision 1.52
diff -c -3 -p -r1.52 mips-tfile.c
*** mips-tfile.c	17 May 2003 22:21:32 -0000	1.52
--- mips-tfile.c	20 May 2003 14:08:34 -0000
*************** Software Foundation, 59 Temple Place - S
*** 611,616 ****
--- 611,619 ----
  #define saber_stop()
  #endif

+ /* Include getopt.h for the sake of getopt_long.  */
+ #include "getopt.h"
+
  #ifndef __LINE__
  #define __LINE__ 0
  #endif
*************** static const pseudo_ops_t pseudo_ops[] =
*** 1664,1669 ****
--- 1667,1680 ----
  };


+ /* Command line options for getopt_long.  */
+
+ static const struct option options[] =
+ {
+   { "version", 0, 0, 'v' },
+   { 0, 0, 0, 0 }
+ };
+
  /* Add a page to a varray object.  */

  STATIC void
*************** main (argc, argv)
*** 4809,4815 ****
    void_type_info = type_info_init;
    void_type_info.basic_type = bt_Void;

!   while ((option = getopt (argc, argv, "d:i:I:o:v")) != EOF)
      switch (option)
        {
        default:
--- 4820,4826 ----
    void_type_info = type_info_init;
    void_type_info.basic_type = bt_Void;

!   while ((option = getopt_long (argc, argv, "d:i:I:o:v", options, NULL)) != -1)
      switch (option)
        {
        default:
Index: mips-tdump.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/mips-tdump.c,v
retrieving revision 1.25
diff -c -3 -p -r1.25 mips-tdump.c
*** mips-tdump.c	16 Dec 2002 18:19:43 -0000	1.25
--- mips-tdump.c	20 May 2003 14:08:34 -0000
*************** Software Foundation, 59 Temple Place - S
*** 25,30 ****
--- 25,31 ----
  #include "system.h"
  #include "coretypes.h"
  #include "tm.h"
+ #include "version.h"
  #ifdef index
  #undef index
  #endif
*************** Software Foundation, 59 Temple Place - S
*** 34,39 ****
--- 35,43 ----
  #include "mips/a.out.h"
  #endif /* CROSS_COMPILE */

+ /* Include getopt.h for the sake of getopt_long.  */
+ #include "getopt.h"
+
  #ifndef MIPS_IS_STAB
  /* Macros for mips-tfile.c to encapsulate stabs in ECOFF, and for
     and mips-tdump.c to print them out.  This is used on the Alpha,
*************** int	 want_line	= 0;	/* print line number
*** 209,214 ****
--- 213,219 ----
  int	 want_rfd	= 0;	/* print relative file desc's */
  int	 want_scope	= 0;	/* print scopes for every symbol */
  int	 tfile		= 0;	/* no global header file */
+ int	 version	= 0;    /* print version # */
  int	 tfile_fd;		/* file descriptor of .T file */
  off_t	 tfile_offset;		/* current offset in .T file */
  scope_t	*cur_scope	= 0;	/* list of active scopes */
*************** const struct {const short code; const ch
*** 254,259 ****
--- 259,271 ----
  #undef __define_stab
  };

+ /* Command line options for getopt_long.  */
+
+ static const struct option options[] =
+ {
+   { "version", 0, 0, 'v' },
+   { 0, 0, 0, 0 }
+ };

  /* Read some bytes at a specified location, and return a pointer.  */

*************** main (argc, argv)
*** 1434,1440 ****
    /*
     * Process arguments
     */
!   while ((opt = getopt (argc, argv, "alrst")) != EOF)
      switch (opt)
        {
        default:	errors++;	break;
--- 1446,1452 ----
    /*
     * Process arguments
     */
!   while ((opt = getopt_long (argc, argv, "alrsvt", options, NULL)) != -1)
      switch (opt)
        {
        default:	errors++;	break;
*************** main (argc, argv)
*** 1442,1448 ****
        case 'l': want_line++;	break;	/* print line numbers */
        case 'r': want_rfd++;	break;	/* print relative fd's */
        case 's':	want_scope++;	break;	/* print scope info */
!       case 't': tfile++;	break;	/* this is a tfile (without header), and not a .o */
        }

    if (errors || optind != argc - 1)
--- 1454,1462 ----
        case 'l': want_line++;	break;	/* print line numbers */
        case 'r': want_rfd++;	break;	/* print relative fd's */
        case 's':	want_scope++;	break;	/* print scope info */
!       case 'v': version++;      break;  /* print version # */
!       case 't': tfile++;	break;	/* this is a tfile (without header),
! 					   and not a .o */
        }

    if (errors || optind != argc - 1)
*************** main (argc, argv)
*** 1456,1462 ****
--- 1470,1486 ----
        fprintf (stderr, "\t-r Print out relative file descriptors.\n");
        fprintf (stderr, "\t-s Print out the current scopes for an item.\n");
        fprintf (stderr, "\t-t Assume there is no global header (ie, a T-file).\n");
+       fprintf (stderr, "\t-v Print program version.\n");
        return 1;
+     }
+
+   if (version)
+     {
+       fprintf (stderr, "mips-tdump version %s", version_string);
+ #ifdef TARGET_VERSION
+       TARGET_VERSION;
+ #endif
+       fputc ('\n', stderr);
      }

    /*
Index: gcov.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/gcov.c,v
retrieving revision 1.65
diff -c -3 -p -r1.65 gcov.c
*** gcov.c	17 May 2003 22:21:31 -0000	1.65
--- gcov.c	20 May 2003 14:08:34 -0000
*************** static const struct option options[] =
*** 445,450 ****
--- 445,451 ----
    { "object-directory",     required_argument, NULL, 'o' },
    { "object-file",          required_argument, NULL, 'o' },
    { "unconditional-branches", no_argument,     NULL, 'u' },
+   { 0, 0, 0, 0 }
  };

  /* Process args, return index to first non-arg.  */
Index: gcov-dump.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/gcov-dump.c,v
retrieving revision 1.13
diff -c -3 -p -r1.13 gcov-dump.c
*** gcov-dump.c	14 May 2003 16:01:19 -0000	1.13
--- gcov-dump.c	20 May 2003 14:08:34 -0000
*************** static const struct option options[] =
*** 55,60 ****
--- 55,61 ----
    { "version",              no_argument,       NULL, 'v' },
    { "long",                 no_argument,       NULL, 'l' },
    { "positions",	    no_argument,       NULL, 'o' },
+   { 0, 0, 0, 0 }
  };

  static const tag_format_t tag_table[] =
Index: Makefile.in
===================================================================
RCS file: /cvs/gcc/gcc/gcc/Makefile.in,v
retrieving revision 1.1056
diff -c -3 -p -r1.1056 Makefile.in
*** Makefile.in	14 May 2003 15:29:07 -0000	1.1056
--- Makefile.in	20 May 2003 14:08:36 -0000
*************** mips-tfile.o : mips-tfile.c $(CONFIG_H)
*** 1793,1799 ****
  mips-tdump: mips-tdump.o version.o $(LIBDEPS)
  	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ mips-tdump.o version.o $(LIBS)

! mips-tdump.o : mips-tdump.c $(CONFIG_H) $(RTL_H) $(SYSTEM_H) coretypes.h $(TM_H)

  #
  # Generate header and source files from the machine description,
--- 1793,1799 ----
  mips-tdump: mips-tdump.o version.o $(LIBDEPS)
  	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ mips-tdump.o version.o $(LIBS)

! mips-tdump.o : mips-tdump.c $(CONFIG_H) $(RTL_H) $(SYSTEM_H) coretypes.h $(TM_H) version.h

  #
  # Generate header and source files from the machine description,


Roger
--
Roger Sayle,                         E-mail: roger@eyesopen.com
OpenEye Scientific Software,         WWW: http://www.eyesopen.com/
Suite 1107, 3600 Cerrillos Road,     Tel: (+1) 505-473-7385
Santa Fe, New Mexico, 87507.         Fax: (+1) 505-473-0833


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]