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__)
 | 
			
		||||
 | 
			
		||||
#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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue