This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[4.7] Avoid global state in sh_handle_option
- From: "Joseph S. Myers" <joseph at codesourcery dot com>
- To: gcc-patches at gcc dot gnu dot org
- Cc: aoliva at redhat dot com, kkojima at gcc dot gnu dot org
- Date: Mon, 7 Mar 2011 02:00:14 +0000 (UTC)
- Subject: [4.7] Avoid global state in sh_handle_option
This patch, for 4.7 and relative to a tree with
<http://gcc.gnu.org/ml/gcc-patches/2011-02/msg01709.html> applied,
stops the SH handle_option hook from using global state.
Tested building cc1 and xgcc for cross to sh-elf. Will commit to
trunk for 4.7 in the absence of target maintainer objections.
2011-03-06 Joseph Myers <joseph@codesourcery.com>
* config/sh/sh.c (sh_handle_option): Access target_flags via opts
pointer. Don't assert that global structures are in use.
diff -rupN --exclude=.svn gcc-mainline-1/gcc/config/sh/sh.c gcc-mainline/gcc/config/sh/sh.c
--- gcc-mainline-1/gcc/config/sh/sh.c 2011-02-24 13:21:35.000000000 -0800
+++ gcc-mainline/gcc/config/sh/sh.c 2011-03-06 17:33:18.000000000 -0800
@@ -619,58 +619,59 @@ struct gcc_target targetm = TARGET_INITI
/* Implement TARGET_HANDLE_OPTION. */
static bool
-sh_handle_option (struct gcc_options *opts, struct gcc_options *opts_set,
+sh_handle_option (struct gcc_options *opts,
+ struct gcc_options *opts_set ATTRIBUTE_UNUSED,
const struct cl_decoded_option *decoded,
location_t loc ATTRIBUTE_UNUSED)
{
size_t code = decoded->opt_index;
- gcc_assert (opts == &global_options);
- gcc_assert (opts_set == &global_options_set);
-
switch (code)
{
case OPT_m1:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH1;
+ opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH1;
return true;
case OPT_m2:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH2;
+ opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH2;
return true;
case OPT_m2a:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH2A;
+ opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH2A;
return true;
case OPT_m2a_nofpu:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH2A_NOFPU;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH2A_NOFPU;
return true;
case OPT_m2a_single:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH2A_SINGLE;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH2A_SINGLE;
return true;
case OPT_m2a_single_only:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH2A_SINGLE_ONLY;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH2A_SINGLE_ONLY;
return true;
case OPT_m2e:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH2E;
+ opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH2E;
return true;
case OPT_m3:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH3;
+ opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH3;
return true;
case OPT_m3e:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH3E;
+ opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH3E;
return true;
case OPT_m4:
case OPT_m4_100:
case OPT_m4_200:
case OPT_m4_300:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4;
+ opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4;
return true;
case OPT_m4_nofpu:
@@ -680,62 +681,74 @@ sh_handle_option (struct gcc_options *op
case OPT_m4_340:
case OPT_m4_400:
case OPT_m4_500:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4_NOFPU;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4_NOFPU;
return true;
case OPT_m4_single:
case OPT_m4_100_single:
case OPT_m4_200_single:
case OPT_m4_300_single:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4_SINGLE;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4_SINGLE;
return true;
case OPT_m4_single_only:
case OPT_m4_100_single_only:
case OPT_m4_200_single_only:
case OPT_m4_300_single_only:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4_SINGLE_ONLY;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4_SINGLE_ONLY;
return true;
case OPT_m4a:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4A;
+ opts->x_target_flags = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4A;
return true;
case OPT_m4a_nofpu:
case OPT_m4al:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4A_NOFPU;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4A_NOFPU;
return true;
case OPT_m4a_single:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4A_SINGLE;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4A_SINGLE;
return true;
case OPT_m4a_single_only:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH4A_SINGLE_ONLY;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH4A_SINGLE_ONLY;
return true;
case OPT_m5_32media:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH5_32MEDIA;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH5_32MEDIA;
return true;
case OPT_m5_32media_nofpu:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH5_32MEDIA_NOFPU;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH5_32MEDIA_NOFPU;
return true;
case OPT_m5_64media:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH5_64MEDIA;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH5_64MEDIA;
return true;
case OPT_m5_64media_nofpu:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH5_64MEDIA_NOFPU;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH5_64MEDIA_NOFPU;
return true;
case OPT_m5_compact:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH5_COMPACT;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH5_COMPACT;
return true;
case OPT_m5_compact_nofpu:
- target_flags = (target_flags & ~MASK_ARCH) | SELECT_SH5_COMPACT_NOFPU;
+ opts->x_target_flags
+ = (opts->x_target_flags & ~MASK_ARCH) | SELECT_SH5_COMPACT_NOFPU;
return true;
default:
--
Joseph S. Myers
joseph@codesourcery.com