aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorH.J. Lu <hongjiu.lu@intel.com>2011-01-07 20:35:05 +0000
committerH.J. Lu <hjl@gcc.gnu.org>2011-01-07 12:35:05 -0800
commit96f5b13771253b981866176b7539e26d58dd5e75 (patch)
tree49315d4236678f94f5900e65d53d250f374c711b /gcc
parentc21bbd7a5e90834d14fd097412ff5be6c71c7b3e (diff)
downloadgcc-96f5b13771253b981866176b7539e26d58dd5e75.zip
gcc-96f5b13771253b981866176b7539e26d58dd5e75.tar.gz
gcc-96f5b13771253b981866176b7539e26d58dd5e75.tar.bz2
Keep -m[arch|tune]=native in COLLECT_GCC_OPTIONS.
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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/config/i386/i386.h6
-rw-r--r--gcc/gcc.c23
3 files changed, 30 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 503be3c..6b8a742 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 0a948cc..65f005b 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -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
diff --git a/gcc/gcc.c b/gcc/gcc.c
index 9ec7d4e..2aebcef 100644
--- 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;
}