Patchwork Miscellaneous options fixes

login
register
mail settings
Submitter Joseph S. Myers
Date Aug. 2, 2010, 4:43 p.m.
Message ID <Pine.LNX.4.64.1008021642040.4379@digraph.polyomino.org.uk>
Download mbox | patch
Permalink /patch/60556/
State New
Headers show

Comments

Joseph S. Myers - Aug. 2, 2010, 4:43 p.m.
This patch fixes a collection of miscellaneous issues with
command-line option handling in preparation for sharing infrastructure
between the driver and cc1, to avoid that sharing causing unwanted
changes in behavior or perturbing where bugs appear.  These issues
were all found in the course of analysing differences between the
command-line interfaces to the driver and the core compilers.

* "-G n" with separate operand needs SWITCH_TAKES_ARG support which
  was missing on alpha and ia64.

* The SWITCH_TAKES_ARG support for -G n on iq2000 was an unnecessary
  copy from some other target since iq2000 doesn't support the -G
  option.

* The bfin specs passing -G* to the assembler and linker also appear
  to be a bogus copy from another target since there is no -Gn support
  in those tools for bfin.

* WORD_SWITCH_TAKES_ARG didn't handle the Darwin -iframework option.

* The rx -patch= option alias was useless as the driver wouldn't
  accept or pass it down so it could only be passed directly to cc1;
  this patch removes it.

* Similarly, the C option -print-pch-checksum was useless and unused
  as it could only be passed directly to cc1, and is removed.

* Several relics of the -a/-ax block profiling, removed by
  <http://gcc.gnu.org/ml/gcc-patches/2001-12/msg00147.html>, were
  left: -a references in specs and a --profile-blocks option alias.
  These are removed, or in the case of one %{a*} changed to pass down
  the only -a* options needing to be passed down, -aux-info options.
  (-auxbase* would have been accepted by that spec, but not processed
  correctly by the driver for lack of WORD_SWITCH_TAKES_ARG handling.
  Thus it would always have been useless to pass them to the driver, so
  making it reject them by tightening the spec seems appropriate.
  There is already another spec to handle -ansi, the remaining -a*
  option.)

* Although -imultilib is essentially an option for the driver to
  generate, not for the user to use, since %{i*} specs will pass it
  down DEFAULT_WORD_SWITCH_TAKES_ARG ought to know about how to handle
  it correctly.

* config/rs6000/sysv4.h had a definition of SWITCH_TAKES_ARG that did
  not inherit from DEFAULT_SWITCH_TAKES_ARG, failed to handle the
  Fortran -J option and still handled the -b and -V options that have
  been removed.  Once those issues are fixed it becomes identical to
  the default except for also handling -G, so is made to inherit
  accordingly.

* There were long option aliases --quiet and --silent for a short
  option -q that doesn't actually exist in the driver; these useless
  aliases are removed.

Bootstrapped with no regressions on x86_64-unknown-linux-gnu.  Also
tested building cc1 for: alpha-dec-osf5.1 bfin-elf i686-darwin
ia64-linux-gnu iq2000-elf powerpc-linux-gnu rx-elf.  OK to commit?

2010-08-02  Joseph Myers  <joseph@codesourcery.com>

	* config/alpha/alpha.h (SWITCH_TAKES_ARG): Define.
	* config/alpha/osf5.h (LIB_SPEC): Don't handle -a.
	* config/bfin/bfin.h (ASM_SPEC, LINK_SPEC): Don't pass -G*
	options.
	* config/darwin.h (WORD_SWITCH_TAKES_ARG): Handle -iframework.
	* config/ia64/ia64.h (SWITCH_TAKES_ARG): Define.
	* config/iq2000/iq2000.h (SWITCH_TAKES_ARG): Remove.
	* config/rs6000/sysv4.h (SWITCH_TAKES_ARG): Define using
	DEFAULT_SWITCH_TAKES_ARG.
	* config/rx/rx.opt (-patch=): Remove option.
	* config/rx/rx.c (rx_handle_option): Don't handle OPT_patch_.
	* defaults.h (DEFAULT_WORD_SWITCH_TAKES_ARG): Handle -imultilib.
	* doc/invoke.texi (RX Options): Remove -patch=.
	* gcc.c (cc1_options): Pass -aux-info* instead of -a* options.
	(option_map): Remove --profile-blocks, --quiet and --silent.

ada:
2010-08-02  Joseph Myers  <joseph@codesourcery.com>

	* gcc-interface/lang-specs.h: Don't pass -a options.

c-family:
2010-08-02  Joseph Myers  <joseph@codesourcery.com>

	* c.opt (-print-pch-checksum): Remove option.
	* c-opts.c (c_common_handle_option): Don't handle
	OPT_print_pch_checksum.
