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]

[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


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