| Submitter | Allen Martin |
|---|---|
| Date | July 18, 2012, 11:45 p.m. |
| Message ID | <1342655153-9023-2-git-send-email-amartin@nvidia.com> |
| Download | mbox | patch |
| Permalink | /patch/171856/ |
| State | Accepted |
| Delegated to: | Albert ARIBAUD |
| Headers | show |
Comments
Hi Allen, On Wed, 18 Jul 2012 16:45:53 -0700, Allen Martin <amartin@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@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 Can previous reviewers ack or test this? I would like to have it in the ARM master branch in time for 12.07. Amicalement,
On 07/18/2012 11:06 PM, Albert ARIBAUD wrote: > Hi Allen, > > On Wed, 18 Jul 2012 16:45:53 -0700, Allen Martin <amartin@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@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 > > Can previous reviewers ack or test this? I would like to have it in the ARM > master branch in time for 12.07. Acked-by: Tom Rini <trini@ti.com>
On Thu, Jul 19, 2012 at 08:08:31AM -0700, Tom Rini wrote: > On 07/18/2012 11:06 PM, Albert ARIBAUD wrote: > > Hi Allen, > > > > On Wed, 18 Jul 2012 16:45:53 -0700, Allen Martin <amartin@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@nvidia.com> > > Can previous reviewers ack or test this? I would like to have it in the ARM > > master branch in time for 12.07. > > Acked-by: Tom Rini <trini@ti.com> Hi Albert, just checking on the status of applying this to u-boot-arm. I have a patch series to enable thumb for tegra that needs this. I'll probably just keep a copy of this in that series until it goes in. thanks, -Allen
Hi Allen, On Wed, 18 Jul 2012 16:45:53 -0700, Allen Martin <amartin@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@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,
Patch
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
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 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(+)