* [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 1/2] tools, config.mk: add binutils-version
@ 2012-07-10 19:05 Allen Martin
2012-07-10 19:05 ` [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-10 19:05 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 c239f23..fa5e626 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-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
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.