On Tue, Dec 13, 2022 at 10:02:38PM +0100, Pali Rohár wrote: > Vagrant and Aurelien, could you test if this change fully fixes your > Debian issue? > > Tom, do you have any opinion for this change? It should help building > with binutils 2.38.
I have both of your toolchain flag patches in my queue to not forget for v2023.01. > > On Sunday 11 December 2022 15:12:04 Pali Rohár wrote: > > When gcc's default cpu (selected by --with-cpu= during gcc's configure > > phase) does not match target u-boot board cpu then u-boot binary does not > > have to be compiled correctly. Lot of distributions sets gcc's default cpu > > to generic powerpc variant which works fine. > > > > U-Boot already pass -Wa,-me500 flag to gcc which instructs GNU AS to accept > > e500 specific instructions when processing assembler source files (.S). > > > > This affects also assembly files generated by gcc from C source files. And > > because gcc for generic powerpc cpu puts '.machine ppc' at the beginning of > > the generated assembly file, it basically overwrites -me500 flag by which > > was GNU AS invoked (from U-boot build system). > > > > It started to be an issue since binutils 2.38 which does not keep enabled > > extra functional units selected by previous cpu. Hence issuing directive > > '.machine ppc' (generated by gcc for generic powerpc) after '.machine e500' > > (specifying at command line) disables usage of e500 specific instructions. > > > > And compiling arch/powerpc/cpu/mpc85xx/tlb.c code throws following > > assembler errors: > > > > {standard input}: Assembler messages: > > {standard input}:127: Error: unrecognized opcode: `tlbre' > > {standard input}:418: Error: unrecognized opcode: `tlbre' > > {standard input}:821: Error: unrecognized opcode: `msync' > > {standard input}:821: Error: unrecognized opcode: `tlbwe' > > {standard input}:884: Error: unrecognized opcode: `tlbsx' > > > > This issue was already hit by Debian people and is reported in bug tracker: > > https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003490 > > > > Calling gcc with -mcpu=8540 flag fixes this issue because -mcpu=8540 tells > > gcc to compile code for e500 core/cpu (overwriting gcc's default cpu) and > > does not put '.machine ppc' directive into assembly anymore. > > > > Also if gcc is invoked with -mpcu=8540 then it pass -me500 flag to GNU AS. > > So it is needed to specify -Wa,-me500 flag because it is implicitly added. > > > > Fix this issue properly by specifying correct -mcpu compiler flag for all > > supported powerpc cores in U-Boot mpc85xx platform, which are: e500v1, > > e500v2, e500mc, e5500 and e6500. For specifying e500v1 and e500v2 cores, > > gcc has unintuitive -mcpu=8540 flag name, for other cores -mcpu matches > > core name. > > > > Older gcc versions (up to gcc 8) had also -mcpu=8548 flag for specifying > > e500v2 cores but the only difference between -mcpu=8540 and -mcpu=8548 was > > HW support of double precision floating point. So it is fine to use > > -mcpu=8540 for both e500v1 and e500v2 cores as u-boot does not use floating > > point arithmetic. > > > > Note that U-Boot's CONFIG_E500 option is set also for other cpus, not only > > for e500v1 and e500v2. So do not check for CONFIG_E500 and rather set e500 > > as last fallback value when no other mpc85xx cpu matches. > > > > Signed-off-by: Pali Rohár <p...@kernel.org> > > --- > > arch/powerpc/cpu/mpc85xx/config.mk | 12 +++++++++++- > > 1 file changed, 11 insertions(+), 1 deletion(-) > > > > diff --git a/arch/powerpc/cpu/mpc85xx/config.mk > > b/arch/powerpc/cpu/mpc85xx/config.mk > > index 7a1d81cf2d76..b6b5d2053aea 100644 > > --- a/arch/powerpc/cpu/mpc85xx/config.mk > > +++ b/arch/powerpc/cpu/mpc85xx/config.mk > > @@ -3,7 +3,7 @@ > > # (C) Copyright 2002,2003 Motorola Inc. > > # Xianghua Xiao, x.x...@motorola.com > > > > -PLATFORM_CPPFLAGS += -Wa,-me500 -msoft-float -mno-string > > +PLATFORM_CPPFLAGS += -msoft-float -mno-string > > PLATFORM_RELFLAGS += -msingle-pic-base -fno-jump-tables > > > > # -mspe=yes is needed to have -mno-spe accepted by a buggy GCC; > > @@ -11,3 +11,13 @@ PLATFORM_RELFLAGS += -msingle-pic-base -fno-jump-tables > > # http://gcc.gnu.org/ml/gcc-patches/2008-04/msg00311.html > > PLATFORM_CPPFLAGS += $(call cc-option,-mspe=yes) \ > > $(call cc-option,-mno-spe) > > + > > +ifdef CONFIG_E6500 > > +PLATFORM_CPPFLAGS += -mcpu=e6500 > > +else ifdef CONFIG_E5500 > > +PLATFORM_CPPFLAGS += -mcpu=e5500 > > +else ifdef CONFIG_E500MC > > +PLATFORM_CPPFLAGS += -mcpu=e500mc > > +else > > +PLATFORM_CPPFLAGS += -mcpu=8540 > > +endif > > -- > > 2.20.1 > > -- Tom
signature.asc
Description: PGP signature