forked from mirrors/linux
		
	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>
This commit is contained in:
		
							parent
							
								
									cc26ebbebd
								
							
						
					
					
						commit
						cafa0010cd
					
				
					 2 changed files with 19 additions and 69 deletions
				
			
		|  | @ -29,7 +29,7 @@ you probably needn't concern yourself with isdn4k-utils. | |||
| ====================== ===============  ======================================== | ||||
|         Program        Minimal version       Command to check the version | ||||
| ====================== ===============  ======================================== | ||||
| GNU C                  3.2              gcc --version | ||||
| GNU C                  4.6              gcc --version | ||||
| GNU make               3.81             make --version | ||||
| binutils               2.20             ld -v | ||||
| flex                   2.5.35           flex --version | ||||
|  |  | |||
|  | @ -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__) | ||||
| 
 | ||||
| #define __optimize(level)	__attribute__((__optimize__(level))) | ||||
| #define __nostackprotector	__optimize("no-stack-protector") | ||||
| 
 | ||||
| #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))) | ||||
| #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 | ||||
| 
 | ||||
| #ifndef __CHECKER__ | ||||
| #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) | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Joe Perches
						Joe Perches