|
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