2010-05-26 Magnus Granberg , Anthony G. Basile * gcc/gcc.c include esp.h static const char *cc1_spec We set that in esp.h if ENABLE_ESP. #ifdef EXTRA_SPECS: Add ESP_EXTRA_SPECS main(): Add do_self_spec esp_command_options_spec() 2009-06-27 Matthias Klose , Kees Cook , Anthony G. Basile LP #346126 * gcc/gcc.c *cpp_options Add %(esp_cpp_options) * gcc/gcc.c default_compilers[] Add %(esp_options) *cpp_unique_options Add %(esp_cpp_unique_options) --- gcc/gcc.c 2010-01-21 10:29:30.000000000 -0500 +++ gcc/gcc.c 2010-01-29 23:29:16.000000000 -0500 @@ -84,6 +84,7 @@ #include "gcc.h" #include "flags.h" #include "opts.h" +#include "esp.h" /* for --enable-esp support */ #ifdef HAVE_MMAP_FILE # include @@ -822,7 +823,9 @@ static const char *asm_debug; static const char *cpp_spec = CPP_SPEC; +#ifndef ENABLE_ESP static const char *cc1_spec = CC1_SPEC; +#endif static const char *cc1plus_spec = CC1PLUS_SPEC; static const char *link_gcc_c_sequence_spec = LINK_GCC_C_SEQUENCE_SPEC; static const char *link_ssp_spec = LINK_SSP_SPEC; @@ -885,7 +888,7 @@ static const char *cpp_options = "%(cpp_unique_options) %1 %{m*} %{std*&ansi&trigraphs} %{W*&pedantic*} %{w}\ %{f*} %{g*:%{!g0:%{g*} %{!fno-working-directory:-fworking-directory}}} %{O*}\ - %{undef} %{save-temps*:-fpch-preprocess}"; + %{undef} %{save-temps*:-fpch-preprocess} %(esp_cpp_options)"; /* This contains cpp options which are not passed when the preprocessor output will be used by another program. */ @@ -1075,15 +1081,15 @@ %{save-temps*|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \ %(cpp_options) -o %{save-temps*:%b.i} %{!save-temps*:%g.i} \n\ cc1 -fpreprocessed %{save-temps*:%b.i} %{!save-temps*:%g.i} \ - %(cc1_options)}\ + %(cc1_options) %(esp_options)}\ %{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\ - cc1 %(cpp_unique_options) %(cc1_options)}}}\ + cc1 %(cpp_unique_options) %(cc1_options) %(esp_options)}}}\ %{!fsyntax-only:%(invoke_as)}} \ %{combine:\ %{save-temps*|traditional-cpp|no-integrated-cpp:%(trad_capable_cpp) \ %(cpp_options) -o %{save-temps*:%b.i} %{!save-temps*:%g.i}}\ %{!save-temps*:%{!traditional-cpp:%{!no-integrated-cpp:\ - cc1 %(cpp_unique_options) %(cc1_options)}}\ + cc1 %(cpp_unique_options) %(cc1_options) %(esp_options)}}\ %{!fsyntax-only:%(invoke_as)}}}}}}", 0, 1, 1}, {"-", "%{!E:%e-E or -x required when input is from standard input}\ @@ -1106,7 +1112,7 @@ %W{o*:--output-pch=%*}%V}}}}}}", 0, 0, 0}, {".i", "@cpp-output", 0, 1, 0}, {"@cpp-output", - "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 1, 0}, + "%{!M:%{!MM:%{!E:cc1 -fpreprocessed %i %(cc1_options) %(esp_options) %{!fsyntax-only:%(invoke_as)}}}}", 0, 1, 0}, {".s", "@assembler", 0, 1, 0}, {"@assembler", "%{!M:%{!MM:%{!E:%{!S:as %(asm_debug) %(asm_options) %i %A }}}}", 0, 1, 0}, @@ -1699,18 +1705,23 @@ INIT_STATIC_SPEC ("sysroot_hdrs_suffix_spec", &sysroot_hdrs_suffix_spec), }; -#ifdef EXTRA_SPECS /* additional specs needed */ +/* EXTRA_SPECS needs to be defined */ +#ifndef EXTRA_SPECS +#define EXTRA_SPECS +#endif + +/* EXTRA_SPECS and ESP_EXTRA_SPECS add additional specs */ /* Structure to keep track of just the first two args of a spec_list. - That is all that the EXTRA_SPECS macro gives us. */ + That is all that the EXTRA_SPECS and ESP_EXTRA_SPECS macro gives us. */ struct spec_list_1 { const char *const name; const char *const ptr; }; -static const struct spec_list_1 extra_specs_1[] = { EXTRA_SPECS }; +/* ESP_EXTRA_SPECS before EXTRA_SPECS */ +static const struct spec_list_1 extra_specs_1[] = { ESP_EXTRA_SPECS, EXTRA_SPECS }; static struct spec_list *extra_specs = (struct spec_list *) 0; -#endif /* List of dynamically allocates specs that have been defined so far. */ @@ -1798,7 +1809,6 @@ if (verbose_flag) notice ("Using built-in specs.\n"); -#ifdef EXTRA_SPECS extra_specs = XCNEWVEC (struct spec_list, ARRAY_SIZE (extra_specs_1)); for (i = ARRAY_SIZE (extra_specs_1) - 1; i >= 0; i--) @@ -1811,7 +1821,6 @@ sl->ptr_spec = &sl->ptr; next = sl; } -#endif for (i = ARRAY_SIZE (static_specs) - 1; i >= 0; i--) { @@ -7096,6 +7123,12 @@ gcc_exec_prefix = concat (gcc_exec_prefix, spec_machine, dir_separator_str, spec_version, dir_separator_str, NULL); +#ifdef ENABLE_ESP + /* Process ESP_COMMAND_OPTIONS_SPEC, adding any new options to the end + of the command line. */ + do_self_spec (esp_command_options_spec); +#endif + /* Now we have the specs. Set the `valid' bits for switches that match anything in any spec. */