From 96f5b13771253b981866176b7539e26d58dd5e75 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 7 Jan 2011 20:35:05 +0000 Subject: [PATCH] Keep -m[arch|tune]=native in COLLECT_GCC_OPTIONS. 2011-01-07 H.J. Lu 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 | 10 ++++++++++ gcc/config/i386/i386.h | 6 +++--- gcc/gcc.c | 23 +++++++++++++++++------ 3 files changed, 30 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 503be3c42bb6..6b8a742822a5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,13 @@ +2011-01-07 H.J. Lu + + 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 PR target/47201 diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h index 0a948cc06aad..65f005b01d3f 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)}" #endif #endif diff --git a/gcc/gcc.c b/gcc/gcc.c index 9ec7d4e4f142..2aebceffd57c 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 "%': { 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; }