Mike Stump - Aug. 2, 2010, 6:28 p.m.
On Aug 2, 2010, at 9:43 AM, Joseph S. Myers wrote:
> This patch fixes a collection of miscellaneous issues with
> command-line option handling in preparation for sharing infrastructure

> OK to commit?

I looked at the entire patch, looks all good me me.  Ok to the darwin bits.
Eric Botcazou - Aug. 2, 2010, 10:28 p.m.
> ada:
> 2010-08-02  Joseph Myers  <joseph@codesourcery.com>
>
> 	* gcc-interface/lang-specs.h: Don't pass -a options.

OK, thanks.
Richard Guenther - Aug. 3, 2010, 9:27 a.m.
On Mon, Aug 2, 2010 at 6:43 PM, Joseph S. Myers <joseph@codesourcery.com> wrote:
> This patch fixes a collection of miscellaneous issues with
> command-line option handling in preparation for sharing infrastructure
> between the driver and cc1, to avoid that sharing causing unwanted
> changes in behavior or perturbing where bugs appear.  These issues
> were all found in the course of analysing differences between the
> command-line interfaces to the driver and the core compilers.
>
> * "-G n" with separate operand needs SWITCH_TAKES_ARG support which
>  was missing on alpha and ia64.
>
> * The SWITCH_TAKES_ARG support for -G n on iq2000 was an unnecessary
>  copy from some other target since iq2000 doesn't support the -G
>  option.
>
> * The bfin specs passing -G* to the assembler and linker also appear
>  to be a bogus copy from another target since there is no -Gn support
>  in those tools for bfin.
>
> * WORD_SWITCH_TAKES_ARG didn't handle the Darwin -iframework option.
>
> * The rx -patch= option alias was useless as the driver wouldn't
>  accept or pass it down so it could only be passed directly to cc1;
>  this patch removes it.
>
> * Similarly, the C option -print-pch-checksum was useless and unused
>  as it could only be passed directly to cc1, and is removed.
>
> * Several relics of the -a/-ax block profiling, removed by
>  <http://gcc.gnu.org/ml/gcc-patches/2001-12/msg00147.html>, were
>  left: -a references in specs and a --profile-blocks option alias.
>  These are removed, or in the case of one %{a*} changed to pass down
>  the only -a* options needing to be passed down, -aux-info options.
>  (-auxbase* would have been accepted by that spec, but not processed
>  correctly by the driver for lack of WORD_SWITCH_TAKES_ARG handling.
>  Thus it would always have been useless to pass them to the driver, so
>  making it reject them by tightening the spec seems appropriate.
>  There is already another spec to handle -ansi, the remaining -a*
>  option.)
>
> * Although -imultilib is essentially an option for the driver to
>  generate, not for the user to use, since %{i*} specs will pass it
>  down DEFAULT_WORD_SWITCH_TAKES_ARG ought to know about how to handle
>  it correctly.
>
> * config/rs6000/sysv4.h had a definition of SWITCH_TAKES_ARG that did
>  not inherit from DEFAULT_SWITCH_TAKES_ARG, failed to handle the
>  Fortran -J option and still handled the -b and -V options that have
>  been removed.  Once those issues are fixed it becomes identical to
>  the default except for also handling -G, so is made to inherit
>  accordingly.
>
> * There were long option aliases --quiet and --silent for a short
>  option -q that doesn't actually exist in the driver; these useless
>  aliases are removed.
>
> Bootstrapped with no regressions on x86_64-unknown-linux-gnu.  Also
> tested building cc1 for: alpha-dec-osf5.1 bfin-elf i686-darwin
> ia64-linux-gnu iq2000-elf powerpc-linux-gnu rx-elf.  OK to commit?

Ok.

Thanks,
Richard.

