aboutsummaryrefslogtreecommitdiff
blob: c5e064588f3cc0cebead470e7b47f8fcd2897a2c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
2010-05-26	Magnus Granberg		<zorry@gentoo.org>

		* 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		<doko@ubuntu.com>, Kees Cook	<kees@outflux.net>

		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	2009-04-29 01:17:00.000000000 +0200
+++ gcc/gcc.c		2009-07-22 20:18:10.000000000 +0200
@@ -83,6 +83,7 @@
 #include "gcc.h"
 #include "flags.h"
 #include "opts.h"
+#include "esp.h" /* for --enable-esp support */
 
 /* By default there is no special suffix for target executables.  */
 /* FIXME: when autoconf is fixed, remove the host check - dj */
@@ -758,7 +759,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;
@@ -817,7 +817,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.  */
@@ -999,15 +1000,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) %(espf_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}\
@@ -1030,7 +1031,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},
@@ -1619,18 +1620,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.  */
 
@@ -1715,7 +1721,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--)
@@ -1728,7 +1733,6 @@
       sl->ptr_spec = &sl->ptr;
       next = sl;
     }
-#endif
 
   for (i = ARRAY_SIZE (static_specs) - 1; i >= 0; i--)
     {
@@ -6521,6 +6543,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.  */