[PATCH] ARM: makefile: work around toolchain bug in recent versions of binutils

Will Deacon will.deacon at arm.com
Thu Aug 2 11:01:23 EDT 2012


Hi Russell,

On Thu, Aug 02, 2012 at 02:04:11PM +0100, Russell King - ARM Linux wrote:
> On Thu, Aug 02, 2012 at 01:23:26PM +0100, Will Deacon wrote:
> > Recent upstream versions of binutils fail to assembler compressed/head.S
> > when passed the -march=all option:
> > 
> > http://lists.gnu.org/archive/html/bug-binutils/2011-04/msg00162.html
> > 
> > The recommended workaround from the tools folks is not to pass the
> > option, and instead let the assembler deduce the CPU type based on the
> > features used by the code.
> 
> That doesn't work for all binutils - binutils historically has had to be
> told explicitly what architecture its building for and won't "deduce"
> it from the code.

Damn. I thought there would be a reason why we passed the option in the
first place.

> Maybe this needs to be a build-time test whether the assembler accepts it?

That could be tricky since gas still accepts the option, but fails later
with:

arch/arm/boot/compressed/head.S: Assembler messages:
arch/arm/boot/compressed/head.S:127: Error: selected processor does not support requested special purpose register -- `mrs r2,cpsr'
arch/arm/boot/compressed/head.S:134: Error: selected processor does not support requested special purpose register -- `mrs r2,cpsr'
arch/arm/boot/compressed/head.S:136: Error: selected processor does not support requested special purpose register -- `msr cpsr_c,r2'

How about grabbing the march from KBUILD_AFLAGS instead (see below)?

Will

---8<---

diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
index bb26756..3774f0d 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -126,7 +126,7 @@ KBUILD_CFLAGS = $(subst -pg, , $(ORIG_CFLAGS))
 endif
 
 ccflags-y := -fpic -fno-builtin -I$(obj)
-asflags-y := -Wa,-march=all
+asflags-y := -Wa,$(lastword $(filter -march=%,$(KBUILD_AFLAGS)))
 
 # Supply kernel BSS size to the decompressor via a linker symbol.
 KBSS_SZ = $(shell $(CROSS_COMPILE)size $(obj)/../../../../vmlinux | \




More information about the linux-arm-kernel mailing list