[U-Boot] [PATCH 2/2] arm: work around assembler bug
Graeme Russ
graeme.russ at gmail.com
Tue Jul 10 07:13:47 CEST 2012
Hi Martin,
On Tue, Jul 10, 2012 at 3:08 PM, Allen Martin <amartin at nvidia.com> wrote:
> 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)
y instead of yes
> +ifeq ($(GAS_BUG_12532),yes)
So:
ifeq ($(GAS_BUG_12532),y)
is more consistent
> +$(warning *** disabling sibling call optimzation because binutils version < 2.22)
Maybe add 'code size will be (slightly) larger'
> +endif
> +endif
> +ifeq ($(GAS_BUG_12532),yes)
> +PLATFORM_RELFLAGS += -fno-optimize-sibling-calls
> +endif
> +endif
> --
> 1.7.9.5
>
Regards,
Graeme
More information about the U-Boot
mailing list