123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- From 21be6b635320321216dde9201fa57a3aed60ee12 Mon Sep 17 00:00:00 2001
- From: Joe Perches <joe@perches.com>
- Date: Thu, 25 Jun 2015 15:01:02 -0700
- Subject: [PATCH] compiler-gcc: integrate the various compiler-gcc[345].h files
- 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.
- Signed-off-by: Joe Perches <joe@perches.com>
- Cc: Andi Kleen <andi@firstfloor.org>
- Cc: Michal Marek <mmarek@suse.cz>
- Cc: Segher Boessenkool <segher@kernel.crashing.org>
- Cc: Sasha Levin <levinsasha928@gmail.com>
- Cc: Anton Blanchard <anton@samba.org>
- Cc: Alan Modra <amodra@gmail.com>
- Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
- Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
- (cherry picked from commit cb984d101b30eb7478d32df56a0023e4603cba7f)
- Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
- ---
- 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(-)
- delete mode 100644 include/linux/compiler-gcc3.h
- delete mode 100644 include/linux/compiler-gcc4.h
- delete mode 100644 include/linux/compiler-gcc5.h
- diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
- index 24545cd90a25..0c5d746850c2 100644
- --- a/include/linux/compiler-gcc.h
- +++ b/include/linux/compiler-gcc.h
- @@ -97,10 +97,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 */
- diff --git a/include/linux/compiler-gcc3.h b/include/linux/compiler-gcc3.h
- deleted file mode 100644
- index 7d89febe4d79..000000000000
- --- a/include/linux/compiler-gcc3.h
- +++ /dev/null
- @@ -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 */
- diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h
- deleted file mode 100644
- index 2507fd2a1eb4..000000000000
- --- a/include/linux/compiler-gcc4.h
- +++ /dev/null
- @@ -1,88 +0,0 @@
- -#ifndef __LINUX_COMPILER_H
- -#error "Please don't include <linux/compiler-gcc4.h> directly, include <linux/compiler.h> instead."
- -#endif
- -
- -/* 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 __must_check __attribute__((warn_unused_result))
- -#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.
- - * Fixed in GCC 4.8.2 and later versions.
- - *
- - * (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 */
- diff --git a/include/linux/compiler-gcc5.h b/include/linux/compiler-gcc5.h
- deleted file mode 100644
- index cdd1cc202d51..000000000000
- --- a/include/linux/compiler-gcc5.h
- +++ /dev/null
- @@ -1,66 +0,0 @@
- -#ifndef __LINUX_COMPILER_H
- -#error "Please don't include <linux/compiler-gcc5.h> directly, include <linux/compiler.h> instead."
- -#endif
- -
- -#define __used __attribute__((__used__))
- -#define __must_check __attribute__((warn_unused_result))
- -#define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
- -
- -/* 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__ */
- -
- -/*
- - * 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__))
- -
- -/*
- - * Tell the optimizer that something else uses this function or variable.
- - */
- -#define __visible __attribute__((externally_visible))
- -
- -/*
- - * 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.
- - * Fixed in GCC 4.8.2 and later versions.
- - *
- - * (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
- -#define __HAVE_BUILTIN_BSWAP32__
- -#define __HAVE_BUILTIN_BSWAP64__
- -#define __HAVE_BUILTIN_BSWAP16__
- -#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
- --
- 2.11.0
|