Root/toolchain/gcc/patches/4.3.5/910-mbsd_multi.patch

1
2    This patch brings over a few features from MirBSD:
3    * -fhonour-copts
4      If this option is not given, it's warned (depending
5      on environment variables). This is to catch errors
6      of misbuilt packages which override CFLAGS themselves.
7    * -Werror-maybe-reset
8      Has the effect of -Wno-error if GCC_NO_WERROR is
9      set and not '0', a no-operation otherwise. This is
10      to be able to use -Werror in "make" but prevent
11      GNU autoconf generated configure scripts from
12      freaking out.
13    * Make -fno-strict-aliasing and -fno-delete-null-pointer-checks
14      the default for -O2/-Os, because they trigger gcc bugs
15      and can delete code with security implications.
16
17    This patch was authored by Thorsten Glaser <tg at mirbsd.de>
18    with copyright assignment to the FSF in effect.
19
20--- a/gcc/c-opts.c
21+++ b/gcc/c-opts.c
22@@ -108,6 +108,9 @@ static size_t deferred_count;
23 /* Number of deferred options scanned for -include. */
24 static size_t include_cursor;
25 
26+/* Check if a port honours COPTS. */
27+static int honour_copts = 0;
28+
29 static void set_Wimplicit (int);
30 static void handle_OPT_d (const char *);
31 static void set_std_cxx98 (int);
32@@ -462,6 +465,14 @@ c_common_handle_option (size_t scode, co
33       enable_warning_as_error ("implicit-function-declaration", value, CL_C | CL_ObjC);
34       break;
35 
36+ case OPT_Werror_maybe_reset:
37+ {
38+ char *ev = getenv ("GCC_NO_WERROR");
39+ if ((ev != NULL) && (*ev != '0'))
40+ cpp_opts->warnings_are_errors = 0;
41+ }
42+ break;
43+
44     case OPT_Wformat:
45       set_Wformat (value);
46       break;
47@@ -708,6 +719,12 @@ c_common_handle_option (size_t scode, co
48       flag_exceptions = value;
49       break;
50 
51+ case OPT_fhonour_copts:
52+ if (c_language == clk_c) {
53+ honour_copts++;
54+ }
55+ break;
56+
57     case OPT_fimplement_inlines:
58       flag_implement_inlines = value;
59       break;
60@@ -1248,6 +1265,47 @@ c_common_init (void)
61   /* Has to wait until now so that cpplib has its hash table. */
62   init_pragma ();
63 
64+ if (c_language == clk_c) {
65+ char *ev = getenv ("GCC_HONOUR_COPTS");
66+ int evv;
67+ if (ev == NULL)
68+ evv = -1;
69+ else if ((*ev == '0') || (*ev == '\0'))
70+ evv = 0;
71+ else if (*ev == '1')
72+ evv = 1;
73+ else if (*ev == '2')
74+ evv = 2;
75+ else if (*ev == 's')
76+ evv = -1;
77+ else {
78+ warning (0, "unknown GCC_HONOUR_COPTS value, assuming 1");
79+ evv = 1; /* maybe depend this on something like MIRBSD_NATIVE? */
80+ }
81+ if (evv == 1) {
82+ if (honour_copts == 0) {
83+ error ("someone does not honour COPTS at all in lenient mode");
84+ return false;
85+ } else if (honour_copts != 1) {
86+ warning (0, "someone does not honour COPTS correctly, passed %d times",
87+ honour_copts);
88+ }
89+ } else if (evv == 2) {
90+ if (honour_copts == 0) {
91+ error ("someone does not honour COPTS at all in strict mode");
92+ return false;
93+ } else if (honour_copts != 1) {
94+ error ("someone does not honour COPTS correctly, passed %d times",
95+ honour_copts);
96+ return false;
97+ }
98+ } else if (evv == 0) {
99+ if (honour_copts != 1)
100+ inform ("someone does not honour COPTS correctly, passed %d times",
101+ honour_copts);
102+ }
103+ }
104+
105   return true;
106 }
107 
108--- a/gcc/c.opt
109+++ b/gcc/c.opt
110@@ -207,6 +207,10 @@ Werror-implicit-function-declaration
111 C ObjC RejectNegative Warning
112 This switch is deprecated; use -Werror=implicit-function-declaration instead
113 
114+Werror-maybe-reset
115+C ObjC C++ ObjC++
116+; Documented in common.opt
117+
118 Wfloat-equal
119 C ObjC C++ ObjC++ Var(warn_float_equal) Warning
120 Warn if testing floating point numbers for equality
121@@ -590,6 +594,9 @@ C++ ObjC++ Optimization
122 fhonor-std
123 C++ ObjC++
124 
125+fhonour-copts
126+C ObjC C++ ObjC++ RejectNegative
127+
128 fhosted
129 C ObjC
130 Assume normal C execution environment
131--- a/gcc/common.opt
132+++ b/gcc/common.opt
133@@ -102,6 +102,10 @@ Werror=
134 Common Joined
135 Treat specified warning as error
136 
137+Werror-maybe-reset
138+Common
139+If environment variable GCC_NO_WERROR is set, act as -Wno-error
140+
141 Wextra
142 Common Warning
143 Print extra (possibly unwanted) warnings
144@@ -528,6 +532,9 @@ fguess-branch-probability
145 Common Report Var(flag_guess_branch_prob) Optimization
146 Enable guessing of branch probabilities
147 
148+fhonour-copts
149+Common RejectNegative
150+
151 ; Nonzero means ignore `#ident' directives. 0 means handle them.
152 ; Generate position-independent code for executables if possible
153 ; On SVR4 targets, it also controls whether or not to emit a
154--- a/gcc/opts.c
155+++ b/gcc/opts.c
156@@ -830,9 +830,6 @@ decode_options (unsigned int argc, const
157       flag_schedule_insns_after_reload = 1;
158 #endif
159       flag_regmove = 1;
160- flag_strict_aliasing = 1;
161- flag_strict_overflow = 1;
162- flag_delete_null_pointer_checks = 1;
163       flag_reorder_blocks = 1;
164       flag_reorder_functions = 1;
165       flag_tree_store_ccp = 1;
166@@ -853,6 +850,10 @@ decode_options (unsigned int argc, const
167 
168   if (optimize >= 3)
169     {
170+ flag_strict_aliasing = 1;
171+ flag_strict_overflow = 1;
172+ flag_delete_null_pointer_checks = 1;
173+
174       flag_predictive_commoning = 1;
175       flag_inline_functions = 1;
176       flag_unswitch_loops = 1;
177@@ -1444,6 +1445,17 @@ common_handle_option (size_t scode, cons
178       enable_warning_as_error (arg, value, lang_mask);
179       break;
180 
181+ case OPT_Werror_maybe_reset:
182+ {
183+ char *ev = getenv ("GCC_NO_WERROR");
184+ if ((ev != NULL) && (*ev != '0'))
185+ warnings_are_errors = 0;
186+ }
187+ break;
188+
189+ case OPT_fhonour_copts:
190+ break;
191+
192     case OPT_Wextra:
193       set_Wextra (value);
194       break;
195--- a/gcc/doc/cppopts.texi
196+++ b/gcc/doc/cppopts.texi
197@@ -168,6 +168,11 @@ in older programs. This warning is on b
198 Make all warnings into hard errors. Source code which triggers warnings
199 will be rejected.
200 
201+ at item -Werror-maybe-reset
202+ at opindex Werror-maybe-reset
203+Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment
204+variable is set to anything other than 0 or empty.
205+
206 @item -Wsystem-headers
207 @opindex Wsystem-headers
208 Issue warnings for code in system headers. These are normally unhelpful
209--- a/gcc/doc/invoke.texi
210+++ b/gcc/doc/invoke.texi
211@@ -233,7 +233,7 @@ Objective-C and Objective-C++ Dialects}.
212 -Wconversion -Wcoverage-mismatch -Wno-deprecated-declarations @gol
213 -Wdisabled-optimization -Wno-div-by-zero @gol
214 -Wempty-body -Wno-endif-labels @gol
215--Werror -Werror=* @gol
216+-Werror -Werror=* -Werror-maybe-reset @gol
217 -Wfatal-errors -Wfloat-equal -Wformat -Wformat=2 @gol
218 -Wno-format-extra-args -Wformat-nonliteral @gol
219 -Wformat-security -Wformat-y2k -Wignored-qualifiers @gol
220@@ -4031,6 +4031,22 @@ This option is only supported for C and
221 @option{-Wall} and by @option{-pedantic}, which can be disabled with
222 @option{-Wno-pointer-sign}.
223 
224+ at item -Werror-maybe-reset
225+ at opindex Werror-maybe-reset
226+Act like @samp{-Wno-error} if the @env{GCC_NO_WERROR} environment
227+variable is set to anything other than 0 or empty.
228+
229+ at item -fhonour-copts
230+ at opindex fhonour-copts
231+If @env{GCC_HONOUR_COPTS} is set to 1, abort if this option is not
232+given at least once, and warn if it is given more than once.
233+If @env{GCC_HONOUR_COPTS} is set to 2, abort if this option is not
234+given exactly once.
235+If @env{GCC_HONOUR_COPTS} is set to 0 or unset, warn if this option
236+is not given exactly once.
237+The warning is quelled if @env{GCC_HONOUR_COPTS} is set to @samp{s}.
238+This flag and environment variable only affect the C language.
239+
240 @item -Wstack-protector
241 @opindex Wstack-protector
242 @opindex Wno-stack-protector
243@@ -5493,7 +5509,7 @@ so, the first branch is redirected to ei
244 second branch or a point immediately following it, depending on whether
245 the condition is known to be true or false.
246 
247-Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
248+Enabled at levels @option{-O3}.
249 
250 @item -fsplit-wide-types
251 @opindex fsplit-wide-types
252@@ -5638,7 +5654,7 @@ safely dereference null pointers. Use
253 @option{-fno-delete-null-pointer-checks} to disable this optimization
254 for programs which depend on that behavior.
255 
256-Enabled at levels @option{-O2}, @option{-O3}, @option{-Os}.
257+Enabled at levels @option{-O3}.
258 
259 @item -fexpensive-optimizations
260 @opindex fexpensive-optimizations
261--- a/gcc/java/jvspec.c
262+++ b/gcc/java/jvspec.c
263@@ -670,6 +670,7 @@ lang_specific_pre_link (void)
264      class name. Append dummy `.c' that can be stripped by set_input so %b
265      is correct. */
266   set_input (concat (main_class_name, "main.c", NULL));
267+ putenv ("GCC_HONOUR_COPTS=s"); /* XXX hack! */
268   err = do_spec (jvgenmain_spec);
269   if (err == 0)
270     {
271

Archive Download this file



interactive