Re: [3.19.y-ckt stable] Linux 3.19.8-ckt21
From: Kamal Mostafa
Date: Mon May 16 2016 - 12:58:19 EST
On Thu, May 12, 2016 at 09:07:52PM +0200, Philip Müller wrote:
> Hi Kamal,
>
> seems using a toolchain with gcc 6.1 creates funny new issues like this:
>
> In file included from include/linux/compiler.h:54:0,
> from include/uapi/linux/stddef.h:1,
> from include/linux/stddef.h:4,
> from ./include/uapi/linux/posix_types.h:4,
> from include/uapi/linux/types.h:13,
> from include/linux/types.h:5,
> from include/linux/page-flags.h:8,
> from kernel/bounds.c:9:
> include/linux/compiler-gcc.h:106:30: fatal error: linux/compiler-gcc6.h:
> No such file or directory
> #include gcc_header(__GNUC__)
> ^
> compilation terminated.
>
> Are you thinking about supporting gcc 6.x series in future
> point-releases of yours?
>
> kind regard
> Philip Müller
> -------------------------
> Manjaro Project Lead
>
> --
> kernel-team mailing list
> kernel-team@xxxxxxxxxxxxxxxx
> https://lists.ubuntu.com/mailman/listinfo/kernel-team
On Thu, May 12, 2016 at 09:56:09PM +0200, Philip Müller wrote:
> Hi Kamal,
>
> I found it and backported the upstream commit
> cb984d101b30eb7478d32df56a0023e4603cba7f to 3.19 series.
>
> kind regards
> Philip Müller
> ---------------------
> Manjaro Project Lead
>
Queued up for 3.19-stable. Thanks very much for the backport, Philip.
-Kamal
> diff -Npur linux-3.19.orig/include/linux/compiler-gcc3.h linux-3.19/include/linux/compiler-gcc3.h
> --- linux-3.19.orig/include/linux/compiler-gcc3.h 2015-02-09 03:54:22.000000000 +0100
> +++ linux-3.19/include/linux/compiler-gcc3.h 1970-01-01 01:00:00.000000000 +0100
> @@ -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 -Npur linux-3.19.orig/include/linux/compiler-gcc4.h linux-3.19/include/linux/compiler-gcc4.h
> --- linux-3.19.orig/include/linux/compiler-gcc4.h 2015-02-09 03:54:22.000000000 +0100
> +++ linux-3.19/include/linux/compiler-gcc4.h 1970-01-01 01:00:00.000000000 +0100
> @@ -1,87 +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 */
> diff -Npur linux-3.19.orig/include/linux/compiler-gcc5.h linux-3.19/include/linux/compiler-gcc5.h
> --- linux-3.19.orig/include/linux/compiler-gcc5.h 2015-02-09 03:54:22.000000000 +0100
> +++ linux-3.19/include/linux/compiler-gcc5.h 1970-01-01 01:00:00.000000000 +0100
> @@ -1,65 +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 */
> diff -Npur linux-3.19.orig/include/linux/compiler-gcc.h linux-3.19/include/linux/compiler-gcc.h
> --- linux-3.19.orig/include/linux/compiler-gcc.h 2015-02-09 03:54:22.000000000 +0100
> +++ linux-3.19/include/linux/compiler-gcc.h 2016-05-12 21:45:08.660745926 +0200
> @@ -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 */
> --
> kernel-team mailing list
> kernel-team@xxxxxxxxxxxxxxxx
> https://lists.ubuntu.com/mailman/listinfo/kernel-team