2015-04-15 19:48:50

by Andi Kleen

[permalink] [raw]
Subject: [PATCH] Support gcc 6 for building

From: Andi Kleen <[email protected]>

gcc recently switched to a new version number scheme, where every version
gets a new major version number. The current version is 5.x, the next 6.x, etc.

The gcc git repository trunk branch just switched to report 6.x for the next
major release.

This breaks the way Linux selects compiler-gccX.h based on the major
version. Every new version would require adding a new compiler-gccX.h file,
which wouldn't really scale.

Let's assume that future gccs are fairly compatible (they are unlikely
to break anything Linux is relying on). So we can just keep using
compiler-gcc5.h, and select any specific differences with #if.

Cc: Segher Boessenkool <[email protected]>
Signed-off-by: Andi Kleen <[email protected]>
---
include/linux/compiler-gcc.h | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index cdf13ca..9c9a4e4 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -104,7 +104,12 @@
#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__)
+#if __GNUC__ < 5
+#define __LINUX_GCC_VERSION __GNUC__
+#else
+#define __LINUX_GCC_VERSION 5
+#endif
+#include gcc_header(__LINUX_GCC_VERSION)

#if !defined(__noclone)
#define __noclone /* not needed */
--
2.3.3


2015-04-16 03:05:03

by Segher Boessenkool

[permalink] [raw]
Subject: Re: [PATCH] Support gcc 6 for building

On Wed, Apr 15, 2015 at 12:45:43PM -0700, Andi Kleen wrote:
> From: Andi Kleen <[email protected]>
>
> gcc recently switched to a new version number scheme, where every version
> gets a new major version number. The current version is 5.x, the next 6.x, etc.
>
> The gcc git repository trunk branch just switched to report 6.x for the next
> major release.
>
> This breaks the way Linux selects compiler-gccX.h based on the major
> version. Every new version would require adding a new compiler-gccX.h file,
> which wouldn't really scale.
>
> Let's assume that future gccs are fairly compatible (they are unlikely
> to break anything Linux is relying on). So we can just keep using
> compiler-gcc5.h, and select any specific differences with #if.
>
> Cc: Segher Boessenkool <[email protected]>
> Signed-off-by: Andi Kleen <[email protected]>

Tested-by: Segher Boessenkool <[email protected]>

This works fine, thanks,


Segher

2015-04-16 07:57:59

by Michal Marek

[permalink] [raw]
Subject: Re: [PATCH] Support gcc 6 for building

On 2015-04-15 21:45, Andi Kleen wrote:
> From: Andi Kleen <[email protected]>
>
> gcc recently switched to a new version number scheme, where every version
> gets a new major version number. The current version is 5.x, the next 6.x, etc.
>
> The gcc git repository trunk branch just switched to report 6.x for the next
> major release.
>
> This breaks the way Linux selects compiler-gccX.h based on the major
> version. Every new version would require adding a new compiler-gccX.h file,
> which wouldn't really scale.
>
> Let's assume that future gccs are fairly compatible (they are unlikely
> to break anything Linux is relying on). So we can just keep using
> compiler-gcc5.h, and select any specific differences with #if.

Good idea. With the new scheme, we could also merge back compiler-gcc5.h
and compiler-gcc4.h. The only difference is the KASAN_ABI_VERSION define.

Michal

2015-04-16 15:56:37

by Andi Kleen

[permalink] [raw]
Subject: Re: [PATCH] Support gcc 6 for building

On Thu, Apr 16, 2015 at 09:57:48AM +0200, Michal Marek wrote:
> On 2015-04-15 21:45, Andi Kleen wrote:
> > From: Andi Kleen <[email protected]>
> >
> > gcc recently switched to a new version number scheme, where every version
> > gets a new major version number. The current version is 5.x, the next 6.x, etc.
> >
> > The gcc git repository trunk branch just switched to report 6.x for the next
> > major release.
> >
> > This breaks the way Linux selects compiler-gccX.h based on the major
> > version. Every new version would require adding a new compiler-gccX.h file,
> > which wouldn't really scale.
> >
> > Let's assume that future gccs are fairly compatible (they are unlikely
> > to break anything Linux is relying on). So we can just keep using
> > compiler-gcc5.h, and select any specific differences with #if.
>
> Good idea. With the new scheme, we could also merge back compiler-gcc5.h
> and compiler-gcc4.h. The only difference is the KASAN_ABI_VERSION define.

