|
@@ -10,6 +10,10 @@
|
|
|
+ __GNUC_MINOR__ * 100 \
|
|
|
+ __GNUC_PATCHLEVEL__)
|
|
|
|
|
|
+#if GCC_VERSION < 40600
|
|
|
+# error Sorry, your compiler is too old - please upgrade it.
|
|
|
+#endif
|
|
|
+
|
|
|
/* Optimization barrier */
|
|
|
|
|
|
/* The "volatile" is due to gcc bugs */
|
|
@@ -58,6 +62,12 @@
|
|
|
#define OPTIMIZER_HIDE_VAR(var) \
|
|
|
__asm__ ("" : "=r" (var) : "0" (var))
|
|
|
|
|
|
+/*
|
|
|
+ * A trick to suppress uninitialized variable warning without generating any
|
|
|
+ * code
|
|
|
+ */
|
|
|
+#define uninitialized_var(x) x = x
|
|
|
+
|
|
|
#ifdef __CHECKER__
|
|
|
#define __must_be_array(a) 0
|
|
|
#else
|
|
@@ -91,7 +101,7 @@
|
|
|
* A lot of inline functions can cause havoc with function tracing.
|
|
|
*/
|
|
|
#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \
|
|
|
- !defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4)
|
|
|
+ !defined(CONFIG_OPTIMIZE_INLINING)
|
|
|
#define inline \
|
|
|
inline __attribute__((always_inline, unused)) notrace __gnu_inline
|
|
|
#else
|
|
@@ -147,47 +157,13 @@
|
|
|
#define __always_unused __attribute__((unused))
|
|
|
#define __mode(x) __attribute__((mode(x)))
|
|
|
|
|
|
-/* gcc version specific checks */
|
|
|
-
|
|
|
-#if GCC_VERSION < 30200
|
|
|
-# error Sorry, your compiler is too old - please upgrade it.
|
|
|
-#endif
|
|
|
-
|
|
|
-#if GCC_VERSION < 30300
|
|
|
-# define __used __attribute__((__unused__))
|
|
|
-#else
|
|
|
-# define __used __attribute__((__used__))
|
|
|
-#endif
|
|
|
-
|
|
|
-#ifdef CONFIG_GCOV_KERNEL
|
|
|
-# if GCC_VERSION < 30400
|
|
|
-# error "GCOV profiling support for gcc versions below 3.4 not included"
|
|
|
-# endif /* __GNUC_MINOR__ */
|
|
|
-#endif /* CONFIG_GCOV_KERNEL */
|
|
|
-
|
|
|
-#if GCC_VERSION >= 30400
|
|
|
#define __must_check __attribute__((warn_unused_result))
|
|
|
#define __malloc __attribute__((__malloc__))
|
|
|
-#endif
|
|
|
-
|
|
|
-#if GCC_VERSION >= 40000
|
|
|
-
|
|
|
-/* GCC 4.1.[01] miscompiles __weak */
|
|
|
-#ifdef __KERNEL__
|
|
|
-# if GCC_VERSION >= 40100 && GCC_VERSION <= 40101
|
|
|
-# error Your version of gcc miscompiles the __weak directive
|
|
|
-# endif
|
|
|
-#endif
|
|
|
|
|
|
#define __used __attribute__((__used__))
|
|
|
#define __compiler_offsetof(a, b) \
|
|
|
__builtin_offsetof(a, b)
|
|
|
|
|
|
-#if GCC_VERSION >= 40100
|
|
|
-# define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
|
|
|
-#endif
|
|
|
-
|
|
|
-#if GCC_VERSION >= 40300
|
|
|
/* Mark functions as cold. gcc will assume any path leading to a call
|
|
|
* to them will be unlikely. This means a lot of manual unlikely()s
|
|
|
* are unnecessary now for any paths leading to the usual suspects
|
|
@@ -206,24 +182,19 @@
|
|
|
|
|
|
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
|
|
|
|
|
|
-#ifndef __CHECKER__
|
|
|
-# define __compiletime_warning(message) __attribute__((warning(message)))
|
|
|
-# define __compiletime_error(message) __attribute__((error(message)))
|
|
|
-#endif /* __CHECKER__ */
|
|
|
-#endif /* GCC_VERSION >= 40300 */
|
|
|
-
|
|
|
-#if GCC_VERSION >= 40400
|
|
|
#define __optimize(level) __attribute__((__optimize__(level)))
|
|
|
#define __nostackprotector __optimize("no-stack-protector")
|
|
|
-#endif /* GCC_VERSION >= 40400 */
|
|
|
|
|
|
-#if GCC_VERSION >= 40500
|
|
|
+#define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
|
|
|
|
|
|
#ifndef __CHECKER__
|
|
|
+#define __compiletime_warning(message) __attribute__((warning(message)))
|
|
|
+#define __compiletime_error(message) __attribute__((error(message)))
|
|
|
+
|
|
|
#ifdef LATENT_ENTROPY_PLUGIN
|
|
|
#define __latent_entropy __attribute__((latent_entropy))
|
|
|
#endif
|
|
|
-#endif
|
|
|
+#endif /* __CHECKER__ */
|
|
|
|
|
|
/*
|
|
|
* calling noreturn functions, __builtin_unreachable() and __builtin_trap()
|
|
@@ -261,10 +232,6 @@
|
|
|
#define randomized_struct_fields_end } __randomize_layout;
|
|
|
#endif
|
|
|
|
|
|
-#endif /* GCC_VERSION >= 40500 */
|
|
|
-
|
|
|
-#if GCC_VERSION >= 40600
|
|
|
-
|
|
|
/*
|
|
|
* When used with Link Time Optimization, gcc can optimize away C functions or
|
|
|
* variables which are referenced only from assembly code. __visible tells the
|
|
@@ -273,8 +240,7 @@
|
|
|
*/
|
|
|
#define __visible __attribute__((externally_visible))
|
|
|
|
|
|
-#endif /* GCC_VERSION >= 40600 */
|
|
|
-
|
|
|
+/* gcc version specific checks */
|
|
|
|
|
|
#if GCC_VERSION >= 40900 && !defined(__CHECKER__)
|
|
|
/*
|
|
@@ -308,10 +274,8 @@
|
|
|
* folding in __builtin_bswap*() (yet), so don't set these for it.
|
|
|
*/
|
|
|
#if defined(CONFIG_ARCH_USE_BUILTIN_BSWAP) && !defined(__CHECKER__)
|
|
|
-#if GCC_VERSION >= 40400
|
|
|
#define __HAVE_BUILTIN_BSWAP32__
|
|
|
#define __HAVE_BUILTIN_BSWAP64__
|
|
|
-#endif
|
|
|
#if GCC_VERSION >= 40800
|
|
|
#define __HAVE_BUILTIN_BSWAP16__
|
|
|
#endif
|
|
@@ -340,10 +304,9 @@
|
|
|
* https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
|
|
|
*/
|
|
|
#define __designated_init __attribute__((designated_init))
|
|
|
+#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
|
|
|
#endif
|
|
|
|
|
|
-#endif /* gcc version >= 40000 specific checks */
|
|
|
-
|
|
|
#if !defined(__noclone)
|
|
|
#define __noclone /* not needed */
|
|
|
#endif
|
|
@@ -352,16 +315,6 @@
|
|
|
#define __no_sanitize_address
|
|
|
#endif
|
|
|
|
|
|
-/*
|
|
|
- * A trick to suppress uninitialized variable warning without generating any
|
|
|
- * code
|
|
|
- */
|
|
|
-#define uninitialized_var(x) x = x
|
|
|
-
|
|
|
-#if GCC_VERSION >= 50100
|
|
|
-#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
|
|
|
-#endif
|
|
|
-
|
|
|
/*
|
|
|
* Turn individual warnings and errors on and off locally, depending
|
|
|
* on version.
|
|
@@ -374,12 +327,9 @@
|
|
|
#define __diag_GCC_warn warning
|
|
|
#define __diag_GCC_error error
|
|
|
|
|
|
-/* Compilers before gcc-4.6 do not understand "#pragma GCC diagnostic push" */
|
|
|
-#if GCC_VERSION >= 40600
|
|
|
#define __diag_str1(s) #s
|
|
|
#define __diag_str(s) __diag_str1(s)
|
|
|
#define __diag(s) _Pragma(__diag_str(GCC diagnostic s))
|
|
|
-#endif
|
|
|
|
|
|
#if GCC_VERSION >= 80000
|
|
|
#define __diag_GCC_8(s) __diag(s)
|