aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/compiler-gcc.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux/compiler-gcc.h')
-rw-r--r--include/linux/compiler-gcc.h86
1 files changed, 18 insertions, 68 deletions
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index 3e70b7d4e9ed..250b9b7cfd60 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -10,6 +10,10 @@
10 + __GNUC_MINOR__ * 100 \ 10 + __GNUC_MINOR__ * 100 \
11 + __GNUC_PATCHLEVEL__) 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/* Optimization barrier */ 17/* Optimization barrier */
14 18
15/* The "volatile" is due to gcc bugs */ 19/* The "volatile" is due to gcc bugs */
@@ -58,6 +62,12 @@
58#define OPTIMIZER_HIDE_VAR(var) \ 62#define OPTIMIZER_HIDE_VAR(var) \
59 __asm__ ("" : "=r" (var) : "0" (var)) 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#ifdef __CHECKER__ 71#ifdef __CHECKER__
62#define __must_be_array(a) 0 72#define __must_be_array(a) 0
63#else 73#else
@@ -91,7 +101,7 @@
91 * A lot of inline functions can cause havoc with function tracing. 101 * A lot of inline functions can cause havoc with function tracing.
92 */ 102 */
93#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \ 103#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \
94 !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4) 104 !defined(CONFIG_OPTIMIZE_INLINING)
95#define inline \ 105#define inline \
96 inline __attribute__((always_inline, unused)) notrace __gnu_inline 106 inline __attribute__((always_inline, unused)) notrace __gnu_inline
97#else 107#else
@@ -147,47 +157,13 @@
147#define __always_unused __attribute__((unused)) 157#define __always_unused __attribute__((unused))
148#define __mode(x) __attribute__((mode(x))) 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#define __must_check __attribute__((warn_unused_result)) 160#define __must_check __attribute__((warn_unused_result))
170#define __malloc __attribute__((__malloc__)) 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#define __used __attribute__((__used__)) 163#define __used __attribute__((__used__))
183#define __compiler_offsetof(a, b) \ 164#define __compiler_offsetof(a, b) \
184 __builtin_offsetof(a, b) 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/* Mark functions as cold. gcc will assume any path leading to a call 167/* Mark functions as cold. gcc will assume any path leading to a call
192 * to them will be unlikely. This means a lot of manual unlikely()s 168 * to them will be unlikely. This means a lot of manual unlikely()s
193 * are unnecessary now for any paths leading to the usual suspects 169 * are unnecessary now for any paths leading to the usual suspects
@@ -206,24 +182,19 @@
206 182
207#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__) 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#define __optimize(level) __attribute__((__optimize__(level))) 185#define __optimize(level) __attribute__((__optimize__(level)))
217#define __nostackprotector __optimize("no-stack-protector") 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#ifndef __CHECKER__ 190#ifndef __CHECKER__
191#define __compiletime_warning(message) __attribute__((warning(message)))
192#define __compiletime_error(message) __attribute__((error(message)))
193
223#ifdef LATENT_ENTROPY_PLUGIN 194#ifdef LATENT_ENTROPY_PLUGIN
224#define __latent_entropy __attribute__((latent_entropy)) 195#define __latent_entropy __attribute__((latent_entropy))
225#endif 196#endif
226#endif 197#endif /* __CHECKER__ */
227 198
228/* 199/*
229 * calling noreturn functions, __builtin_unreachable() and __builtin_trap() 200 * calling noreturn functions, __builtin_unreachable() and __builtin_trap()
@@ -261,10 +232,6 @@
261#define randomized_struct_fields_end } __randomize_layout; 232#define randomized_struct_fields_end } __randomize_layout;
262#endif 233#endif
263 234
264#endif /* GCC_VERSION >= 40500 */
265
266#if GCC_VERSION >= 40600
267
268/* 235/*
269 * When used with Link Time Optimization, gcc can optimize away C functions or 236 * When used with Link Time Optimization, gcc can optimize away C functions or
270 * variables which are referenced only from assembly code. __visible tells the 237 * variables which are referenced only from assembly code. __visible tells the
@@ -273,8 +240,7 @@
273 */ 240 */
274#define __visible __attribute__((externally_visible)) 241#define __visible __attribute__((externally_visible))
275 242
276#endif /* GCC_VERSION >= 40600 */ 243/* gcc version specific checks */
277
278 244
279#if GCC_VERSION >= 40900 && !defined(__CHECKER__) 245#if GCC_VERSION >= 40900 && !defined(__CHECKER__)
280/* 246/*
@@ -308,10 +274,8 @@
308 * folding in __builtin_bswap*() (yet), so don't set these for it. 274 * folding in __builtin_bswap*() (yet), so don't set these for it.
309 */ 275 */
310#if defined(CONFIG_ARCH_USE_BUILTIN_BSWAP) && !defined(__CHECKER__) 276#if defined(CONFIG_ARCH_USE_BUILTIN_BSWAP) && !defined(__CHECKER__)
311#if GCC_VERSION >= 40400
312#define __HAVE_BUILTIN_BSWAP32__ 277#define __HAVE_BUILTIN_BSWAP32__
313#define __HAVE_BUILTIN_BSWAP64__ 278#define __HAVE_BUILTIN_BSWAP64__
314#endif
315#if GCC_VERSION >= 40800 279#if GCC_VERSION >= 40800
316#define __HAVE_BUILTIN_BSWAP16__ 280#define __HAVE_BUILTIN_BSWAP16__
317#endif 281#endif
@@ -340,10 +304,9 @@
340 * https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html 304 * https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
341 */ 305 */
342#define __designated_init __attribute__((designated_init)) 306#define __designated_init __attribute__((designated_init))
307#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
343#endif 308#endif
344 309
345#endif /* gcc version >= 40000 specific checks */
346
347#if !defined(__noclone) 310#if !defined(__noclone)
348#define __noclone /* not needed */ 311#define __noclone /* not needed */
349#endif 312#endif
@@ -353,16 +316,6 @@
353#endif 316#endif
354 317
355/* 318/*
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/*
366 * Turn individual warnings and errors on and off locally, depending 319 * Turn individual warnings and errors on and off locally, depending
367 * on version. 320 * on version.
368 */ 321 */
@@ -374,12 +327,9 @@
374#define __diag_GCC_warn warning 327#define __diag_GCC_warn warning
375#define __diag_GCC_error error 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#define __diag_str1(s) #s 330#define __diag_str1(s) #s
380#define __diag_str(s) __diag_str1(s) 331#define __diag_str(s) __diag_str1(s)
381#define __diag(s) _Pragma(__diag_str(GCC diagnostic s)) 332#define __diag(s) _Pragma(__diag_str(GCC diagnostic s))
382#endif
383 333
384#if GCC_VERSION >= 80000 334#if GCC_VERSION >= 80000
385#define __diag_GCC_8(s) __diag(s) 335#define __diag_GCC_8(s) __diag(s)