[Buildroot] [PATCH] board/beaglebone: fix build issue with gcc6

Yann E. MORIN yann.morin.1998 at free.fr
Sun Jan 15 21:11:15 UTC 2017


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 <romain.naour at gmail.com>
> Cc: Lothar Felten <lothar.felten at gmail.com>
> Cc: Thomas Petazzoni <thomas.petazzoni at free-electrons.com>
> ---
> 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 <joe at perches.com>
> +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 <joe at perches.com>
> +Cc: Andi Kleen <andi at firstfloor.org>
> +Cc: Michal Marek <mmarek at suse.cz>
> +Cc: Segher Boessenkool <segher at kernel.crashing.org>
> +Cc: Sasha Levin <levinsasha928 at gmail.com>
> +Cc: Anton Blanchard <anton at samba.org>
> +Cc: Alan Modra <amodra at gmail.com>
> +Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
> +Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org>
> +Signed-off-by: Sasha Levin <sasha.levin at oracle.com>
> +[Romain:
> +  rebase on 4.1.6 used by processor-sdk-linux-02.00.00 ti branch]
> +Signed-off-by: Romain Naour <romain.naour at gmail.com>
> +---
> + 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 <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.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.  |
'------------------------------^-------^------------------^--------------------'



More information about the buildroot mailing list