All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v3 2/2] arm: work around assembler bug
  2012-07-10 19:05 [U-Boot] [PATCH v3 1/2] tools, config.mk: add binutils-version Allen Martin
@ 2012-07-10 19:05 ` Allen Martin
  0 siblings, 0 replies; 4+ messages in thread
From: Allen Martin @ 2012-07-10 19:05 UTC (permalink / raw)
  To: u-boot

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@nvidia.com>
---
changes for v3:
 -split shell line to improve readability
changes for v2:
 -changed GAS_BUG_12532 from yes/no to y/n to be consistent
 -added additional warning about code size increase
---
 arch/arm/config.mk |   22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/arch/arm/config.mk b/arch/arm/config.mk
index 3f4453a..afa6769 100644
--- a/arch/arm/config.mk
+++ b/arch/arm/config.mk
@@ -87,3 +87,25 @@ 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 y; else echo n; fi)
+ifeq ($(GAS_BUG_12532),y)
+$(warning *** disabling sibling call optimzation because binutils version < 2.22)
+$(warning *** code size may be slightly larger)
+endif
+endif
+ifeq ($(GAS_BUG_12532),y)
+PLATFORM_RELFLAGS += -fno-optimize-sibling-calls
+endif
+endif
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [U-Boot] [PATCH v3 1/2] tools, config.mk: add binutils-version
@ 2012-07-18 23:37 Allen Martin
  2012-07-18 23:37 ` [U-Boot] [PATCH v3 2/2] arm: work around assembler bug Allen Martin
  0 siblings, 1 reply; 4+ messages in thread
From: Allen Martin @ 2012-07-18 23:37 UTC (permalink / raw)
  To: u-boot

Modeled after gcc-version, add function to get binutils version.

Signed-off-by: Allen Martin <amartin@nvidia.com>
---
 config.mk                 |    1 +
 tools/binutils-version.sh |   20 ++++++++++++++++++++
 2 files changed, 21 insertions(+)
 create mode 100755 tools/binutils-version.sh

diff --git a/config.mk b/config.mk
index 3dcea6a..919b77d 100644
--- a/config.mk
+++ b/config.mk
@@ -128,6 +128,7 @@ endif
 # cc-version
 # Usage gcc-ver := $(call cc-version)
 cc-version = $(shell $(SHELL) $(SRCTREE)/tools/gcc-version.sh $(CC))
+binutils-version = $(shell $(SHELL) $(SRCTREE)/tools/binutils-version.sh $(AS))
 
 #
 # Include the make variables (CC, etc...)
diff --git a/tools/binutils-version.sh b/tools/binutils-version.sh
new file mode 100755
index 0000000..d4d9eb4
--- /dev/null
+++ b/tools/binutils-version.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# binutils-version [-p] gas-command
+#
+# Prints the binutils version of `gas-command' in a canonical 4-digit form
+# such as `0222' for binutils 2.22
+#
+
+gas="$*"
+
+if [ ${#gas} -eq 0 ]; then
+	echo "Error: No assembler specified."
+	printf "Usage:\n\t$0 <gas-command>\n"
+	exit 1
+fi
+
+MAJOR=$($gas --version | head -1 | awk '{print $NF}' | cut -d . -f 1)
+MINOR=$($gas --version | head -1 | awk '{print $NF}' | cut -d . -f 2)
+
+printf "%02d%02d\\n" $MAJOR $MINOR
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [U-Boot] [PATCH v3 2/2] arm: work around assembler bug
  2012-07-18 23:37 [U-Boot] [PATCH v3 1/2] tools, config.mk: add binutils-version Allen Martin
@ 2012-07-18 23:37 ` Allen Martin
  2012-07-18 23:41   ` Allen Martin
  0 siblings, 1 reply; 4+ messages in thread
From: Allen Martin @ 2012-07-18 23:37 UTC (permalink / raw)
  To: u-boot

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@nvidia.com>
---
changes for v3:
 -removed warning print
changes for v2:
 -changed GAS_BUG_12532 from yes/no to y/n to be consistent
 -added additional warning about code size increase
---
 arch/arm/config.mk |   22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/arch/arm/config.mk b/arch/arm/config.mk
index 3f4453a..afa6769 100644
--- a/arch/arm/config.mk
+++ b/arch/arm/config.mk
@@ -87,3 +87,25 @@ 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 y; else echo n; fi)
+ifeq ($(GAS_BUG_12532),y)
+$(warning *** disabling sibling call optimzation because binutils version < 2.22)
+$(warning *** code size may be slightly larger)
+endif
+endif
+ifeq ($(GAS_BUG_12532),y)
+PLATFORM_RELFLAGS += -fno-optimize-sibling-calls
+endif
+endif
-- 
1.7.9.5

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [U-Boot] [PATCH v3 2/2] arm: work around assembler bug
  2012-07-18 23:37 ` [U-Boot] [PATCH v3 2/2] arm: work around assembler bug Allen Martin
@ 2012-07-18 23:41   ` Allen Martin
  0 siblings, 0 replies; 4+ messages in thread
From: Allen Martin @ 2012-07-18 23:41 UTC (permalink / raw)
  To: u-boot

Sorry I screwed this patch up, please ignore, I'll resend in a minute

-Allen
-- 
nvpublic

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-07-18 23:41 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-18 23:37 [U-Boot] [PATCH v3 1/2] tools, config.mk: add binutils-version Allen Martin
2012-07-18 23:37 ` [U-Boot] [PATCH v3 2/2] arm: work around assembler bug Allen Martin
2012-07-18 23:41   ` Allen Martin
  -- strict thread matches above, loose matches on Subject: below --
2012-07-10 19:05 [U-Boot] [PATCH v3 1/2] tools, config.mk: add binutils-version Allen Martin
2012-07-10 19:05 ` [U-Boot] [PATCH v3 2/2] arm: work around assembler bug Allen Martin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.