Hi, On Mon, Oct 18, 2021 at 04:07:12PM +0200, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@xxxxxxxx> > > Naresh and Antonio ran into a build failure with latest Debian > armhf compilers, with lots of output like > > tmp/ccY3nOAs.s:2215: Error: selected processor does not support `cpsid i' in ARM mode > > As it turns out, $(cc-option) fails early here when the FPU is not > selected before CPU architecture is selected, as the compiler > option check runs before enabling -msoft-float, which causes > a problem when testing a target architecture level without an FPU: > > cc1: error: '-mfloat-abi=hard': selected architecture lacks an FPU > > Passing e.g. -march=armv6k+fp in place of -march=armv6k would avoid this > issue, but the fallback logic is already broken because all supported > compilers (gcc-5 and higher) are much more recent than these options, > and building with -march=armv5t as a fallback no longer works. > > The best way forward that I see is to just remove all the checks, which > also has the nice side-effect of slightly improving the startup time for > 'make'. > > The -mtune=marvell-f option was apparently never supported by any mainline > compiler, and the custom Codesourcery gcc build that did support is > now too old to build kernels, so just use -mtune=xscale unconditionally > for those. > > This should be safe to apply on all stable kernels, and will be required > in order to keep building them with gcc-11 and higher. > > Reported-by: Antonio Terceiro <antonio.terceiro@xxxxxxxxxx> > Reported-by: Naresh Kamboju <naresh.kamboju@xxxxxxxxxx> > Reported-by: Sebastian Andrzej Siewior <sebastian@xxxxxxxxxxxxx> > Link: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=996419 > Cc: Matthias Klose <doko@xxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> > --- Thanks, I ran into this issue after affected gcc release migrated to Debian testing. The patch makes the kernel compile again: Tested-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx> Would be great if this could become part of 5.16-rc1, which is usually used as base by subsystem maintainers. Thanks, -- Sebastian > arch/arm/Makefile | 22 +++++++++++----------- > 1 file changed, 11 insertions(+), 11 deletions(-) > > diff --git a/arch/arm/Makefile b/arch/arm/Makefile > index 847c31e7c368..fa45837b8065 100644 > --- a/arch/arm/Makefile > +++ b/arch/arm/Makefile > @@ -60,15 +60,15 @@ KBUILD_CFLAGS += $(call cc-option,-fno-ipa-sra) > # Note that GCC does not numerically define an architecture version > # macro, but instead defines a whole series of macros which makes > # testing for a specific architecture or later rather impossible. > -arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m -Wa,-march=armv7-m > -arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 $(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a) > -arch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6) > +arch-$(CONFIG_CPU_32v7M) =-D__LINUX_ARM_ARCH__=7 -march=armv7-m > +arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 -march=armv7-a > +arch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 -march=armv6 > # Only override the compiler option if ARMv6. The ARMv6K extensions are > # always available in ARMv7 > ifeq ($(CONFIG_CPU_32v6),y) > -arch-$(CONFIG_CPU_32v6K) =-D__LINUX_ARM_ARCH__=6 $(call cc-option,-march=armv6k,-march=armv5t -Wa$(comma)-march=armv6k) > +arch-$(CONFIG_CPU_32v6K) =-D__LINUX_ARM_ARCH__=6 -march=armv6k > endif > -arch-$(CONFIG_CPU_32v5) =-D__LINUX_ARM_ARCH__=5 $(call cc-option,-march=armv5te,-march=armv4t) > +arch-$(CONFIG_CPU_32v5) =-D__LINUX_ARM_ARCH__=5 -march=armv5te > arch-$(CONFIG_CPU_32v4T) =-D__LINUX_ARM_ARCH__=4 -march=armv4t > arch-$(CONFIG_CPU_32v4) =-D__LINUX_ARM_ARCH__=4 -march=armv4 > arch-$(CONFIG_CPU_32v3) =-D__LINUX_ARM_ARCH__=3 -march=armv3m > @@ -82,7 +82,7 @@ tune-$(CONFIG_CPU_ARM720T) =-mtune=arm7tdmi > tune-$(CONFIG_CPU_ARM740T) =-mtune=arm7tdmi > tune-$(CONFIG_CPU_ARM9TDMI) =-mtune=arm9tdmi > tune-$(CONFIG_CPU_ARM940T) =-mtune=arm9tdmi > -tune-$(CONFIG_CPU_ARM946E) =$(call cc-option,-mtune=arm9e,-mtune=arm9tdmi) > +tune-$(CONFIG_CPU_ARM946E) =-mtune=arm9e > tune-$(CONFIG_CPU_ARM920T) =-mtune=arm9tdmi > tune-$(CONFIG_CPU_ARM922T) =-mtune=arm9tdmi > tune-$(CONFIG_CPU_ARM925T) =-mtune=arm9tdmi > @@ -90,11 +90,11 @@ tune-$(CONFIG_CPU_ARM926T) =-mtune=arm9tdmi > tune-$(CONFIG_CPU_FA526) =-mtune=arm9tdmi > tune-$(CONFIG_CPU_SA110) =-mtune=strongarm110 > tune-$(CONFIG_CPU_SA1100) =-mtune=strongarm1100 > -tune-$(CONFIG_CPU_XSCALE) =$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale > -tune-$(CONFIG_CPU_XSC3) =$(call cc-option,-mtune=xscale,-mtune=strongarm110) -Wa,-mcpu=xscale > -tune-$(CONFIG_CPU_FEROCEON) =$(call cc-option,-mtune=marvell-f,-mtune=xscale) > -tune-$(CONFIG_CPU_V6) =$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm) > -tune-$(CONFIG_CPU_V6K) =$(call cc-option,-mtune=arm1136j-s,-mtune=strongarm) > +tune-$(CONFIG_CPU_XSCALE) =-mtune=xscale > +tune-$(CONFIG_CPU_XSC3) =-mtune=xscale > +tune-$(CONFIG_CPU_FEROCEON) =-mtune=xscale > +tune-$(CONFIG_CPU_V6) =-mtune=arm1136j-s > +tune-$(CONFIG_CPU_V6K) =-mtune=arm1136j-s > > # Evaluate tune cc-option calls now > tune-y := $(tune-y) > -- > 2.29.2 >
Attachment:
signature.asc
Description: PGP signature