]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Keep -m[arch|tune]=native in COLLECT_GCC_OPTIONS.
authorH.J. Lu <hongjiu.lu@intel.com>
Fri, 7 Jan 2011 20:35:05 +0000 (20:35 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Fri, 7 Jan 2011 20:35:05 +0000 (12:35 -0800)
2011-01-07  H.J. Lu  <hongjiu.lu@intel.com>

PR driver/42445
* gcc.c (%>S): New.
(SWITCH_KEEP_FOR_GCC): Likewise.
(set_collect_gcc_options): Check SWITCH_KEEP_FOR_GCC.
(do_spec_1): Handle "%>".

* config/i386/i386.h (CC1_CPU_SPEC): Replace "%<" with "%>".

From-SVN: r168583

gcc/ChangeLog
gcc/config/i386/i386.h
gcc/gcc.c

index 503be3c42bb6ea17521b1db252540039d7ab1c13..6b8a742822a57e59a51570d779933f17e4d7bbba 100644 (file)
@@ -1,3 +1,13 @@
+2011-01-07  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR driver/42445
+       * gcc.c (%>S): New.
+       (SWITCH_KEEP_FOR_GCC): Likewise.
+       (set_collect_gcc_options): Check SWITCH_KEEP_FOR_GCC.
+       (do_spec_1): Handle "%>".
+
+       * config/i386/i386.h (CC1_CPU_SPEC): Replace "%<" with "%>".
+
 2011-01-07  Jakub Jelinek  <jakub@redhat.com>
 
        PR target/47201
index 0a948cc06aad759093237a28f18b7d4182e6cb6c..65f005b01d3fd1df17d79e1b448dd17c8797e2ee 100644 (file)
@@ -561,9 +561,9 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
 #define CC1_CPU_SPEC CC1_CPU_SPEC_1
 #else
 #define CC1_CPU_SPEC CC1_CPU_SPEC_1 \
-"%{march=native:%<march=native %:local_cpu_detect(arch) \
-  %{!mtune=*:%<mtune=native %:local_cpu_detect(tune)}} \
-%{mtune=native:%<mtune=native %:local_cpu_detect(tune)}"
+"%{march=native:%>march=native %:local_cpu_detect(arch) \
+  %{!mtune=*:%>mtune=native %:local_cpu_detect(tune)}} \
+%{mtune=native:%>mtune=native %:local_cpu_detect(tune)}"
 #endif
 #endif
 \f
index 9ec7d4e4f142f845ab749f978d1e59d30829ba33..2aebceffd57c6af9441bb3d84a9109d2641d1814 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -390,6 +390,7 @@ or with constant text in a single argument.
         Note - this command is position dependent.  % commands in the
         spec string before this one will see -S, % commands in the
         spec string after this one will not.
+ %>S   Similar to "%<S", but keep it in the GCC command line.
  %<S*  remove all occurrences of all switches beginning with -S from the
         command line.
  %:function(args)
@@ -2743,10 +2744,11 @@ execute (void)
    The `validated' field is nonzero if any spec has looked at this switch;
    if it remains zero at the end of the run, it must be meaningless.  */
 
-#define SWITCH_LIVE                            0x1
-#define SWITCH_FALSE                           0x2
-#define SWITCH_IGNORE                  0x4
-#define SWITCH_IGNORE_PERMANENTLY      0x8
+#define SWITCH_LIVE                            (1 << 0)
+#define SWITCH_FALSE                           (1 << 1)
+#define SWITCH_IGNORE                  (1 << 2)
+#define SWITCH_IGNORE_PERMANENTLY      (1 << 3)
+#define SWITCH_KEEP_FOR_GCC            (1 << 4)
 
 struct switchstr
 {
@@ -3926,7 +3928,9 @@ set_collect_gcc_options (void)
       first_time = FALSE;
 
       /* Ignore elided switches.  */
-      if ((switches[i].live_cond & SWITCH_IGNORE) != 0)
+      if ((switches[i].live_cond
+          & (SWITCH_IGNORE | SWITCH_KEEP_FOR_GCC))
+         == SWITCH_IGNORE)
        continue;
 
       obstack_grow (&collect_obstack, "'-", 2);
@@ -5091,10 +5095,17 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
           /* Henceforth ignore the option(s) matching the pattern
              after the %<.  */
          case '<':
+         case '>':
            {
              unsigned len = 0;
              int have_wildcard = 0;
              int i;
+             int switch_option;
+
+             if (c == '>')
+               switch_option = SWITCH_IGNORE | SWITCH_KEEP_FOR_GCC;
+             else
+               switch_option = SWITCH_IGNORE;
 
              while (p[len] && p[len] != ' ' && p[len] != '\t')
                len++;
@@ -5106,7 +5117,7 @@ do_spec_1 (const char *spec, int inswitch, const char *soft_matched_part)
                if (!strncmp (switches[i].part1, p, len - have_wildcard)
                    && (have_wildcard || switches[i].part1[len] == '\0'))
                  {
-                   switches[i].live_cond |= SWITCH_IGNORE;
+                   switches[i].live_cond |= switch_option;
                    switches[i].validated = 1;
                  }