From: Ting Liu Date: Tue, 1 Jul 2014 09:59:20 +0000 (-0500) Subject: linux: fix 64bit kernel builds with binutils 2.24 X-Git-Tag: 2.1~534^2~160 X-Git-Url: https://code.ossystems.io/gitweb?a=commitdiff_plain;h=4a12cfa3038aa9b699ce1a414eda6b41f4d47280;p=meta-freescale.git linux: fix 64bit kernel builds with binutils 2.24 upstream commit: 7998eb3dc700aaf499f93f50b3d77da834ef9e1d Signed-off-by: Ting Liu --- diff --git a/meta-fsl-ppc/recipes-kernel/linux/files/powerpc-Fix-64-bit-builds-with-binutils-2.24.patch b/meta-fsl-ppc/recipes-kernel/linux/files/powerpc-Fix-64-bit-builds-with-binutils-2.24.patch new file mode 100644 index 00000000..2fdcc9fb --- /dev/null +++ b/meta-fsl-ppc/recipes-kernel/linux/files/powerpc-Fix-64-bit-builds-with-binutils-2.24.patch @@ -0,0 +1,80 @@ +From 7998eb3dc700aaf499f93f50b3d77da834ef9e1d Mon Sep 17 00:00:00 2001 +From: Guenter Roeck +Date: Thu, 15 May 2014 09:33:42 -0700 +Subject: powerpc: Fix 64 bit builds with binutils 2.24 + +Upstream-Status: Backport + +With binutils 2.24, various 64 bit builds fail with relocation errors +such as + +arch/powerpc/kernel/built-in.o: In function `exc_debug_crit_book3e': + (.text+0x165ee): relocation truncated to fit: R_PPC64_ADDR16_HI + against symbol `interrupt_base_book3e' defined in .text section + in arch/powerpc/kernel/built-in.o +arch/powerpc/kernel/built-in.o: In function `exc_debug_crit_book3e': + (.text+0x16602): relocation truncated to fit: R_PPC64_ADDR16_HI + against symbol `interrupt_end_book3e' defined in .text section + in arch/powerpc/kernel/built-in.o + +The assembler maintainer says: + + I changed the ABI, something that had to be done but unfortunately + happens to break the booke kernel code. When building up a 64-bit + value with lis, ori, shl, oris, ori or similar sequences, you now + should use @high and @higha in place of @h and @ha. @h and @ha + (and their associated relocs R_PPC64_ADDR16_HI and R_PPC64_ADDR16_HA) + now report overflow if the value is out of 32-bit signed range. + ie. @h and @ha assume you're building a 32-bit value. This is needed + to report out-of-range -mcmodel=medium toc pointer offsets in @toc@h + and @toc@ha expressions, and for consistency I did the same for all + other @h and @ha relocs. + +Replacing @h with @high in one strategic location fixes the relocation +errors. This has to be done conditionally since the assembler either +supports @h or @high but not both. + +Cc: +Signed-off-by: Guenter Roeck +Signed-off-by: Benjamin Herrenschmidt + +diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile +index 4c0cedf..ce4c68a 100644 +--- a/arch/powerpc/Makefile ++++ b/arch/powerpc/Makefile +@@ -150,7 +150,9 @@ endif + + CFLAGS-$(CONFIG_TUNE_CELL) += $(call cc-option,-mtune=cell) + +-KBUILD_CPPFLAGS += -Iarch/$(ARCH) ++asinstr := $(call as-instr,lis 9$(comma)foo@high,-DHAVE_AS_ATHIGH=1) ++ ++KBUILD_CPPFLAGS += -Iarch/$(ARCH) $(asinstr) + KBUILD_AFLAGS += -Iarch/$(ARCH) + KBUILD_CFLAGS += -msoft-float -pipe -Iarch/$(ARCH) $(CFLAGS-y) + CPP = $(CC) -E $(KBUILD_CFLAGS) +diff --git a/arch/powerpc/include/asm/ppc_asm.h b/arch/powerpc/include/asm/ppc_asm.h +index 6586a40..cded7c1 100644 +--- a/arch/powerpc/include/asm/ppc_asm.h ++++ b/arch/powerpc/include/asm/ppc_asm.h +@@ -318,11 +318,16 @@ n: + addi reg,reg,(name - 0b)@l; + + #ifdef __powerpc64__ ++#ifdef HAVE_AS_ATHIGH ++#define __AS_ATHIGH high ++#else ++#define __AS_ATHIGH h ++#endif + #define LOAD_REG_IMMEDIATE(reg,expr) \ + lis reg,(expr)@highest; \ + ori reg,reg,(expr)@higher; \ + rldicr reg,reg,32,31; \ +- oris reg,reg,(expr)@h; \ ++ oris reg,reg,(expr)@__AS_ATHIGH; \ + ori reg,reg,(expr)@l; + + #define LOAD_REG_ADDR(reg,name) \ +-- +cgit v0.10.1 + diff --git a/meta-fsl-ppc/recipes-kernel/linux/linux-qoriq-sdk_3.12.bb b/meta-fsl-ppc/recipes-kernel/linux/linux-qoriq-sdk_3.12.bb index 5fa66028..881180a5 100644 --- a/meta-fsl-ppc/recipes-kernel/linux/linux-qoriq-sdk_3.12.bb +++ b/meta-fsl-ppc/recipes-kernel/linux/linux-qoriq-sdk_3.12.bb @@ -1,5 +1,7 @@ require recipes-kernel/linux/linux-qoriq-sdk.inc -SRC_URI = "git://git.freescale.com/ppc/sdk/linux.git;nobranch=1" +SRC_URI = "git://git.freescale.com/ppc/sdk/linux.git;nobranch=1 \ + file://powerpc-Fix-64-bit-builds-with-binutils-2.24.patch \ +" SRCREV = "c29fe1a733308cbe592b3af054a97be1b91cf2dd"