From: Ting Liu <[email protected]> backported from: http://permalink.gmane.org/gmane.linux.ports.ppc.embedded/70273
Signed-off-by: Ting Liu <[email protected]> --- ...erpc-Fix-64-bit-builds-with-binutils-2.24.patch | 84 ++++++++++++++++++++++ recipes-kernel/linux/linux-qoriq-sdk.inc | 4 +- 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 recipes-kernel/linux/files/powerpc-Fix-64-bit-builds-with-binutils-2.24.patch diff --git a/recipes-kernel/linux/files/powerpc-Fix-64-bit-builds-with-binutils-2.24.patch b/recipes-kernel/linux/files/powerpc-Fix-64-bit-builds-with-binutils-2.24.patch new file mode 100644 index 0000000..b55f66b --- /dev/null +++ b/recipes-kernel/linux/files/powerpc-Fix-64-bit-builds-with-binutils-2.24.patch @@ -0,0 +1,84 @@ +From 7092c1143fc10d748bb124624568848409338d89 Mon Sep 17 00:00:00 2001 +From: Guenter Roeck <[email protected]> +Date: Thu, 15 May 2014 09:33:42 -0700 +Subject: [PATCH] powerpc: Fix 64 bit builds with binutils 2.24 + +commit 7998eb3dc700aaf499f93f50b3d77da834ef9e1d upstream. + +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. + +Signed-off-by: Guenter Roeck <[email protected]> +Signed-off-by: Benjamin Herrenschmidt <[email protected]> +Signed-off-by: Luis Henriques <[email protected]> +--- + arch/powerpc/Makefile | 4 +++- + arch/powerpc/include/asm/ppc_asm.h | 7 ++++++- + 2 files changed, 9 insertions(+), 2 deletions(-) + +diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile +index 1893fb9..df0cd0c 100644 +--- a/arch/powerpc/Makefile ++++ b/arch/powerpc/Makefile +@@ -100,7 +100,9 @@ CFLAGS-$(CONFIG_POWER7_CPU) += $(call cc-option,-mcpu=power7) + + 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 += -msoft-float -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 3a853ae..b3205e6 100644 +--- a/arch/powerpc/include/asm/ppc_asm.h ++++ b/arch/powerpc/include/asm/ppc_asm.h +@@ -309,11 +309,16 @@ n: + * ld rY,ADDROFF(name)(rX) + */ + #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) \ +-- +1.7.9.5 + diff --git a/recipes-kernel/linux/linux-qoriq-sdk.inc b/recipes-kernel/linux/linux-qoriq-sdk.inc index 83c632e..e6831a3 100644 --- a/recipes-kernel/linux/linux-qoriq-sdk.inc +++ b/recipes-kernel/linux/linux-qoriq-sdk.inc @@ -3,7 +3,9 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=d7810fab7487fb0aad327b76f1be7cd7" PV = "3.8" INC_PR = "r11" -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 = "3edd71eeb4e4ae27baf539e0a5f0c8e8261bf65b" SRCREV_t2080qds = "47914f6cf77197921c648c6ea8977974fa54d03a" SRCREV_t2080qds-64b = "47914f6cf77197921c648c6ea8977974fa54d03a" -- 1.8.3.2 -- _______________________________________________ meta-freescale mailing list [email protected] https://lists.yoctoproject.org/listinfo/meta-freescale
