[U-Boot] [PATCH v4 2/2] arm: work around assembler bug
Albert ARIBAUD
albert.u.boot at aribaud.net
Thu Oct 4 10:47:38 CEST 2012
Hi Allen,
On Wed, 18 Jul 2012 16:45:53 -0700, 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>
> ---
> changes for v4:
> -removed warning print
> 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 | 18 ++++++++++++++++++
> 1 file changed, 18 insertions(+)
>
> diff --git a/arch/arm/config.mk b/arch/arm/config.mk
> index 3f4453a..24b9d7c 100644
> --- a/arch/arm/config.mk
> +++ b/arch/arm/config.mk
> @@ -87,3 +87,21 @@ endif
> ifndef CONFIG_NAND_SPL
> LDFLAGS_u-boot += -pie
> endif
> +
> +#
> +# FIXME: 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)
> +endif
> +ifeq ($(GAS_BUG_12532),y)
> +PLATFORM_RELFLAGS += -fno-optimize-sibling-calls
> +endif
> +endif
Applied to u-boot-arm/master, thanks!
Amicalement,
--
Albert.
More information about the U-Boot
mailing list