From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yann E. MORIN Date: Sun, 15 Jan 2017 22:11:15 +0100 Subject: [Buildroot] [PATCH] board/beaglebone: fix build issue with gcc6 In-Reply-To: <20170115203551.6121-1-romain.naour@gmail.com> References: <20170115203551.6121-1-romain.naour@gmail.com> Message-ID: <20170115211115.GA4277@free.fr> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: buildroot@busybox.net Romain, All, On 2017-01-15 21:35 +0100, Romain Naour spake thusly: > Backport a patch from linux-4.1.y stable branch (4.1.23) to support > gcc >= 6 compilers. The current kernel is based on 4.1.6 from ti's > processor-sdk-linux-02.00.00.00 branch. I'm not quite sure we want to handle this backport on a vendor tree. It's up to them to handle it. Why don't we simply force gcc to gcc-5 in beaglebone_defconfig and beaglebone_qt5_defconfig instead? Regards, Yann E. MORIN. > Signed-off-by: Romain Naour > Cc: Lothar Felten > Cc: Thomas Petazzoni > --- > The processor-sdk-linux-02.00.00.00 branch is not maintained since a > while (2015-10-02), maybe it's time to move to the > processor-sdk-linux-03.02.00 branch (4.4.32) ? > --- > ...c-integrate-the-various-compiler-gcc-345-.patch | 371 +++++++++++++++++++++ > 1 file changed, 371 insertions(+) > create mode 100644 board/beaglebone/patches/linux/0002-compiler-gcc-integrate-the-various-compiler-gcc-345-.patch > > diff --git a/board/beaglebone/patches/linux/0002-compiler-gcc-integrate-the-various-compiler-gcc-345-.patch b/board/beaglebone/patches/linux/0002-compiler-gcc-integrate-the-various-compiler-gcc-345-.patch > new file mode 100644 > index 0000000..04f4067 > --- /dev/null > +++ b/board/beaglebone/patches/linux/0002-compiler-gcc-integrate-the-various-compiler-gcc-345-.patch > @@ -0,0 +1,371 @@ > +From 1fb62e5c33646358afd682af99e7a2f3562e2c90 Mon Sep 17 00:00:00 2001 > +From: Joe Perches > +Date: Thu, 25 Jun 2015 15:01:02 -0700 > +Subject: [PATCH] compiler-gcc: integrate the various compiler-gcc[345].h files > + > +[ 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. > + > +Signed-off-by: Joe Perches > +Cc: Andi Kleen > +Cc: Michal Marek > +Cc: Segher Boessenkool > +Cc: Sasha Levin > +Cc: Anton Blanchard > +Cc: Alan Modra > +Signed-off-by: Andrew Morton > +Signed-off-by: Linus Torvalds > +Signed-off-by: Sasha Levin > +[Romain: > + rebase on 4.1.6 used by processor-sdk-linux-02.00.00 ti branch] > +Signed-off-by: Romain Naour > +--- > + 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 371e560..484ef6e 100644 > +--- a/include/linux/compiler-gcc.h > ++++ b/include/linux/compiler-gcc.h > +@@ -115,10 +115,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 directly, include 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 directly, include 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 directly, include 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.9.3 > + > -- > 2.9.3 > > _______________________________________________ > buildroot mailing list > buildroot at busybox.net > http://lists.busybox.net/mailman/listinfo/buildroot -- .-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------'