hc
2024-05-10 61598093bbdd283a7edc367d900f223070ead8d2
kernel/include/linux/compiler-gcc.h
....@@ -10,8 +10,9 @@
1010 + __GNUC_MINOR__ * 100 \
1111 + __GNUC_PATCHLEVEL__)
1212
13
-#if GCC_VERSION < 40600
14
-# error Sorry, your compiler is too old - please upgrade it.
13
+/* https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58145 */
14
+#if GCC_VERSION < 40900
15
+# error Sorry, your version of GCC is too old - please use 4.9 or newer.
1516 #elif defined(CONFIG_ARM64) && GCC_VERSION < 50100
1617 /*
1718 * https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63293
....@@ -45,37 +46,17 @@
4546 (typeof(ptr)) (__ptr + (off)); \
4647 })
4748
48
-/*
49
- * A trick to suppress uninitialized variable warning without generating any
50
- * code
51
- */
52
-#define uninitialized_var(x) x = x
53
-
54
-#ifdef __CHECKER__
55
-#define __must_be_array(a) 0
56
-#else
57
-/* &a[0] degrades to a pointer: a different type from an array */
58
-#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
59
-#endif
60
-
6149 #ifdef CONFIG_RETPOLINE
62
-#define __noretpoline __attribute__((indirect_branch("keep")))
50
+#define __noretpoline __attribute__((__indirect_branch__("keep")))
6351 #endif
6452
6553 #define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
6654
67
-#define __optimize(level) __attribute__((__optimize__(level)))
68
-
6955 #define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
7056
71
-#ifndef __CHECKER__
72
-#define __compiletime_warning(message) __attribute__((warning(message)))
73
-#define __compiletime_error(message) __attribute__((error(message)))
74
-
75
-#ifdef LATENT_ENTROPY_PLUGIN
57
+#if defined(LATENT_ENTROPY_PLUGIN) && !defined(__CHECKER__)
7658 #define __latent_entropy __attribute__((latent_entropy))
7759 #endif
78
-#endif /* __CHECKER__ */
7960
8061 /*
8162 * calling noreturn functions, __builtin_unreachable() and __builtin_trap()
....@@ -90,10 +71,6 @@
9071 * Mark a position in code as unreachable. This can be used to
9172 * suppress control flow warnings after asm blocks that transfer
9273 * control elsewhere.
93
- *
94
- * Early snapshots of gcc 4.5 don't support this and we can't detect
95
- * this in the preprocessor, but we can live with this because they're
96
- * unreleased. Really, we need to have autoconf for the kernel.
9774 */
9875 #define unreachable() \
9976 do { \
....@@ -102,41 +79,12 @@
10279 __builtin_unreachable(); \
10380 } while (0)
10481
105
-/* Mark a function definition as prohibited from being cloned. */
106
-#define __noclone __attribute__((__noclone__, __optimize__("no-tracer")))
107
-
10882 #if defined(RANDSTRUCT_PLUGIN) && !defined(__CHECKER__)
10983 #define __randomize_layout __attribute__((randomize_layout))
11084 #define __no_randomize_layout __attribute__((no_randomize_layout))
11185 /* This anon struct can add padding, so only enable it under randstruct. */
11286 #define randomized_struct_fields_start struct {
11387 #define randomized_struct_fields_end } __randomize_layout;
114
-#endif
115
-
116
-/*
117
- * When used with Link Time Optimization, gcc can optimize away C functions or
118
- * variables which are referenced only from assembly code. __visible tells the
119
- * optimizer that something else uses this function or variable, thus preventing
120
- * this.
121
- */
122
-#define __visible __attribute__((externally_visible))
123
-
124
-/* gcc version specific checks */
125
-
126
-#if GCC_VERSION >= 40900 && !defined(__CHECKER__)
127
-/*
128
- * __assume_aligned(n, k): Tell the optimizer that the returned
129
- * pointer can be assumed to be k modulo n. The second argument is
130
- * optional (default 0), so we use a variadic macro to make the
131
- * shorthand.
132
- *
133
- * Beware: Do not apply this to functions which may return
134
- * ERR_PTRs. Also, it is probably unwise to apply it to functions
135
- * returning extra information in the low bits (but in that case the
136
- * compiler should see some alignment anyway, when the return value is
137
- * massaged by 'flags = ptr & 3; ptr &= ~3;').
138
- */
139
-#define __assume_aligned(a, ...) __attribute__((__assume_aligned__(a, ## __VA_ARGS__)))
14088 #endif
14189
14290 /*
....@@ -157,9 +105,7 @@
157105 #if defined(CONFIG_ARCH_USE_BUILTIN_BSWAP) && !defined(__CHECKER__)
158106 #define __HAVE_BUILTIN_BSWAP32__
159107 #define __HAVE_BUILTIN_BSWAP64__
160
-#if GCC_VERSION >= 40800
161108 #define __HAVE_BUILTIN_BSWAP16__
162
-#endif
163109 #endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP && !__CHECKER__ */
164110
165111 #if GCC_VERSION >= 70000
....@@ -170,40 +116,32 @@
170116 #define KASAN_ABI_VERSION 3
171117 #endif
172118
173
-/*
174
- * Older GCCs (< 5) don't support __has_attribute, so instead of checking
175
- * __has_attribute(__no_sanitize_address__) do a GCC version check.
176
- */
177
-#ifndef __has_attribute
178
-# define __has_attribute(x) __GCC4_has_attribute_##x
179
-# define __GCC4_has_attribute___no_sanitize_address__ (__GNUC_MINOR__ >= 8)
180
-#endif
181
-
182119 #if __has_attribute(__no_sanitize_address__)
183120 #define __no_sanitize_address __attribute__((no_sanitize_address))
184121 #else
185122 #define __no_sanitize_address
186123 #endif
187124
125
+#if defined(__SANITIZE_THREAD__) && __has_attribute(__no_sanitize_thread__)
126
+#define __no_sanitize_thread __attribute__((no_sanitize_thread))
127
+#else
128
+#define __no_sanitize_thread
129
+#endif
130
+
131
+#if __has_attribute(__no_sanitize_undefined__)
132
+#define __no_sanitize_undefined __attribute__((no_sanitize_undefined))
133
+#else
134
+#define __no_sanitize_undefined
135
+#endif
136
+
137
+#if defined(CONFIG_KCOV) && __has_attribute(__no_sanitize_coverage__)
138
+#define __no_sanitize_coverage __attribute__((no_sanitize_coverage))
139
+#else
140
+#define __no_sanitize_coverage
141
+#endif
142
+
188143 #if GCC_VERSION >= 50100
189
-/*
190
- * Mark structures as requiring designated initializers.
191
- * https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
192
- */
193
-#define __designated_init __attribute__((designated_init))
194144 #define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
195
-#endif
196
-
197
-#if GCC_VERSION >= 90100
198
-#define __copy(symbol) __attribute__((__copy__(symbol)))
199
-#endif
200
-
201
-#if !defined(__noclone)
202
-#define __noclone /* not needed */
203
-#endif
204
-
205
-#if !defined(__no_sanitize_address)
206
-#define __no_sanitize_address
207145 #endif
208146
209147 /*