Skip to content

Commit cafa001

Browse files
JoePerchestorvalds
authored andcommitted
Raise the minimum required gcc version to 4.6
Various architectures fail to build properly with older versions of the gcc compiler. An example from Guenter Roeck in thread [1]: > > In file included from ./include/linux/mm.h:17:0, > from ./include/linux/pid_namespace.h:7, > from ./include/linux/ptrace.h:10, > from arch/openrisc/kernel/asm-offsets.c:32: > ./include/linux/mm_types.h:497:16: error: flexible array member in otherwise empty struct > > This is just an example with gcc 4.5.1 for or32. I have seen the problem > with gcc 4.4 (for unicore32) as well. So update the minimum required version of gcc to 4.6. [1] https://lore.kernel.org/lkml/20180814170904.GA12768@roeck-us.net/ Miscellanea: - Update Documentation/process/changes.rst - Remove and consolidate version test blocks in compiler-gcc.h for versions lower than 4.6 Signed-off-by: Joe Perches <joe@perches.com> Reviewed-by: Kees Cook <keescook@chromium.org> Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent cc26ebb commit cafa001

File tree

2 files changed

+19
-69
lines changed

2 files changed

+19
-69
lines changed

Documentation/process/changes.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ you probably needn't concern yourself with isdn4k-utils.
2929
====================== =============== ========================================
3030
Program Minimal version Command to check the version
3131
====================== =============== ========================================
32-
GNU C 3.2 gcc --version
32+
GNU C 4.6 gcc --version
3333
GNU make 3.81 make --version
3434
binutils 2.20 ld -v
3535
flex 2.5.35 flex --version

include/linux/compiler-gcc.h

Lines changed: 18 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@
1010
+ __GNUC_MINOR__ * 100 \
1111
+ __GNUC_PATCHLEVEL__)
1212

13+
#if GCC_VERSION < 40600
14+
# error Sorry, your compiler is too old - please upgrade it.
15+
#endif
16+
1317
/* Optimization barrier */
1418

1519
/* The "volatile" is due to gcc bugs */
@@ -58,6 +62,12 @@
5862
#define OPTIMIZER_HIDE_VAR(var) \
5963
__asm__ ("" : "=r" (var) : "0" (var))
6064

65+
/*
66+
* A trick to suppress uninitialized variable warning without generating any
67+
* code
68+
*/
69+
#define uninitialized_var(x) x = x
70+
6171
#ifdef __CHECKER__
6272
#define __must_be_array(a) 0
6373
#else
@@ -91,7 +101,7 @@
91101
* A lot of inline functions can cause havoc with function tracing.
92102
*/
93103
#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \
94-
!defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4)
104+
!defined(CONFIG_OPTIMIZE_INLINING)
95105
#define inline \
96106
inline __attribute__((always_inline, unused)) notrace __gnu_inline
97107
#else
@@ -147,47 +157,13 @@
147157
#define __always_unused __attribute__((unused))
148158
#define __mode(x) __attribute__((mode(x)))
149159

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
169160
#define __must_check __attribute__((warn_unused_result))
170161
#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
181162

182163
#define __used __attribute__((__used__))
183164
#define __compiler_offsetof(a, b) \
184165
__builtin_offsetof(a, b)
185166

186-
#if GCC_VERSION >= 40100
187-
# define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
188-
#endif
189-
190-
#if GCC_VERSION >= 40300
191167
/* Mark functions as cold. gcc will assume any path leading to a call
192168
* to them will be unlikely. This means a lot of manual unlikely()s
193169
* are unnecessary now for any paths leading to the usual suspects
@@ -206,24 +182,19 @@
206182

207183
#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
208184

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
216185
#define __optimize(level) __attribute__((__optimize__(level)))
217186
#define __nostackprotector __optimize("no-stack-protector")
218-
#endif /* GCC_VERSION >= 40400 */
219187

220-
#if GCC_VERSION >= 40500
188+
#define __compiletime_object_size(obj) __builtin_object_size(obj, 0)
221189

222190
#ifndef __CHECKER__
191+
#define __compiletime_warning(message) __attribute__((warning(message)))
192+
#define __compiletime_error(message) __attribute__((error(message)))
193+
223194
#ifdef LATENT_ENTROPY_PLUGIN
224195
#define __latent_entropy __attribute__((latent_entropy))
225196
#endif
226-
#endif
197+
#endif /* __CHECKER__ */
227198

228199
/*
229200
* calling noreturn functions, __builtin_unreachable() and __builtin_trap()
@@ -261,10 +232,6 @@
261232
#define randomized_struct_fields_end } __randomize_layout;
262233
#endif
263234

264-
#endif /* GCC_VERSION >= 40500 */
265-
266-
#if GCC_VERSION >= 40600
267-
268235
/*
269236
* When used with Link Time Optimization, gcc can optimize away C functions or
270237
* variables which are referenced only from assembly code. __visible tells the
@@ -273,8 +240,7 @@
273240
*/
274241
#define __visible __attribute__((externally_visible))
275242

276-
#endif /* GCC_VERSION >= 40600 */
277-
243+
/* gcc version specific checks */
278244

279245
#if GCC_VERSION >= 40900 && !defined(__CHECKER__)
280246
/*
@@ -308,10 +274,8 @@
308274
* folding in __builtin_bswap*() (yet), so don't set these for it.
309275
*/
310276
#if defined(CONFIG_ARCH_USE_BUILTIN_BSWAP) && !defined(__CHECKER__)
311-
#if GCC_VERSION >= 40400
312277
#define __HAVE_BUILTIN_BSWAP32__
313278
#define __HAVE_BUILTIN_BSWAP64__
314-
#endif
315279
#if GCC_VERSION >= 40800
316280
#define __HAVE_BUILTIN_BSWAP16__
317281
#endif
@@ -340,10 +304,9 @@
340304
* https://gcc.gnu.org/onlinedocs/gcc/Designated-Inits.html
341305
*/
342306
#define __designated_init __attribute__((designated_init))
307+
#define COMPILER_HAS_GENERIC_BUILTIN_OVERFLOW 1
343308
#endif
344309

345-
#endif /* gcc version >= 40000 specific checks */
346-
347310
#if !defined(__noclone)
348311
#define __noclone /* not needed */
349312
#endif
@@ -352,16 +315,6 @@
352315
#define __no_sanitize_address
353316
#endif
354317

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-
365318
/*
366319
* Turn individual warnings and errors on and off locally, depending
367320
* on version.
@@ -374,12 +327,9 @@
374327
#define __diag_GCC_warn warning
375328
#define __diag_GCC_error error
376329

377-
/* Compilers before gcc-4.6 do not understand "#pragma GCC diagnostic push" */
378-
#if GCC_VERSION >= 40600
379330
#define __diag_str1(s) #s
380331
#define __diag_str(s) __diag_str1(s)
381332
#define __diag(s) _Pragma(__diag_str(GCC diagnostic s))
382-
#endif
383333

384334
#if GCC_VERSION >= 80000
385335
#define __diag_GCC_8(s) __diag(s)

0 commit comments

Comments
 (0)