From patchwork Tue Jan 22 16:00:10 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [RFC] Fix for PR driver/47785 From: Ramana Radhakrishnan X-Patchwork-Id: 214579 Message-Id: <50FEB78A.6050709@arm.com> To: "gcc-patches@gcc.gnu.org ;" Date: Tue, 22 Jan 2013 16:00:10 +0000 Hi, I ran into PR driver/47785 when doing some testing with an option passed to the testsuite and I chose to fix this by putting out COLLECT_AS_OPTIONS as though these are options for the driver by prepending them with a "'-Wa", and suffixing them with a "'" character and additionally providing spaces as duly required. I've chosen a simple implementation. Tested in the past with x86_64-linux-gnu and arm-none-eabi cross tests (with an additional -Wa option passed to the default flags in a site.exp) Thoughts ? Ok for trunk now or should I stage this for 4.9 ? regards, Ramana gcc/ Ramana Radhakrishnan PR driver/47785 * gcc.c (set_collect_as_options): New. (main): Call this. * lto-wrapper.c (run_gcc): Handle COLLECT_AS_OPTIONS. testsuite/ Ramana Radhakrishnan PR driver/47785 * gcc.dg/pr47785.c: New test. diff --git a/gcc/gcc.c b/gcc/gcc.c index 13e93e5..df18317 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -221,6 +221,7 @@ static const char *eval_spec_function (const char *, const char *); static const char *handle_spec_function (const char *); static char *save_string (const char *, int); static void set_collect_gcc_options (void); +static void set_collect_as_options (void); static int do_spec_1 (const char *, int, const char *); static int do_spec_2 (const char *); static void do_option_spec (const char *, const char *); @@ -4047,6 +4048,30 @@ process_command (unsigned int decoded_options_count, infiles[n_infiles].name = 0; } +static void +set_collect_as_options (void) +{ + int ix; + char *opt; + int first_time = TRUE; + /* Build COLLECT_AS_OPTIONS to have all of the options specified to + the compiler. */ + obstack_grow (&collect_obstack, "COLLECT_AS_OPTIONS=", + sizeof ("COLLECT_AS_OPTIONS=") - 1); + + FOR_EACH_VEC_ELT (assembler_options, ix, opt) + { + if (!first_time) + obstack_grow (&collect_obstack, " ", 1); + obstack_grow (&collect_obstack, "\'-Wa,", 5); + obstack_grow (&collect_obstack, opt, strlen (opt)); + obstack_grow (&collect_obstack, "\'", 1); + first_time = FALSE; + } + obstack_grow (&collect_obstack, "\0", 1); + xputenv (XOBFINISH (&collect_obstack, char *)); +} + /* Store switches not filtered out by %