diff options
author | H.J. Lu <hongjiu.lu@intel.com> | 2011-01-07 20:35:05 +0000 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2011-01-07 12:35:05 -0800 |
commit | 96f5b13771253b981866176b7539e26d58dd5e75 (patch) | |
tree | 49315d4236678f94f5900e65d53d250f374c711b /gcc/gcc.c | |
parent | c21bbd7a5e90834d14fd097412ff5be6c71c7b3e (diff) | |
download | gcc-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/gcc.c')
-rw-r--r-- | gcc/gcc.c | 23 |
1 files changed, 17 insertions, 6 deletions
@@ -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; } |