Patch "compiler-gcc: integrate the various compiler-gcc[345].h files" has been added to the 3.14-stable tree
This is a note to let you know that I've just added the patch titled
compiler-gcc: integrate the various compiler-gcc[345].h files
to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
compiler-gcc-integrate-the-various-compiler-gcc.h-files.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
f320793e52aee78f0fbb8bcaf10e6614d2e67bfcMon Sep 17 00:00:00 2001
From: Joe Perches <[email protected]>
Date: Thu, 25 Jun 2015 15:01:02 -0700
Subject: compiler-gcc: integrate the various compiler-gcc[345].h files
From: Joe Perches <[email protected]>
commit f320793e52aee78f0fbb8bcaf10e6614d2e67bfc upstream.
[ Upstream commit cb984d101b30eb7478d32df56a0023e4603cba7f ]
As gcc major version numbers are going to advance rather rapidly in the future, there's no real value in separate files for each compiler version.
Deduplicate some of the macros #defined in each file too.
Neaten comments using normal kernel commenting style.
--- include/linux/compiler-gcc.h | 120 ++++++++++++++++++++++++++++++++++++++++-- include/linux/compiler-gcc3.h | 23 -------- include/linux/compiler-gcc4.h | 88 ------------------------------ include/linux/compiler-gcc5.h | 66 ----------------------- 4 files changed, 116 insertions(+), 181 deletions(-)
include/linux/compiler-gcc.h +116 -4
@@ -100,10 +100,122 @@#define __maybe_unused __attribute__((unused))#define __always_unused __attribute__((unused)) -#define __gcc_header (x) #x -#define _gcc_header (x) __gcc_header(linux/compiler-gcc##x.h) -#define gcc_header (x) _gcc_header(x) -#include gcc_header (__GNUC__) +/* 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)) +#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 &&GCC_VERSION <40600 +# 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 +* like BUG(), printk(), panic() etc. [but let's keep them for now for +* older compilers] +* +* Early snapshots of gcc 4.3 don't support this and we can't detect this +* in the preprocessor, but we can live with this because they're unreleased. +* Maketime probing would be overkill here. +* +* gcc also has a __attribute__((__hot__)) to move hot functions into +* a special section, but I don't see any sense in this right now in +* the kernel context +*/ +#define __cold __attribute__((__cold__)) + +#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 >=40500 +/* +* Mark a position in code as unreachable. This can be used to +* suppress control flow warnings after asm blocks that transfer +* control elsewhere. +* +* Early snapshots of gcc 4.5 don't support this and we can't detect +* this in the preprocessor, but we can live with this because they're +* unreleased. Really, we need to have autoconf for the kernel. +*/ +#define unreachable () __builtin_unreachable() + +/* Mark a function definition as prohibited from being cloned. */ +#define __noclone __attribute__((__noclone__)) + +#endif /* GCC_VERSION >= 40500 */ + +#if GCC_VERSION >=40600 +/* +* Tell the optimizer that something else uses this function or variable. +*/ +#define __visible __attribute__((externally_visible)) +#endif + +/* +* GCC 'asm goto' miscompiles certain code sequences: +* +* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670 +* +* Work it around via a compiler barrier quirk suggested by Jakub Jelinek. +* +* (asm goto is automatically volatile - the naming reflects this.) +*/ +#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0) + +#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP +#if GCC_VERSION >=40400 +#define __HAVE_BUILTIN_BSWAP32__ +#define __HAVE_BUILTIN_BSWAP64__ +#endif +#if GCC_VERSION >=40800 || (defined(__powerpc__) &&GCC_VERSION >=40600 ) +#define __HAVE_BUILTIN_BSWAP16__ +#endif +#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */ + +#if GCC_VERSION >=50000 +#define KASAN_ABI_VERSION 4 +#elif GCC_VERSION >=40902 +#define KASAN_ABI_VERSION 3 +#endif + +#endif /* gcc version >= 40000 specific checks */ #if !defined(__noclone)#define __noclone/* not needed */
include/linux/compiler-gcc3.h deleted +0 -23
@@ -1,23 +0,0 @@ -#ifndef __LINUX_COMPILER_H -#error "Please don't include <linux/compiler-gcc3.h> directly, include <linux/compiler.h> instead." -#endif - -#if GCC_VERSION <30200 -# error Sorry, your compiler is too old - please upgrade it. -#endif - -#if GCC_VERSION >=30300 -# define __used __attribute__((__used__)) -#else -# define __used __attribute__((__unused__)) -#endif - -#if GCC_VERSION >=30400 -#define __must_check __attribute__((warn_unused_result)) -#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 */
include/linux/compiler-gcc4.h deleted +0 -88
88 lines not on this page · raw message
include/linux/compiler-gcc5.h deleted +0 -66
66 lines not on this page · raw message
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/compiler-gcc-integrate-the-various-compiler-gcc.h-files.patch