> 2010-08-02  Joseph Myers  <joseph@codesourcery.com>
>
>        * config/alpha/alpha.h (SWITCH_TAKES_ARG): Define.
>        * config/alpha/osf5.h (LIB_SPEC): Don't handle -a.
>        * config/bfin/bfin.h (ASM_SPEC, LINK_SPEC): Don't pass -G*
>        options.
>        * config/darwin.h (WORD_SWITCH_TAKES_ARG): Handle -iframework.
>        * config/ia64/ia64.h (SWITCH_TAKES_ARG): Define.
>        * config/iq2000/iq2000.h (SWITCH_TAKES_ARG): Remove.
>        * config/rs6000/sysv4.h (SWITCH_TAKES_ARG): Define using
>        DEFAULT_SWITCH_TAKES_ARG.
>        * config/rx/rx.opt (-patch=): Remove option.
>        * config/rx/rx.c (rx_handle_option): Don't handle OPT_patch_.
>        * defaults.h (DEFAULT_WORD_SWITCH_TAKES_ARG): Handle -imultilib.
>        * doc/invoke.texi (RX Options): Remove -patch=.
>        * gcc.c (cc1_options): Pass -aux-info* instead of -a* options.
>        (option_map): Remove --profile-blocks, --quiet and --silent.
>
> ada:
> 2010-08-02  Joseph Myers  <joseph@codesourcery.com>
>
>        * gcc-interface/lang-specs.h: Don't pass -a options.
>
> c-family:
> 2010-08-02  Joseph Myers  <joseph@codesourcery.com>
>
>        * c.opt (-print-pch-checksum): Remove option.
>        * c-opts.c (c_common_handle_option): Don't handle
>        OPT_print_pch_checksum.
>
> Index: gcc/doc/invoke.texi
> ===================================================================
> --- gcc/doc/invoke.texi (revision 162722)
> +++ gcc/doc/invoke.texi (working copy)
> @@ -790,7 +790,7 @@ See RS/6000 and PowerPC Options.
>
>  @emph{RX Options}
>  @gccoptlist{-m64bit-doubles  -m32bit-doubles  -fpu  -nofpu@gol
> --mcpu= -patch=@gol
> +-mcpu=@gol
>  -mbig-endian-data -mlittle-endian-data @gol
>  -msmall-data @gol
>  -msim  -mno-sim@gol
> @@ -15816,9 +15816,7 @@ use then the FPU hardware will not be us
>  This is because the RX FPU instructions are themselves unsafe.
>
>  @item -mcpu=@var{name}
> -@itemx -patch=@var{name}
>  @opindex -mcpu
> -@opindex -patch
>  Selects the type of RX CPU to be targeted.  Currently three types are
>  supported, the generic @var{RX600} and @var{RX200} series hardware and
>  the specific @var{RX610} cpu.  The default is @var{RX600}.
> Index: gcc/c-family/c.opt
> ===================================================================
> --- gcc/c-family/c.opt  (revision 162722)
> +++ gcc/c-family/c.opt  (working copy)
> @@ -952,10 +952,6 @@ print-objc-runtime-info
>  ObjC ObjC++
>  Generate C header of platform-specific features
>
> -print-pch-checksum
> -C ObjC C++ ObjC++
> -Print a checksum of the executable for PCH validity checking, and stop
> -
>  remap
>  C ObjC C++ ObjC++
>  Remap file names when including files
> Index: gcc/c-family/c-opts.c
> ===================================================================
> --- gcc/c-family/c-opts.c       (revision 162722)
> +++ gcc/c-family/c-opts.c       (working copy)
> @@ -849,11 +849,6 @@ c_common_handle_option (size_t scode, co
>       print_struct_values = 1;
>       break;
>
> -    case OPT_print_pch_checksum:
> -      c_common_print_pch_checksum (stdout);
> -      exit_after_options = true;
> -      break;
> -
>     case OPT_remap:
>       cpp_opts->remap = 1;
>       break;
> Index: gcc/defaults.h
> ===================================================================
> --- gcc/defaults.h      (revision 162722)
> +++ gcc/defaults.h      (working copy)
> @@ -50,7 +50,7 @@ see the files COPYING3 and COPYING.RUNTI
>   || !strcmp (STR, "idirafter") || !strcmp (STR, "iprefix") \
>   || !strcmp (STR, "iwithprefix") || !strcmp (STR, "iwithprefixbefore") \
>   || !strcmp (STR, "iquote") || !strcmp (STR, "isystem") \
> -  || !strcmp (STR, "isysroot") \
> +  || !strcmp (STR, "isysroot") || !strcmp (STR, "imultilib") \
>   || !strcmp (STR, "-param") || !strcmp (STR, "specs") \
>   || !strcmp (STR, "MF") || !strcmp (STR, "MT") || !strcmp (STR, "MQ") \
>   || !strcmp (STR, "fintrinsic-modules-path") \
> Index: gcc/gcc.c
> ===================================================================
> --- gcc/gcc.c   (revision 162722)
> +++ gcc/gcc.c   (working copy)
> @@ -858,7 +858,7 @@ static const char *cpp_debug_options = "
>  static const char *cc1_options =
>  "%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
>  %{!iplugindir*:%{fplugin*:%:find-plugindir()}}\
> - %1 %{!Q:-quiet} %{!dumpbase:-dumpbase %B} %{d*} %{m*} %{a*}\
> + %1 %{!Q:-quiet} %{!dumpbase:-dumpbase %B} %{d*} %{m*} %{aux-info*}\
>  %{fcompare-debug-second:%:compare-debug-auxbase-opt(%b)} \
>  %{!fcompare-debug-second:%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}}%{!c:%{!S:-auxbase %b}} \
>  %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs}\
> @@ -1199,12 +1199,9 @@ static const struct option_map option_ma
>    {"--print-sysroot", "-print-sysroot", 0},
>    {"--print-sysroot-headers-suffix", "-print-sysroot-headers-suffix", 0},
>    {"--profile", "-p", 0},
> -   {"--profile-blocks", "-a", 0},
> -   {"--quiet", "-q", 0},
>    {"--resource", "-fcompile-resource=", "aj"},
>    {"--save-temps", "-save-temps", 0},
>    {"--shared", "-shared", 0},
> -   {"--silent", "-q", 0},
>    {"--specs", "-specs=", "aj"},
>    {"--static", "-static", 0},
>    {"--std", "-std=", "aj"},
> Index: gcc/ada/gcc-interface/lang-specs.h
> ===================================================================
> --- gcc/ada/gcc-interface/lang-specs.h  (revision 162722)
> +++ gcc/ada/gcc-interface/lang-specs.h  (working copy)
> @@ -36,7 +36,7 @@
>     %{nostdinc*} %{nostdlib*}\
>     -dumpbase %{.adb:%b.adb}%{.ads:%b.ads}%{!.adb:%{!.ads:%b.ada}}\
>     %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} \
> -    %{O*} %{W*} %{w} %{p} %{pg:-p} %{a} %{d*} %{f*}\
> +    %{O*} %{W*} %{w} %{p} %{pg:-p} %{d*} %{f*}\
>     %{coverage:-fprofile-arcs -ftest-coverage} "
>    "%{gnatea:-gnatez} %{g*&m*} "
>  #if defined(TARGET_VXWORKS_RTP)
> Index: gcc/config/alpha/alpha.h
> ===================================================================
> --- gcc/config/alpha/alpha.h    (revision 162722)
> +++ gcc/config/alpha/alpha.h    (working copy)
> @@ -96,6 +96,9 @@ along with GCC; see the file COPYING3.
>   while (0)
>  #endif
>
> +#define SWITCH_TAKES_ARG(CHAR)                                         \
> +  (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G')
> +
>  #define WORD_SWITCH_TAKES_ARG(STR)             \
>  (!strcmp (STR, "rpath") || DEFAULT_WORD_SWITCH_TAKES_ARG(STR))
>
> Index: gcc/config/alpha/osf5.h
> ===================================================================
> --- gcc/config/alpha/osf5.h     (revision 162722)
> +++ gcc/config/alpha/osf5.h     (working copy)
> @@ -84,7 +84,7 @@ along with GCC; see the file COPYING3.
>    -lpdf.  */
>
>  #define LIB_SPEC \
> -"%{p|pg:-lprof1%{pthread|threads:_r} -lpdf} %{a:-lprof2} \
> +"%{p|pg:-lprof1%{pthread|threads:_r} -lpdf} \
>  %{threads: -lpthreads} %{pthread|threads: -lpthread -lmach -lexc} -lc"
>
>  /* Pass "-G 8" to ld because Alpha's CC does.  Pass -O3 if we are
> Index: gcc/config/rx/rx.c
> ===================================================================
> --- gcc/config/rx/rx.c  (revision 162722)
> +++ gcc/config/rx/rx.c  (working copy)
> @@ -2130,7 +2130,6 @@ rx_handle_option (size_t code, const cha
>       return value >= 0 && value <= 4;
>
>     case OPT_mcpu_:
> -    case OPT_patch_:
>       if (strcasecmp (arg, "RX610") == 0)
>        rx_cpu_type = RX610;
>       else if (strcasecmp (arg, "RX200") == 0)
> Index: gcc/config/rx/rx.opt
> ===================================================================
> --- gcc/config/rx/rx.opt        (revision 162722)
> +++ gcc/config/rx/rx.opt        (working copy)
> @@ -46,10 +46,6 @@ mcpu=
>  Target RejectNegative Joined Var(rx_cpu_name) Report
>  Specify the target RX cpu type.
>
> -patch=
> -Target RejectNegative Joined Var(rx_cpu_name)
> -Alias for -mcpu.
> -
>  ;---------------------------------------------------
>
>  mbig-endian-data
> Index: gcc/config/iq2000/iq2000.h
> ===================================================================
> --- gcc/config/iq2000/iq2000.h  (revision 162722)
> +++ gcc/config/iq2000/iq2000.h  (working copy)
> @@ -1,6 +1,6 @@
>  /* Definitions of target machine for GNU compiler.
>    Vitesse IQ2000 processors
> -   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
> +   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
>    Free Software Foundation, Inc.
>
>    This file is part of GCC.
> @@ -21,10 +21,6 @@
>
>  /* Driver configuration.  */
>
> -#undef  SWITCH_TAKES_ARG
> -#define SWITCH_TAKES_ARG(CHAR)                                         \
> -  (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G')
> -
>  /* The svr4.h LIB_SPEC with -leval and --*group tacked on */
>  #undef  LIB_SPEC
>  #define LIB_SPEC "%{!shared:%{!symbolic:--start-group -lc -leval -lgcc --end-group}}"
> Index: gcc/config/ia64/ia64.h
> ===================================================================
> --- gcc/config/ia64/ia64.h      (revision 162722)
> +++ gcc/config/ia64/ia64.h      (working copy)
> @@ -53,6 +53,9 @@ do {                                          \
>
>  #define ASM_EXTRA_SPEC ""
>
> +#define SWITCH_TAKES_ARG(CHAR)                                         \
> +  (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G')
> +
>  /* Variables which are this size or smaller are put in the sdata/sbss
>    sections.  */
>  extern unsigned int ia64_section_threshold;
> Index: gcc/config/rs6000/sysv4.h
> ===================================================================
> --- gcc/config/rs6000/sysv4.h   (revision 162722)
> +++ gcc/config/rs6000/sysv4.h   (working copy)
> @@ -1,6 +1,6 @@
>  /* Target definitions for GNU compiler for PowerPC running System V.4
>    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
> -   2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
> +   2004, 2005, 2006, 2007, 2008, 2009, 2010  Free Software Foundation, Inc.
>    Contributed by Cygnus Support.
>
>    This file is part of GCC.
> @@ -520,12 +520,8 @@ do {                                                                       \
>
>  /* Override svr4.h definition.  */
>  #undef SWITCH_TAKES_ARG
> -#define        SWITCH_TAKES_ARG(CHAR)                                          \
> -  ((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o'                     \
> -   || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u'                  \
> -   || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x'                  \
> -   || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V'                  \
> -   || (CHAR) == 'B' || (CHAR) == 'b' || (CHAR) == 'G')
> +#define SWITCH_TAKES_ARG(CHAR)                                         \
> +  (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G')
>
>  extern int fixuplabelno;
>
> Index: gcc/config/darwin.h
> ===================================================================
> --- gcc/config/darwin.h (revision 162722)
> +++ gcc/config/darwin.h (working copy)
> @@ -236,6 +236,7 @@ extern GTY(()) int darwin_ms_struct;
>    !strcmp (STR, "sectobjectsymbols") ? 2 :     \
>    !strcmp (STR, "segcreate") ? 3 :             \
>    !strcmp (STR, "dylinker_install_name") ? 1 : \
> +   !strcmp (STR, "iframework") ? 1 : \
>    0)
>
>  #define SUBTARGET_C_COMMON_OVERRIDE_OPTIONS do {                        \
> Index: gcc/config/bfin/bfin.h
> ===================================================================
> --- gcc/config/bfin/bfin.h      (revision 162722)
> +++ gcc/config/bfin/bfin.h      (working copy)
> @@ -1,5 +1,5 @@
>  /* Definitions for the Blackfin port.
> -   Copyright (C) 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
> +   Copyright (C) 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
>    Contributed by Analog Devices.
>
>    This file is part of GCC.
> @@ -252,7 +252,7 @@ extern int target_flags;
>    Defined in svr4.h.  */
>  #undef  ASM_SPEC
>  #define ASM_SPEC "\
> -%{G*} %{v} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \
> +%{v} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \
>     %{mno-fdpic:-mnopic} %{mfdpic}"
>
>  #define LINK_SPEC "\
> @@ -262,7 +262,6 @@ extern int target_flags;
>  %{static:-dn -Bstatic} \
>  %{shared:-G -Bdynamic} \
>  %{symbolic:-Bsymbolic} \
> -%{G*} \
>  %{YP,*} \
>  %{Qy:} %{!Qn:-Qy} \
>  -init __init -fini __fini "
>
> --
> Joseph S. Myers
> joseph@codesourcery.com
>
Nathan Froyd - Aug. 9, 2010, 1:21 a.m.
On Mon, Aug 02, 2010 at 04:43:30PM +0000, Joseph S. Myers wrote:
> * The SWITCH_TAKES_ARG support for -G n on iq2000 was an unnecessary
>   copy from some other target since iq2000 doesn't support the -G
>   option.

This bit breaks building libgcc for iq2000-elf because t-iq2000 does
specify -G:

# We must build libgcc2.a with -G 0, in case the user wants to link
# without the $gp register.
TARGET_LIBGCC2_CFLAGS = -G 0

Removing that line is easy enough, but perhaps -G really is (supposed to
be) supported?  Nick, is -G supported or not on iq2000?

-Nathan
Joseph S. Myers - Aug. 9, 2010, 5:02 p.m.
On Sun, 8 Aug 2010, Nathan Froyd wrote:

> On Mon, Aug 02, 2010 at 04:43:30PM +0000, Joseph S. Myers wrote:
> > * The SWITCH_TAKES_ARG support for -G n on iq2000 was an unnecessary
> >   copy from some other target since iq2000 doesn't support the -G
> >   option.
> 
> This bit breaks building libgcc for iq2000-elf because t-iq2000 does
> specify -G:
> 
> # We must build libgcc2.a with -G 0, in case the user wants to link
> # without the $gp register.
> TARGET_LIBGCC2_CFLAGS = -G 0
> 
> Removing that line is easy enough, but perhaps -G really is (supposed to
> be) supported?  Nick, is -G supported or not on iq2000?

I assessed what is meant to support -G based on what uses the g_switch_* 
variables.  The iq2000 back end does not use them.  I suppose it would 
have been accepted only because of the specs in svr4.h which that target 
uses - that is, the driver thought this was a linker option (and if -G, 
without argument, is being accepted as a linker option on a given target, 
then the driver should not for other purposes be treating it as an option 
taking an argument).

Patch

Index: gcc/doc/invoke.texi
===================================================================
--- gcc/doc/invoke.texi	(revision 162722)
+++ gcc/doc/invoke.texi	(working copy)
@@ -790,7 +790,7 @@  See RS/6000 and PowerPC Options.
 
 @emph{RX Options}
 @gccoptlist{-m64bit-doubles  -m32bit-doubles  -fpu  -nofpu@gol
--mcpu= -patch=@gol
+-mcpu=@gol
 -mbig-endian-data -mlittle-endian-data @gol
 -msmall-data @gol
 -msim  -mno-sim@gol
@@ -15816,9 +15816,7 @@  use then the FPU hardware will not be us
 This is because the RX FPU instructions are themselves unsafe.
 
 @item -mcpu=@var{name}
-@itemx -patch=@var{name}
 @opindex -mcpu
-@opindex -patch
 Selects the type of RX CPU to be targeted.  Currently three types are
 supported, the generic @var{RX600} and @var{RX200} series hardware and
 the specific @var{RX610} cpu.  The default is @var{RX600}.
Index: gcc/c-family/c.opt
===================================================================
--- gcc/c-family/c.opt	(revision 162722)
+++ gcc/c-family/c.opt	(working copy)
@@ -952,10 +952,6 @@  print-objc-runtime-info
 ObjC ObjC++
 Generate C header of platform-specific features
 
-print-pch-checksum
-C ObjC C++ ObjC++
-Print a checksum of the executable for PCH validity checking, and stop
-
 remap
 C ObjC C++ ObjC++
 Remap file names when including files
Index: gcc/c-family/c-opts.c
===================================================================
--- gcc/c-family/c-opts.c	(revision 162722)
+++ gcc/c-family/c-opts.c	(working copy)
@@ -849,11 +849,6 @@  c_common_handle_option (size_t scode, co
       print_struct_values = 1;
       break;
 
-    case OPT_print_pch_checksum:
-      c_common_print_pch_checksum (stdout);
-      exit_after_options = true;
-      break;
-
     case OPT_remap:
       cpp_opts->remap = 1;
       break;
Index: gcc/defaults.h
===================================================================
--- gcc/defaults.h	(revision 162722)
+++ gcc/defaults.h	(working copy)
@@ -50,7 +50,7 @@  see the files COPYING3 and COPYING.RUNTI
   || !strcmp (STR, "idirafter") || !strcmp (STR, "iprefix") \
   || !strcmp (STR, "iwithprefix") || !strcmp (STR, "iwithprefixbefore") \
   || !strcmp (STR, "iquote") || !strcmp (STR, "isystem") \
-  || !strcmp (STR, "isysroot") \
+  || !strcmp (STR, "isysroot") || !strcmp (STR, "imultilib") \
   || !strcmp (STR, "-param") || !strcmp (STR, "specs") \
   || !strcmp (STR, "MF") || !strcmp (STR, "MT") || !strcmp (STR, "MQ") \
   || !strcmp (STR, "fintrinsic-modules-path") \
Index: gcc/gcc.c
===================================================================
--- gcc/gcc.c	(revision 162722)
+++ gcc/gcc.c	(working copy)
@@ -858,7 +858,7 @@  static const char *cpp_debug_options = "
 static const char *cc1_options =
 "%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
  %{!iplugindir*:%{fplugin*:%:find-plugindir()}}\
- %1 %{!Q:-quiet} %{!dumpbase:-dumpbase %B} %{d*} %{m*} %{a*}\
+ %1 %{!Q:-quiet} %{!dumpbase:-dumpbase %B} %{d*} %{m*} %{aux-info*}\
  %{fcompare-debug-second:%:compare-debug-auxbase-opt(%b)} \
  %{!fcompare-debug-second:%{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}}%{!c:%{!S:-auxbase %b}} \
  %{g*} %{O*} %{W*&pedantic*} %{w} %{std*&ansi&trigraphs}\
@@ -1199,12 +1199,9 @@  static const struct option_map option_ma
    {"--print-sysroot", "-print-sysroot", 0},
    {"--print-sysroot-headers-suffix", "-print-sysroot-headers-suffix", 0},
    {"--profile", "-p", 0},
-   {"--profile-blocks", "-a", 0},
-   {"--quiet", "-q", 0},
    {"--resource", "-fcompile-resource=", "aj"},
    {"--save-temps", "-save-temps", 0},
    {"--shared", "-shared", 0},
-   {"--silent", "-q", 0},
    {"--specs", "-specs=", "aj"},
    {"--static", "-static", 0},
    {"--std", "-std=", "aj"},
Index: gcc/ada/gcc-interface/lang-specs.h
===================================================================
--- gcc/ada/gcc-interface/lang-specs.h	(revision 162722)
+++ gcc/ada/gcc-interface/lang-specs.h	(working copy)
@@ -36,7 +36,7 @@ 
     %{nostdinc*} %{nostdlib*}\
     -dumpbase %{.adb:%b.adb}%{.ads:%b.ads}%{!.adb:%{!.ads:%b.ada}}\
     %{c|S:%{o*:-auxbase-strip %*}%{!o*:-auxbase %b}}%{!c:%{!S:-auxbase %b}} \
-    %{O*} %{W*} %{w} %{p} %{pg:-p} %{a} %{d*} %{f*}\
+    %{O*} %{W*} %{w} %{p} %{pg:-p} %{d*} %{f*}\
     %{coverage:-fprofile-arcs -ftest-coverage} "
    "%{gnatea:-gnatez} %{g*&m*} "
 #if defined(TARGET_VXWORKS_RTP)
Index: gcc/config/alpha/alpha.h
===================================================================
--- gcc/config/alpha/alpha.h	(revision 162722)
+++ gcc/config/alpha/alpha.h	(working copy)
@@ -96,6 +96,9 @@  along with GCC; see the file COPYING3.  
   while (0)
 #endif
 
+#define SWITCH_TAKES_ARG(CHAR)						\
+  (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G')
+
 #define WORD_SWITCH_TAKES_ARG(STR)		\
  (!strcmp (STR, "rpath") || DEFAULT_WORD_SWITCH_TAKES_ARG(STR))
 
Index: gcc/config/alpha/osf5.h
===================================================================
--- gcc/config/alpha/osf5.h	(revision 162722)
+++ gcc/config/alpha/osf5.h	(working copy)
@@ -84,7 +84,7 @@  along with GCC; see the file COPYING3.  
    -lpdf.  */
 
 #define LIB_SPEC \
-"%{p|pg:-lprof1%{pthread|threads:_r} -lpdf} %{a:-lprof2} \
+"%{p|pg:-lprof1%{pthread|threads:_r} -lpdf} \
  %{threads: -lpthreads} %{pthread|threads: -lpthread -lmach -lexc} -lc"
 
 /* Pass "-G 8" to ld because Alpha's CC does.  Pass -O3 if we are
Index: gcc/config/rx/rx.c
===================================================================
--- gcc/config/rx/rx.c	(revision 162722)
+++ gcc/config/rx/rx.c	(working copy)
@@ -2130,7 +2130,6 @@  rx_handle_option (size_t code, const cha
       return value >= 0 && value <= 4;
 
     case OPT_mcpu_:
-    case OPT_patch_:
       if (strcasecmp (arg, "RX610") == 0)
 	rx_cpu_type = RX610;
       else if (strcasecmp (arg, "RX200") == 0)
Index: gcc/config/rx/rx.opt
===================================================================
--- gcc/config/rx/rx.opt	(revision 162722)
+++ gcc/config/rx/rx.opt	(working copy)
@@ -46,10 +46,6 @@  mcpu=
 Target RejectNegative Joined Var(rx_cpu_name) Report
 Specify the target RX cpu type.
 
-patch=
-Target RejectNegative Joined Var(rx_cpu_name)
-Alias for -mcpu.
-
 ;---------------------------------------------------
 
 mbig-endian-data
Index: gcc/config/iq2000/iq2000.h
===================================================================
--- gcc/config/iq2000/iq2000.h	(revision 162722)
+++ gcc/config/iq2000/iq2000.h	(working copy)
@@ -1,6 +1,6 @@ 
 /* Definitions of target machine for GNU compiler.  
    Vitesse IQ2000 processors
-   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009
+   Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
    Free Software Foundation, Inc.
 
    This file is part of GCC.
@@ -21,10 +21,6 @@ 
 
 /* Driver configuration.  */
 
-#undef  SWITCH_TAKES_ARG
-#define SWITCH_TAKES_ARG(CHAR)						\
-  (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G')
-
 /* The svr4.h LIB_SPEC with -leval and --*group tacked on */
 #undef  LIB_SPEC
 #define LIB_SPEC "%{!shared:%{!symbolic:--start-group -lc -leval -lgcc --end-group}}"
Index: gcc/config/ia64/ia64.h
===================================================================
--- gcc/config/ia64/ia64.h	(revision 162722)
+++ gcc/config/ia64/ia64.h	(working copy)
@@ -53,6 +53,9 @@  do {						\
 
 #define ASM_EXTRA_SPEC ""
 
+#define SWITCH_TAKES_ARG(CHAR)						\
+  (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G')
+
 /* Variables which are this size or smaller are put in the sdata/sbss
    sections.  */
 extern unsigned int ia64_section_threshold;
Index: gcc/config/rs6000/sysv4.h
===================================================================
--- gcc/config/rs6000/sysv4.h	(revision 162722)
+++ gcc/config/rs6000/sysv4.h	(working copy)
@@ -1,6 +1,6 @@ 
 /* Target definitions for GNU compiler for PowerPC running System V.4
    Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
-   2004, 2005, 2006, 2007, 2008, 2009  Free Software Foundation, Inc.
+   2004, 2005, 2006, 2007, 2008, 2009, 2010  Free Software Foundation, Inc.
    Contributed by Cygnus Support.
 
    This file is part of GCC.
@@ -520,12 +520,8 @@  do {									\
 
 /* Override svr4.h definition.  */
 #undef	SWITCH_TAKES_ARG
-#define	SWITCH_TAKES_ARG(CHAR)						\
-  ((CHAR) == 'D' || (CHAR) == 'U' || (CHAR) == 'o'			\
-   || (CHAR) == 'e' || (CHAR) == 'T' || (CHAR) == 'u'			\
-   || (CHAR) == 'I' || (CHAR) == 'm' || (CHAR) == 'x'			\
-   || (CHAR) == 'L' || (CHAR) == 'A' || (CHAR) == 'V'			\
-   || (CHAR) == 'B' || (CHAR) == 'b' || (CHAR) == 'G')
+#define SWITCH_TAKES_ARG(CHAR)						\
+  (DEFAULT_SWITCH_TAKES_ARG (CHAR) || (CHAR) == 'G')
 
 extern int fixuplabelno;
 
Index: gcc/config/darwin.h
===================================================================
--- gcc/config/darwin.h	(revision 162722)
+++ gcc/config/darwin.h	(working copy)
@@ -236,6 +236,7 @@  extern GTY(()) int darwin_ms_struct;
    !strcmp (STR, "sectobjectsymbols") ? 2 :     \
    !strcmp (STR, "segcreate") ? 3 :             \
    !strcmp (STR, "dylinker_install_name") ? 1 : \
+   !strcmp (STR, "iframework") ? 1 : \
    0)
 
 #define SUBTARGET_C_COMMON_OVERRIDE_OPTIONS do {                        \
Index: gcc/config/bfin/bfin.h
===================================================================
--- gcc/config/bfin/bfin.h	(revision 162722)
+++ gcc/config/bfin/bfin.h	(working copy)
@@ -1,5 +1,5 @@ 
 /* Definitions for the Blackfin port.
-   Copyright (C) 2005, 2007, 2008, 2009 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
    Contributed by Analog Devices.
 
    This file is part of GCC.
@@ -252,7 +252,7 @@  extern int target_flags;
    Defined in svr4.h.  */
 #undef  ASM_SPEC
 #define ASM_SPEC "\
-%{G*} %{v} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \
+%{v} %{n} %{T} %{Ym,*} %{Yd,*} %{Wa,*:%*} \
     %{mno-fdpic:-mnopic} %{mfdpic}"
 
 #define LINK_SPEC "\
@@ -262,7 +262,6 @@  extern int target_flags;
 %{static:-dn -Bstatic} \
 %{shared:-G -Bdynamic} \
 %{symbolic:-Bsymbolic} \
-%{G*} \
 %{YP,*} \
 %{Qy:} %{!Qn:-Qy} \
 -init __init -fini __fini "