Hi Martin, On Tue, Jul 10, 2012 at 3:08 PM, Allen Martin <amar...@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 <amar...@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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot