aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcc.c
diff options
context:
space:
mode:
authorPrathamesh Kulkarni <prathamesh.kulkarni@linaro.org>2020-02-24 11:55:45 +0530
committerPrathamesh Kulkarni <prathamesh.kulkarni@linaro.org>2020-02-24 11:55:45 +0530
commitf1a681a174cdfb82e62c246d6f4add9a25fc2e43 (patch)
tree8c6d66f99473e10c0265b47eec8831eacc05392b /gcc/gcc.c
parent9069e9484cec2ff981c87c75b226ad738847ca07 (diff)
downloadgcc-f1a681a174cdfb82e62c246d6f4add9a25fc2e43.zip
gcc-f1a681a174cdfb82e62c246d6f4add9a25fc2e43.tar.gz
gcc-f1a681a174cdfb82e62c246d6f4add9a25fc2e43.tar.bz2
PR47785: Add support for handling Xassembler/Wa options with LTO.
2020-02-24 Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org> Kugan Vivekandarajah <kugan.vivekanandarajah@linaro.org> PR driver/47785 * gcc.c (putenv_COLLECT_AS_OPTIONS): New function. (driver::main): Call putenv_COLLECT_AS_OPTIONS. * opts-common.c (parse_options_from_collect_gcc_options): New function. (prepend_xassembler_to_collect_as_options): Likewise. * opts.h (parse_options_from_collect_gcc_options): Declare prototype. (prepend_xassembler_to_collect_as_options): Likewise. * lto-opts.c (lto_write_options): Stream assembler options in COLLECT_AS_OPTIONS. * lto-wrapper.c (xassembler_options_error): New static variable. (get_options_from_collect_gcc_options): Move parsing options code to parse_options_from_collect_gcc_options and call it. (merge_and_complain): Validate -Xassembler options. (append_compiler_options): Handle OPT_Xassembler. (run_gcc): Append command line -Xassembler options to collect_gcc_options. * doc/invoke.texi: Add documentation about using Xassembler options with LTO. testsuite/ * gcc.target/arm/pr78353-1.c: New test. * gcc.target/arm/pr78353-2.c: Likewise.
Diffstat (limited to 'gcc/gcc.c')
-rw-r--r--gcc/gcc.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/gcc/gcc.c b/gcc/gcc.c
index effc384..9f790db 100644
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -5242,6 +5242,34 @@ do_specs_vec (vec<char_p> vec)
}
}
+/* Add options passed via -Xassembler or -Wa to COLLECT_AS_OPTIONS. */
+
+static void
+putenv_COLLECT_AS_OPTIONS (vec<char_p> vec)
+{
+ if (vec.is_empty ())
+ return;
+
+ obstack_init (&collect_obstack);
+ obstack_grow (&collect_obstack, "COLLECT_AS_OPTIONS=",
+ strlen ("COLLECT_AS_OPTIONS="));
+
+ char *opt;
+ unsigned ix;
+
+ FOR_EACH_VEC_ELT (vec, ix, opt)
+ {
+ obstack_1grow (&collect_obstack, '\'');
+ obstack_grow (&collect_obstack, opt, strlen (opt));
+ obstack_1grow (&collect_obstack, '\'');
+ if (ix < vec.length () - 1)
+ obstack_1grow(&collect_obstack, ' ');
+ }
+
+ obstack_1grow (&collect_obstack, '\0');
+ xputenv (XOBFINISH (&collect_obstack, char *));
+}
+
/* Process the sub-spec SPEC as a portion of a larger spec.
This is like processing a whole spec except that we do
not initialize at the beginning and we do not supply a
@@ -7363,6 +7391,7 @@ driver::main (int argc, char **argv)
global_initializations ();
build_multilib_strings ();
set_up_specs ();
+ putenv_COLLECT_AS_OPTIONS (assembler_options);
putenv_COLLECT_GCC (argv[0]);
maybe_putenv_COLLECT_LTO_WRAPPER ();
maybe_putenv_OFFLOAD_TARGETS ();