Would be fine too. Are you doing that, or should I send a patch?

-Andi

--
[email protected] -- Speaking for myself only.

2015-04-16 16:23:27

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH] Support gcc 6 for building

On Thu, 2015-04-16 at 17:56 +0200, Andi Kleen wrote:
> On Thu, Apr 16, 2015 at 09:57:48AM +0200, Michal Marek wrote:
> > On 2015-04-15 21:45, Andi Kleen wrote:
> > > From: Andi Kleen <[email protected]>
> > >
> > > gcc recently switched to a new version number scheme, where every version
> > > gets a new major version number. The current version is 5.x, the next 6.x, etc.
> > >
> > > The gcc git repository trunk branch just switched to report 6.x for the next
> > > major release.
> > >
> > > This breaks the way Linux selects compiler-gccX.h based on the major
> > > version. Every new version would require adding a new compiler-gccX.h file,
> > > which wouldn't really scale.
> > >
> > > Let's assume that future gccs are fairly compatible (they are unlikely
> > > to break anything Linux is relying on). So we can just keep using
> > > compiler-gcc5.h, and select any specific differences with #if.
> >
> > Good idea. With the new scheme, we could also merge back compiler-gcc5.h
> > and compiler-gcc4.h. The only difference is the KASAN_ABI_VERSION define.
>
> Would be fine too. Are you doing that, or should I send a patch?

As compiler-gcc3.h is trivial, what about integrating
the whole thing into a single file and get rid of the
compiler-gcc<version>.h files?

That would deduplicate the __must_check and __used macros.

I added Sasha Levin to the cc's as he was the only
complainant the first time I suggested this.

https://lkml.org/lkml/2014/9/4/675

2015-04-16 16:29:53

by Andi Kleen

[permalink] [raw]
Subject: Re: [PATCH] Support gcc 6 for building

> As compiler-gcc3.h is trivial, what about integrating
> the whole thing into a single file and get rid of the
> compiler-gcc<version>.h files?

I think that's the right thing to do yes.

-Andi

2015-04-16 20:13:57

by Michal Marek

[permalink] [raw]
Subject: Re: [PATCH] Support gcc 6 for building

Dne 16.4.2015 v 17:56 Andi Kleen napsal(a):
> On Thu, Apr 16, 2015 at 09:57:48AM +0200, Michal Marek wrote:
>> Good idea. With the new scheme, we could also merge back compiler-gcc5.h
>> and compiler-gcc4.h. The only difference is the KASAN_ABI_VERSION define.
>
> Would be fine too. Are you doing that, or should I send a patch?

I suggest to merge your patch now, so that the kernel can be built with
gcc 6 snapshots. I can send a follow-up patch.

Michal

2015-04-16 20:31:17

by Joe Perches

[permalink] [raw]
Subject: [PATCH 0/2] Integrate compiler-gcc[345].h files into compiler-gcc.h

Joe Perches (2):
compiler-gcc.h: Neatening
compiler-gcc: Integrate the various compiler-gcc[345].h files

include/linux/compiler-gcc.h | 207 +++++++++++++++++++++++++++++++++---------
include/linux/compiler-gcc3.h | 23 -----
include/linux/compiler-gcc4.h | 91 -------------------
include/linux/compiler-gcc5.h | 67 --------------
4 files changed, 162 insertions(+), 226 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

--
2.1.2

2015-04-16 20:31:46

by Joe Perches

[permalink] [raw]
Subject: [PATCH 1/2] compiler-gcc.h: Neatening

Move the inline and noinline blocks together
Comment neatening
Alignment of __attribute__ uses
Consistent naming of __must_be_array macro argument
Multiline macro neatening
---
include/linux/compiler-gcc.h | 85 +++++++++++++++++++++++---------------------
1 file changed, 45 insertions(+), 40 deletions(-)

diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index cdf13ca..0b008ad 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -5,9 +5,9 @@
/*
* Common definitions for all gcc versions go here.
*/
-#define GCC_VERSION (__GNUC__ * 10000 \
- + __GNUC_MINOR__ * 100 \
- + __GNUC_PATCHLEVEL__)
+#define GCC_VERSION (__GNUC__ * 10000 \
+ + __GNUC_MINOR__ * 100 \
+ + __GNUC_PATCHLEVEL__)


/* Optimization barrier */
@@ -32,55 +32,63 @@
* the inline assembly constraint from =g to =r, in this particular
* case either is valid.
*/
-#define RELOC_HIDE(ptr, off) \
- ({ unsigned long __ptr; \
- __asm__ ("" : "=r"(__ptr) : "0"(ptr)); \
- (typeof(ptr)) (__ptr + (off)); })
+#define RELOC_HIDE(ptr, off) \
+({ \
+ unsigned long __ptr; \
+ __asm__ ("" : "=r"(__ptr) : "0"(ptr)); \
+ (typeof(ptr)) (__ptr + (off)); \
+})

/* Make the optimizer believe the variable can be manipulated arbitrarily. */
-#define OPTIMIZER_HIDE_VAR(var) __asm__ ("" : "=r" (var) : "0" (var))
+#define OPTIMIZER_HIDE_VAR(var) \
+ __asm__ ("" : "=r" (var) : "0" (var))

#ifdef __CHECKER__
-#define __must_be_array(arr) 0
+#define __must_be_array(a) 0
#else
/* &a[0] degrades to a pointer: a different type from an array */
-#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
+#define __must_be_array(a) BUILD_BUG_ON_ZERO(__same_type((a), &(a)[0]))
#endif

/*
* Force always-inline if the user requests it so via the .config,
* or if gcc is too old:
*/
-#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \
+#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \
!defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4)
-# define inline inline __attribute__((always_inline)) notrace
-# define __inline__ __inline__ __attribute__((always_inline)) notrace
-# define __inline __inline __attribute__((always_inline)) notrace
+#define inline inline __attribute__((always_inline)) notrace
+#define __inline__ __inline__ __attribute__((always_inline)) notrace
+#define __inline __inline __attribute__((always_inline)) notrace
#else
/* A lot of inline functions can cause havoc with function tracing */
-# define inline inline notrace
-# define __inline__ __inline__ notrace
-# define __inline __inline notrace
+#define inline inline notrace
+#define __inline__ __inline__ notrace
+#define __inline __inline notrace
#endif

-#define __deprecated __attribute__((deprecated))
-#define __packed __attribute__((packed))
-#define __weak __attribute__((weak))
-#define __alias(symbol) __attribute__((alias(#symbol)))
+#define __always_inline inline __attribute__((always_inline))
+#define noinline __attribute__((noinline))
+
+#define __deprecated __attribute__((deprecated))
+#define __packed __attribute__((packed))
+#define __weak __attribute__((weak))
+#define __alias(symbol) __attribute__((alias(#symbol)))

/*
- * it doesn't make sense on ARM (currently the only user of __naked) to trace
- * naked functions because then mcount is called without stack and frame pointer
- * being set up and there is no chance to restore the lr register to the value
- * before mcount was called.
+ * it doesn't make sense on ARM (currently the only user of __naked)
+ * to trace naked functions because then mcount is called without
+ * stack and frame pointer being set up and there is no chance to
+ * restore the lr register to the value before mcount was called.
+ *
+ * The asm() bodies of naked functions often depend on standard calling
+ * conventions, therefore they must be noinline and noclone.
*
- * The asm() bodies of naked functions often depend on standard calling conventions,
- * therefore they must be noinline and noclone. GCC 4.[56] currently fail to enforce
- * this, so we must do so ourselves. See GCC PR44290.
+ * GCC 4.[56] currently fail to enforce this, so we must do so ourselves.
+ * See GCC PR44290.
*/
-#define __naked __attribute__((naked)) noinline __noclone notrace
+#define __naked __attribute__((naked)) noinline __noclone notrace

-#define __noreturn __attribute__((noreturn))
+#define __noreturn __attribute__((noreturn))

