|
10 | 10 | + __GNUC_MINOR__ * 100 \ |
11 | 11 | + __GNUC_PATCHLEVEL__) |
12 | 12 |
|
| 13 | +#if GCC_VERSION < 40600 |
| 14 | +# error Sorry, your compiler is too old - please upgrade it. |
| 15 | +#endif |
| 16 | + |
13 | 17 | /* Optimization barrier */ |
14 | 18 |
|
15 | 19 | /* The "volatile" is due to gcc bugs */ |
|
58 | 62 | #define OPTIMIZER_HIDE_VAR(var) \ |
59 | 63 | __asm__ ("" : "=r" (var) : "0" (var)) |
60 | 64 |
|
| 65 | +/* |
| 66 | + * A trick to suppress uninitialized variable warning without generating any |
| 67 | + * code |
| 68 | + */ |
| 69 | +#define uninitialized_var(x) x = x |
| 70 | + |
61 | 71 | #ifdef __CHECKER__ |
62 | 72 | #define __must_be_array(a) 0 |
63 | 73 | #else |
|
91 | 101 | * A lot of inline functions can cause havoc with function tracing. |
92 | 102 | */ |
93 | 103 | #if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \ |
94 | | - !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4) |
| 104 | + !defined(CONFIG_OPTIMIZE_INLINING) |
95 | 105 | #define inline \ |
96 | 106 | inline __attribute__((always_inline, unused)) notrace __gnu_inline |
97 | 107 | #else |
|
147 | 157 | #define __always_unused __attribute__((unused)) |
148 | 158 | #define __mode(x) __attribute__((mode(x))) |
149 | 159 |
|
150 | | -/* gcc version specific checks */ |
151 | | - |
152 | | -#if GCC_VERSION < 30200 |
153 | | -# error Sorry, your compiler is too old - please upgrade it. |
154 | | -#endif |
155 | | - |
156 | | -#if GCC_VERSION < 30300 |
157 | | -# define __used __attribute__((__unused__)) |
158 | | -#else |
159 | | -# define __used __attribute__((__used__)) |
160 | | -#endif |
161 | | - |
162 | | -#ifdef CONFIG_GCOV_KERNEL |
163 | | -# if GCC_VERSION < 30400 |
164 | | -# error "GCOV profiling support for gcc versions below 3.4 not included" |
165 | | -# endif /* __GNUC_MINOR__ */ |
166 | | -#endif /* CONFIG_GCOV_KERNEL */ |
167 | | - |
168 | | -#if GCC_VERSION >= 30400 |
169 | 160 | #define __must_check __attribute__((warn_unused_result)) |
170 | 161 | #define __malloc __attribute__((__malloc__)) |
171 | | -#endif |
172 | | - |
173 | | -#if GCC_VERSION >= 40000 |
174 | | - |
175 | | -/* GCC 4.1.[01] miscompiles __weak */ |
176 | | -#ifdef __KERNEL__ |
177 | | -# if GCC_VERSION >= 40100 && GCC_VERSION <= 40101 |
178 | | -# error Your version of gcc miscompiles the __weak directive |
179 | | -# endif |
180 | | -#endif |
181 | 162 |
|
182 | 163 | #define __used __attribute__((__used__)) |
183 | 164 | #define __compiler_offsetof(a, b) \ |
184 | 165 | __builtin_offsetof(a, b) |
185 | 166 |
|
186 | | -#if GCC_VERSION >= 40100 |
187 | | -# define __compiletime_object_size(obj) __builtin_object_size(obj, 0) |
188 | | -#endif |
189 | | - |
190 | | -#if GCC_VERSION >= 40300 |
191 | 167 | /* Mark functions as cold. gcc will assume any path leading to a call |
192 | 168 | * to them will be unlikely. This means a lot of manual unlikely()s |
193 | 169 | * are unnecessary now for any paths leading to the usual suspects |
|
206 | 182 |
|
207 | 183 | #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) |
208 | 184 |
|
209 | | -#ifndef __CHECKER__ |
210 | | -# define __compiletime_warning(message) __attribute__((warning(message))) |
211 | | -# define __compiletime_error(message) __attribute__((error(message))) |
212 | | -#endif /* __CHECKER__ */ |
213 | | -#endif /* GCC_VERSION >= 40300 */ |
214 | | - |
215 | | -#if GCC_VERSION >= 40400 |
216 | 185 | #define __optimize(level) __attribute__((__optimize__(level))) |
217 | 186 | #define __nostackprotector __optimize("no-stack-protector") |
218 | | -#endif /* GCC_VERSION >= 40400 */ |
219 | 187 |
|
220 | | -#if GCC_VERSION >= 40500 |
| 188 | +#define __compiletime_object_size(obj) __builtin_object_size(obj, 0) |
221 | 189 |
|
222 | 190 | #ifndef __CHECKER__ |
| 191 | +#define __compiletime_warning(message) __attribute__((warning(message))) |
| 192 | +#define __compiletime_error(message) __attribute__((error(message))) |
| 193 | + |
223 | 194 | #ifdef LATENT_ENTROPY_PLUGIN |
224 | 195 | #define __latent_entropy __attribute__((latent_entropy)) |
225 | 196 | #endif |
226 | | -#endif |
| 197 | +#endif /* __CHECKER__ */ |
227 | 198 |
|
228 | 199 | /* |
229 | 200 | * calling noreturn functions, __builtin_unreachable() and __builtin_trap() |
|
261 | 232 | #define randomized_struct_fields_end } __randomize_layout; |
262 | 233 | #endif |
263 | 234 |
|
264 | | -#endif /* GCC_VERSION >= 40500 */ |
265 | | - |
266 | | -#if GCC_VERSION >= 40600 |
267 | | - |
268 | 235 | /* |
269 | 236 | * When used with Link Time Optimization, gcc can optimize away C functions or |
270 | 237 | * variables which are referenced only from assembly code. __visible tells the |
|
273 | 240 | */ |
274 | 241 | #define __visible __attribute__((externally_visible)) |
275 | 242 |
|
276 | | -#endif /* GCC_VERSION >= 40600 */ |
277 | | - |
| 243 | +/* gcc version specific checks */ |
278 | 244 |
|
279 | 245 | #if GCC_VERSION >= 40900 && !defined(__CHECKER__) |
280 | 246 | /* |
|
308 | 274 | * folding in __builtin_bswap*() (yet), so don't set these for it. |
309 | 275 | */ |
310 | 276 | #if defined(CONFIG_ARCH_USE_BUILTIN_BSWAP) && !defined(__CHECKER__) |
311 | | -#if GCC_VERSION >= 40400 |
312 | 277 | #define __HAVE_BUILTIN_BSWAP32__ |
313 | 278 | #define __HAVE_BUILTIN_BSWAP64__ |
314 | | -#endif |
315 | 279 | #if GCC_VERSION >= 40800 |
316 | 280 | #define __HAVE_BUILTIN_BSWAP16__ |
317 | 281 | #endif |
|
340 | 304 | * https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html |
341 | 305 | */ |
342 | 306 | #define __designated_init __attribute__((designated_init)) |
| 307 | +#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1 |
343 | 308 | #endif |
344 | 309 |
|
345 | | -#endif /* gcc version >= 40000 specific checks */ |
346 | | - |
347 | 310 | #if !defined(__noclone) |
348 | 311 | #define __noclone /* not needed */ |
349 | 312 | #endif |
|
352 | 315 | #define __no_sanitize_address |
353 | 316 | #endif |
354 | 317 |
|
355 | | -/* |
356 | | - * A trick to suppress uninitialized variable warning without generating any |
357 | | - * code |
358 | | - */ |
359 | | -#define uninitialized_var(x) x = x |
360 | | - |
361 | | -#if GCC_VERSION >= 50100 |
362 | | -#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1 |
363 | | -#endif |
364 | | - |
365 | 318 | /* |
366 | 319 | * Turn individual warnings and errors on and off locally, depending |
367 | 320 | * on version. |
|
374 | 327 | #define __diag_GCC_warn warning |
375 | 328 | #define __diag_GCC_error error |
376 | 329 |
|
377 | | -/* Compilers before gcc-4.6 do not understand "#pragma GCC diagnostic push" */ |
378 | | -#if GCC_VERSION >= 40600 |
379 | 330 | #define __diag_str1(s) #s |
380 | 331 | #define __diag_str(s) __diag_str1(s) |
381 | 332 | #define __diag(s) _Pragma(__diag_str(GCC diagnostic s)) |
382 | | -#endif |
383 | 333 |
|
384 | 334 | #if GCC_VERSION >= 80000 |
385 | 335 | #define __diag_GCC_8(s) __diag(s) |
|
0 commit comments