scripts/kernel-functions: Make it possible to build older kernels with gcc 10

git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@9027 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Bart Van Assche
2020-06-21 16:07:16 +00:00
parent f7b704ee99
commit 8174bad3da
2 changed files with 109 additions and 31 deletions

View File

@@ -127,15 +127,20 @@ function extract_kernel_tree {
# Patch a kernel tree where $1 is the kernel version.
function patch_kernel {
case "$k" in
case "$1" in
*^*)
# RHEL / CentOS.
;;
2.*|3.*)
# Tell the kernel that we are using gcc 4.6 since older kernel
# versions do not support recent gcc versions.
KCFLAGS="-U__GNUC__ -U__GNUC_MINOR__ -D__GNUC__=4 -D__GNUC_MINOR__=6"
patch -p1 <<'EOF'
*)
# See also commit f153b82121b0 ("Sanitize gcc version header
# includes") # v2.6.29. See also commit 71458cfc782e ("kernel: add
# support for gcc 5") # v3.18. See also commit cb984d101b30
# ("compiler-gcc: integrate the various compiler-gcc[345].h
# files") # v4.2.
if kernel_version_le 2.6.29 $1 && kernel_version_lt $1 4.2; then
# Tell the kernel that we are using gcc 4.6 since older kernel
# versions do not support recent gcc versions.
patch -f -s -p1 <<'EOF'
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index 02ae99e8e6d3..47e12c19c965 100644
--- a/include/linux/compiler-gcc.h
@@ -150,6 +155,48 @@ index 02ae99e8e6d3..47e12c19c965 100644
#if !defined(__noclone)
#define __noclone /* not needed */
EOF
patch -f -s -p1 <<'EOF' ||
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h
index 769e19864632..2ec6c7a11502 100644
--- a/include/linux/compiler-gcc4.h
+++ b/include/linux/compiler-gcc4.h
@@ -2,13 +2,6 @@
#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)
EOF
patch -f -s -p1 <<'EOF'
diff --git a/include/linux/compiler-gcc4.h b/include/linux/compiler-gcc4.h
index 412bc6c2b023..901ca31be7f8 100644
--- a/include/linux/compiler-gcc4.h
+++ b/include/linux/compiler-gcc4.h
@@ -2,13 +2,6 @@
#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 __GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ <= 1
-# 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)
EOF
fi
;;
esac
if [ "$1" = "2.6.29" ] || [ "$1" = "2.6.29.1" ] || [ "$1" = "2.6.29.2" ] ||
@@ -362,9 +409,8 @@ index d6d65537b0d9..6aad8308a0ac 100644
EOF
fi
case "$1" in
2.6.3[6-9]*|3.[0-9]|3.[0-9].*|3.1[01345]|3.1[01345].*|3.1[789]|3.1[789].*|4.[023567]|4.[023567].*)
patch -p1 <<'EOF'
if kernel_version_le 2.6.36 $1 && kernel_version_lt $1 4.8; then
patch -f -s -p1 <<'EOF'
From c6a385539175ebc603da53aafb7753d39089f32e Mon Sep 17 00:00:00 2001
From: Borislav Petkov <bp@suse.de>
Date: Mon, 14 Nov 2016 19:41:31 +0100
@@ -426,10 +472,11 @@ index 0ed6ce300543..c324b43712f0 100644
KBUILD_CFLAGS_MODULE := -DMODULE
KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
EOF
;;
# CentOS 6.x.
2.6.32-*)
patch -p1 <<'EOF'
else
case "$1" in
# CentOS 6.x.
2.6.32-*)
patch -f -s -p1 <<'EOF'
--- linux-2.6.32-754.29.1.el6/Makefile.orig 2020-05-13 14:09:18.448503420 -0700
+++ linux-2.6.32-754.29.1.el6/Makefile 2020-05-13 14:11:24.265441790 -0700
@@ -355,7 +355,8 @@
@@ -452,9 +499,9 @@ EOF
# Read KERNELRELEASE from include/config/kernel.release (if it exists)
KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
EOF
;;
2.6.3[1-5]*)
patch -p1 <<'EOF'
;;
2.6.3[1-5]*)
patch -f -s -p1 <<'EOF'
diff --git a/Makefile b/Makefile
index 141da26fda4b..343ec388ae2e 100644
--- a/Makefile
@@ -477,11 +524,12 @@ index 141da26fda4b..343ec388ae2e 100644
KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
EOF
;;
esac
esac
fi
case "$1" in
4.18.0-*) # CentOS 8.x
patch -p1 <<'EOF'
patch -f -s -p1 <<'EOF'
From a6e60d84989fa0e91db7f236eda40453b0e44afa Mon Sep 17 00:00:00 2001
From: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
Date: Sat, 19 Jan 2019 20:59:34 +0100
@@ -560,8 +608,8 @@ index 8fa38d3e7538..f5bc4c046461 100644
EOF
;;
2.6.32-*|3.10.0-*) # CentOS 6.x and 7.x
patch -p1 <<'EOF'
2.*|3.*)
patch -f -s -p1 <<'EOF'
--- linux-3.10.0-1127.el7/include/linux/init.h.orig 2020-05-09 20:55:48.638956513 -0700
+++ linux-3.10.0-1127.el7/include/linux/init.h 2020-05-09 20:56:46.947612445 -0700
@@ -309,13 +309,15 @@
@@ -586,6 +634,46 @@ EOF
;;
esac
if kernel_version_le 3.2 $1 && kernel_version_lt $1 3.18; then
patch -f -s -p1 <<'EOF'
From eeeda4cd06e828b331b15741a204ff9f5874d28d Mon Sep 17 00:00:00 2001
From: Ben Hutchings <ben@decadent.org.uk>
Date: Wed, 24 Sep 2014 13:30:12 +0100
Subject: [PATCH] x86/relocs: Make per_cpu_load_addr static
per_cpu_load_addr is only used for 64-bit relocations, but is
declared in both configurations of relocs.c - with different
types. This has undefined behaviour in general. GNU ld is
documented to use the larger size in this case, but other tools
may differ and some warn about this.
References: https://bugs.debian.org/748577
Reported-by: Michael Tautschnig <mt@debian.org>
Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Cc: 748577@bugs.debian.org
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/r/1411561812.3659.23.camel@decadent.org.uk
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/tools/relocs.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
index bbb1d2259ecf..a5efb21d5228 100644
--- a/arch/x86/tools/relocs.c
+++ b/arch/x86/tools/relocs.c
@@ -695,7 +695,7 @@ static void walk_relocs(int (*process)(struct section *sec, Elf_Rel *rel,
*
*/
static int per_cpu_shndx = -1;
-Elf_Addr per_cpu_load_addr;
+static Elf_Addr per_cpu_load_addr;
static void percpu_init(void)
{
EOF
fi
# Use sed to patch the ____ilog2_NaN() prototype.
sed -i 's/__attribute__((const, noreturn))/__attribute__((noreturn))/' \
include/linux/log2.h tools/include/linux/log2.h 2>/dev/null