From 6117f120dafb7bcd5359f7ddc7b099e9f7b21b33 Mon Sep 17 00:00:00 2001 From: Markham Date: Wed, 27 Apr 2022 09:20:12 +0200 Subject: [PATCH] hd2: fix build kernel with gcc8 and greater --- .../0001-fix-compilation-with-gcc-8.patch | 13 ++++ archive-patches/kernel-config/compiler-gcc9.h | 59 +++++++++++++++++++ .../kernel-2.6.34.13-nevis.config | 2 +- make/kernel.mk | 3 + make/prerequisites.mk | 2 +- 5 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 archive-patches/kernel-config/0001-fix-compilation-with-gcc-8.patch create mode 100644 archive-patches/kernel-config/compiler-gcc9.h diff --git a/archive-patches/kernel-config/0001-fix-compilation-with-gcc-8.patch b/archive-patches/kernel-config/0001-fix-compilation-with-gcc-8.patch new file mode 100644 index 0000000..e491ef5 --- /dev/null +++ b/archive-patches/kernel-config/0001-fix-compilation-with-gcc-8.patch @@ -0,0 +1,13 @@ +diff --git a/arch/arm/include/asm/uaccess.h b/arch/arm/include/asm/uaccess.h +index 74b17d0..dc64fa2 100644 +--- a/arch/arm/include/asm/uaccess.h ++++ b/arch/arm/include/asm/uaccess.h +@@ -165,7 +165,7 @@ extern int __put_user_8(void *, unsigned + ({ \ + unsigned long __limit = current_thread_info()->addr_limit - 1; \ + const typeof(*(p)) __user *__tmp_p = (p); \ +- register const typeof(*(p)) __r2 asm("r2") = (x); \ ++ register typeof(*(p)) __r2 asm("r2") = (x); \ + register const typeof(*(p)) __user *__p asm("r0") = __tmp_p; \ + register unsigned long __l asm("r1") = __limit; \ + register int __e asm("r0"); \ diff --git a/archive-patches/kernel-config/compiler-gcc9.h b/archive-patches/kernel-config/compiler-gcc9.h new file mode 100644 index 0000000..e322f45 --- /dev/null +++ b/archive-patches/kernel-config/compiler-gcc9.h @@ -0,0 +1,59 @@ +#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] + + 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. + */ +#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 6 diff --git a/archive-patches/kernel-config/kernel-2.6.34.13-nevis.config b/archive-patches/kernel-config/kernel-2.6.34.13-nevis.config index d0401ce..989da60 100644 --- a/archive-patches/kernel-config/kernel-2.6.34.13-nevis.config +++ b/archive-patches/kernel-config/kernel-2.6.34.13-nevis.config @@ -658,7 +658,7 @@ CONFIG_NETDEVICES=y # CONFIG_BONDING is not set # CONFIG_MACVLAN is not set # CONFIG_EQUALIZER is not set -# CONFIG_TUN is not set +CONFIG_TUN=m # CONFIG_VETH is not set CONFIG_PHYLIB=y diff --git a/make/kernel.mk b/make/kernel.mk index 35d21d1..0d6e7f2 100644 --- a/make/kernel.mk +++ b/make/kernel.mk @@ -53,6 +53,9 @@ ifeq ($(K_SRCDIR), $(SOURCE_DIR)/linux) rm -f $(SOURCE_DIR)/linux/.config endif set -e; cd $(SOURCE_DIR)/linux; \ + if [ "$(BOXSERIES)" = "hd2" ]; then \ + patch -t -p1 < $(PATCHES)/kernel-config/0001-fix-compilation-with-gcc-8.patch; \ + fi; \ make ARCH=arm CROSS_COMPILE=$(TARGET)- silentoldconfig O=$(K_OBJ)/; \ $(MAKE) ARCH=arm LOCALVERSION= CROSS_COMPILE=$(TARGET)- O=$(K_OBJ)/; \ make ARCH=arm CROSS_COMPILE=$(TARGET)- INSTALL_MOD_PATH=$(TARGETPREFIX)/mymodules modules_install O=$(K_OBJ)/ diff --git a/make/prerequisites.mk b/make/prerequisites.mk index 31f9747..9170baf 100755 --- a/make/prerequisites.mk +++ b/make/prerequisites.mk @@ -129,7 +129,7 @@ $(GIT_KERNEL): ln -sf $(GIT_KERNEL)/linux-$(KBRANCH) $(SOURCE_DIR)/linux; \ fi; \ if [ "$(BOXSERIES)" = "hd2" ]; then \ - cp -a $(PATCHES)/kernel-config/compiler-gcc6.h $(GIT_KERNEL)/linux-$(KBRANCH)/include/linux; \ + cp -a $(PATCHES)/kernel-config/compiler-gcc*.h $(GIT_KERNEL)/linux-$(KBRANCH)/include/linux; \ fi $(GIT_PLUGINS): -- 2.39.5