/*
* From the GCC manual:
@@ -92,14 +100,13 @@
* would be.
* [...]
*/
-#define __pure __attribute__((pure))
-#define __aligned(x) __attribute__((aligned(x)))
-#define __printf(a, b) __attribute__((format(printf, a, b)))
-#define __scanf(a, b) __attribute__((format(scanf, a, b)))
-#define noinline __attribute__((noinline))
-#define __attribute_const__ __attribute__((__const__))
-#define __maybe_unused __attribute__((unused))
-#define __always_unused __attribute__((unused))
+#define __pure __attribute__((pure))
+#define __aligned(x) __attribute__((aligned(x)))
+#define __printf(a, b) __attribute__((format(printf, a, b)))
+#define __scanf(a, b) __attribute__((format(scanf, a, b)))
+#define __attribute_const__ __attribute__((__const__))
+#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)
@@ -115,5 +122,3 @@
* code
*/
#define uninitialized_var(x) x = x
-
-#define __always_inline inline __attribute__((always_inline))
--
2.1.2

2015-04-16 20:31:34

by Joe Perches

[permalink] [raw]
Subject: [PATCH 2/2] 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 <[email protected]>
---
include/linux/compiler-gcc.h | 120 ++++++++++++++++++++++++++++++++++++++++--
include/linux/compiler-gcc3.h | 23 --------
include/linux/compiler-gcc4.h | 91 --------------------------------
include/linux/compiler-gcc5.h | 67 -----------------------
4 files changed, 116 insertions(+), 185 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 0b008ad..e28b089 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -108,10 +108,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 7d89feb..0000000
--- 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 769e198..0000000
--- a/include/linux/compiler-gcc4.h
+++ /dev/null
@@ -1,91 +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.
- *
- * (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 >= 40902
-#define KASAN_ABI_VERSION 3
-#endif
diff --git a/include/linux/compiler-gcc5.h b/include/linux/compiler-gcc5.h
deleted file mode 100644
index efee493..0000000
--- a/include/linux/compiler-gcc5.h
+++ /dev/null
@@ -1,67 +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.
- *
- * (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 */
-
-#define KASAN_ABI_VERSION 4
--
2.1.2

2015-04-16 20:44:42

by Joe Perches

[permalink] [raw]
Subject: Re: [PATCH 1/2] compiler-gcc.h: Neatening

On Thu, 2015-04-16 at 13:31 -0700, Joe Perches wrote:
> Move the inline and noinline blocks together
> Comment neatening
> Alignment of __attribute__ uses
> Consistent naming of __must_be_array macro argument
> Multiline macro neatening

I must have missed the -s flag on the git commit.

Signed-off-by: Joe Perches <[email protected]>

2015-04-20 21:17:17

by Andrew Morton

[permalink] [raw]
Subject: Re: [PATCH 0/2] Integrate compiler-gcc[345].h files into compiler-gcc.h

On Thu, 16 Apr 2015 13:31:01 -0700 Joe Perches <[email protected]> wrote:

> Joe Perches (2):
> compiler-gcc.h: Neatening
> compiler-gcc: Integrate the various compiler-gcc[345].h files
>

We have at least three support-three-gcc-6 patchsets floating about.
Are we all happy with Joe's patchset?


I expect Andi's
http://ozlabs.org/~akpm/mmots/broken-out/lto-add-__noreorder-and-mark-initcalls-__noreorder.patch
will need to be updated in response, which is why I didn't merge it.

2015-04-20 21:24:21

by Andi Kleen

[permalink] [raw]
Subject: Re: [PATCH 0/2] Integrate compiler-gcc[345].h files into compiler-gcc.h

On Mon, Apr 20, 2015 at 02:17:13PM -0700, Andrew Morton wrote:
> On Thu, 16 Apr 2015 13:31:01 -0700 Joe Perches <[email protected]> wrote:
>
> > Joe Perches (2):
> > compiler-gcc.h: Neatening
> > compiler-gcc: Integrate the various compiler-gcc[345].h files
> >
>
> We have at least three support-three-gcc-6 patchsets floating about.
> Are we all happy with Joe's patchset?

It's fine for me.
>
>
> I expect Andi's
> http://ozlabs.org/~akpm/mmots/broken-out/lto-add-__noreorder-and-mark-initcalls-__noreorder.patch
> will need to be updated in response, which is why I didn't merge it.

I'll resend.

-Andi
>

--
[email protected] -- Speaking for myself only.