[U-Boot] [PATCH 2/2] arm: work around assembler bug
Allen Martin
amartin at nvidia.com
Tue Jul 10 07:08:18 CEST 2012
Disable sibling call optimization based on binutils version. This is
to work around a bug in the assember in binutils versions < 2.22.
Branches to weak symbols can be incorrectly optimized in thumb mode to
a short branch (b.n instruction) that won't reach when the symbol gets
preempted.
http://sourceware.org/bugzilla/show_bug.cgi?id=12532
Signed-off-by: Allen Martin <amartin at nvidia.com>
---
arch/arm/config.mk | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/arch/arm/config.mk b/arch/arm/config.mk
index 3f4453a..1ba9d75 100644
--- a/arch/arm/config.mk
+++ b/arch/arm/config.mk
@@ -87,3 +87,23 @@ endif
ifndef CONFIG_NAND_SPL
LDFLAGS_u-boot += -pie
endif
+
+#
+# binutils versions < 2.22 have a bug in the assembler where branches
+# to weak symbols can be incorrectly optimized in thumb mode to a
+# short branch (b.n instruction) that won't reach when the symbol
+# gets preempted
+#
+# http://sourceware.org/bugzilla/show_bug.cgi?id=12532
+#
+ifeq ($(CONFIG_SYS_THUMB_BUILD),y)
+ifeq ($(GAS_BUG_12532),)
+export GAS_BUG_12532:=$(shell if [ $(call binutils-version) -lt 0222 ] ; then echo yes; else echo no; fi)
+ifeq ($(GAS_BUG_12532),yes)
+$(warning *** disabling sibling call optimzation because binutils version < 2.22)
+endif
+endif
+ifeq ($(GAS_BUG_12532),yes)
+PLATFORM_RELFLAGS += -fno-optimize-sibling-calls
+endif
+endif
--
1.7.9.5
More information about the U-Boot
mailing list