aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '4.8.1/gentoo/30_all_arm_armv4-no-thumb-fix-link.patch')
-rw-r--r--4.8.1/gentoo/30_all_arm_armv4-no-thumb-fix-link.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/4.8.1/gentoo/30_all_arm_armv4-no-thumb-fix-link.patch b/4.8.1/gentoo/30_all_arm_armv4-no-thumb-fix-link.patch
new file mode 100644
index 0000000..3cbd216
--- /dev/null
+++ b/4.8.1/gentoo/30_all_arm_armv4-no-thumb-fix-link.patch
@@ -0,0 +1,54 @@
+From 73aa8c34427a4282930ca8667165d844ee698859 Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <vapier@gentoo.org>
+Date: Fri, 19 Apr 2013 16:32:28 -0400
+Subject: [PATCH] gcc: arm: linux-eabi: fix handling of armv4 bx fixups when
+ linking
+
+The bpabi.h header already sets up defines to automatically use the
+--fix-v4bx flag with the assembler & linker as needed, and creates a
+default assembly & linker spec which uses those. Unfortunately, the
+linux-eabi.h header clobbers the LINK_SPEC define and doesn't include
+the v4bx define when setting up its own. So while the assembler spec
+is retained and works fine to generate the right relocs, building for
+armv4 targets doesn't invoke the linker correctly so all the relocs
+get processed as if we had an armv4t target.
+
+You can see this with -dumpspecs when configuring gcc for an armv4
+target and using --with-arch=armv4:
+$ armv4l-unknown-linux-gnueabi-gcc -dumpspecs |& grep -B 1 fix-v4bx
+*subtarget_extra_asm_spec:
+.... %{mcpu=arm8|mcpu=arm810|mcpu=strongarm*|march=armv4|mcpu=fa526|mcpu=fa626:--fix-v4bx} ...
+
+With this fix in place, we also get the link spec:
+$ armv4l-unknown-linux-gnueabi-gcc -dumpspecs |& grep -B 1 fix-v4bx
+*link:
+... %{mcpu=arm8|mcpu=arm810|mcpu=strongarm*|march=armv4|mcpu=fa526|mcpu=fa626:--fix-v4bx} ...
+
+And all my hello world tests / glibc builds automatically turn the
+bx insn into the 'mov pc, lr' insn and all is right in the world.
+
+Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+
+2013-04-19 Mike Frysinger <vapier@gentoo.org>
+
+ * config/arm/linux-eabi.h (LINK_SPEC): Add TARGET_FIX_V4BX_SPEC.
+---
+ gcc/config/arm/linux-eabi.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gcc/config/arm/linux-eabi.h b/gcc/config/arm/linux-eabi.h
+index 4a425c8..8b7ebb2 100644
+--- a/gcc/config/arm/linux-eabi.h
++++ b/gcc/config/arm/linux-eabi.h
+@@ -80,7 +80,7 @@
+ /* At this point, bpabi.h will have clobbered LINK_SPEC. We want to
+ use the GNU/Linux version, not the generic BPABI version. */
+ #undef LINK_SPEC
+-#define LINK_SPEC BE8_LINK_SPEC \
++#define LINK_SPEC TARGET_FIX_V4BX_SPEC BE8_LINK_SPEC \
+ LINUX_OR_ANDROID_LD (LINUX_TARGET_LINK_SPEC, \
+ LINUX_TARGET_LINK_SPEC " " ANDROID_LINK_SPEC)
+
+--
+1.8.2.1
+