On Monday 19 December 2022 19:45:57 Christophe Leroy wrote: > Jan-Benedict reported issue with building ppc64e_defconfig > with mainline GCC work: > > powerpc64-linux-gcc -Wp,-MMD,arch/powerpc/kernel/vdso/.gettimeofday-64.o.d > -nostdinc -I./arch/powerpc/include -I./arch/powerpc/include/generated > -I./include -I./arch/powerpc/include/uapi > -I./arch/powerpc/include/generated/uapi -I./include/uapi > -I./include/generated/uapi -include ./include/linux/compiler-version.h > -include ./include/linux/kconfig.h -D__KERNEL__ -I ./arch/powerpc > -DHAVE_AS_ATHIGH=1 -fmacro-prefix-map=./= -D__ASSEMBLY__ -fno-PIE -m64 > -Wl,-a64 -mabi=elfv1 -Wa,-me500 -Wa,-me500mc -mabi=elfv1 -mbig-endian > -Wl,-soname=linux-vdso64.so.1 -D__VDSO64__ -s -c -o > arch/powerpc/kernel/vdso/gettimeofday-64.o > arch/powerpc/kernel/vdso/gettimeofday.S > arch/powerpc/kernel/vdso/gettimeofday.S: Assembler messages: > arch/powerpc/kernel/vdso/gettimeofday.S:72: Error: unrecognized opcode: > `stdu' > arch/powerpc/kernel/vdso/gettimeofday.S:72: Error: unrecognized opcode: > `stdu' > arch/powerpc/kernel/vdso/gettimeofday.S:72: Error: unrecognized opcode: > `std' > arch/powerpc/kernel/vdso/gettimeofday.S:72: Error: unrecognized opcode: > `std' > arch/powerpc/kernel/vdso/gettimeofday.S:72: Error: unrecognized opcode: > `ld' > arch/powerpc/kernel/vdso/gettimeofday.S:72: Error: unrecognized opcode: > `ld' > ... > make[1]: *** [arch/powerpc/kernel/vdso/Makefile:76: > arch/powerpc/kernel/vdso/gettimeofday-64.o] Error 1 > make: *** [arch/powerpc/Makefile:387: vdso_prepare] Error 2 > > This is due to assembler being called with -me500mc which is > a 32 bits target. > > The problem comes from the fact that CONFIG_PPC_E500MC is selected for > both the e500mc (32 bits) and the e5500 (64 bits), and therefore the > following makefile rule is wrong: > > cpu-as-$(CONFIG_PPC_E500MC) += $(call as-option,-Wa$(comma)-me500mc) > > Today we have CONFIG_TARGET_CPU which provides the identification of the > expected CPU, it is used for GCC. Once GCC knows the target CPU, it adds > the correct CPU option to assembler, no need to add it explicitely. > > With that change (And also commit 825eada7717c ("powerpc/64: Set > default CPU in Kconfig")), it now is: > > powerpc64-linux-gcc -Wp,-MMD,arch/powerpc/kernel/vdso/.gettimeofday-64.o.d > -nostdinc -I./arch/powerpc/include -I./arch/powerpc/include/generated > -I./include -I./arch/powerpc/include/uapi > -I./arch/powerpc/include/generated/uapi -I./include/uapi > -I./include/generated/uapi -include ./include/linux/compiler-version.h > -include ./include/linux/kconfig.h -D__KERNEL__ -I ./arch/powerpc > -DHAVE_AS_ATHIGH=1 -fmacro-prefix-map=./= -D__ASSEMBLY__ -fno-PIE -m64 > -Wl,-a64 -mabi=elfv1 -mcpu=e500mc64 -mabi=elfv1 -mbig-endian > -Wl,-soname=linux-vdso64.so.1 -D__VDSO64__ -s -c -o > arch/powerpc/kernel/vdso/gettimeofday-64.o > arch/powerpc/kernel/vdso/gettimeofday.S > > Reported-by: Jan-Benedict Glaw <jbg...@lug-owl.de> > Signed-off-by: Christophe Leroy <christophe.le...@csgroup.eu>
Acked-by: Pali Rohár <p...@kernel.org> > --- > v3: Remove -Wa,-mXXX completery as there are additional mismatches between > -mcpu and -Wa-m (eg: 8540 vs e500). When given the proper -mcpu=, GCC gives > the correct option to assembler. > > v2: When target cpu is powerpc, the option to be used is -mppc > > Commit 825eada7717c is in powerpc/next-test branch. Make sure the SHA doesn't > change when it goes into powerpc/next > --- > arch/powerpc/Makefile | 6 +----- > 1 file changed, 1 insertion(+), 5 deletions(-) > > diff --git a/arch/powerpc/Makefile b/arch/powerpc/Makefile > index bf5f0a998273..0f9f291895cb 100644 > --- a/arch/powerpc/Makefile > +++ b/arch/powerpc/Makefile > @@ -201,18 +201,14 @@ KBUILD_CFLAGS += -fno-asynchronous-unwind-tables > # often slow when they are implemented at all > KBUILD_CFLAGS += $(call cc-option,-mno-string) > > -cpu-as-$(CONFIG_40x) += -Wa,-m405 > -cpu-as-$(CONFIG_44x) += -Wa,-m440 > cpu-as-$(CONFIG_ALTIVEC) += $(call as-option,-Wa$(comma)-maltivec) > -cpu-as-$(CONFIG_PPC_E500) += -Wa,-me500 > > # When using '-many -mpower4' gas will first try and find a matching power4 > # mnemonic and failing that it will allow any valid mnemonic that GAS knows > # about. GCC will pass -many to GAS when assembling, clang does not. > # LLVM IAS doesn't understand either flag: > https://github.com/ClangBuiltLinux/linux/issues/675 > # but LLVM IAS only supports ISA >= 2.06 for Book3S 64 anyway... > -cpu-as-$(CONFIG_PPC_BOOK3S_64) += $(call > as-option,-Wa$(comma)-mpower4) $(call as-option,-Wa$(comma)-many) > -cpu-as-$(CONFIG_PPC_E500MC) += $(call as-option,-Wa$(comma)-me500mc) > +cpu-as-$(CONFIG_PPC_BOOK3S_64) += $(call as-option,-Wa$(comma)-many) > > KBUILD_AFLAGS += $(cpu-as-y) > KBUILD_CFLAGS += $(cpu-as-y) > -- > 2.38.1 >