[PATCH] powerpc/boot: Build wrapper for an appropriate CPU

Joel Stanley joel at jms.id.au
Wed Apr 6 17:08:06 AEST 2022


On Thu, 31 Mar 2022 at 23:46, Segher Boessenkool
<segher at kernel.crashing.org> wrote:
>
> On Thu, Mar 31, 2022 at 12:19:52PM -0300, Murilo Opsfelder Araújo wrote:
> > My understanding is that the default cpu type for -mcpu=powerpc64 can
> > change.
>
> Different subtargets (Linux, AIX, Darwin, the various BSDs, bare ELF,
> etc.) have different default CPUs.  It also can be set at configure time
> for most subtargets.
>
> Linux can be built with compilers not targetting *-linux*, so it would
> be best to specify a specific CPU always.
>
> > >I did a little test using my buildroot compiler which has
> > >with-cpu=power10. I used the presence of PCREL relocations as evidence
> > >that it was build for power10.
> > >
> > >$ powerpc64le-buildroot-linux-gnu-gcc -mcpu=power10 -c test.c
> > >$ readelf -r test.o |grep -c PCREL
> > >24
> >
> > It respected the -mcpu=power10 you provided.
>
> Of course.
>
> > And that's my concern.  We're relying on the compiler default cpu type.
>
> That is not the compiler default.  It is the default from who built the
> compiler.  It can vary wildly and unpredictably.
>
> The actual compiler default will not change so easily at all, basically
> only when its subtarget drops support for an older CPU.
>
> > If gcc defaults -mcpu=powerpc64le to power10, you're going to have
> > the same problem again.
>
> That will not happen before power10 is the minimum supported CPU.
> Anything else is madness.

Murilo, does Segher's explanation address your concerns?

I believe the patch I sent fixes the problem that you're worried
about. It should be compatible into the future too.

Cheers,

Joel

>
> > It happens that the power8 default cpu type
> > is compatible to your system by coincidence.
>
> No, power8 is (and always was) the minimum supported CPU type for
> powerpc64le-linux.
>
> > In gcc/config/rs6000/rs6000-cpus.def, they are set to different processors:
> >
> >     254 RS6000_CPU ("powerpc64", PROCESSOR_POWERPC64, MASK_PPC_GFXOPT |
> >     MASK_POWERPC64)
> >     255 RS6000_CPU ("powerpc64le", PROCESSOR_POWER8, MASK_POWERPC64 |
> >     ISA_2_7_MASKS_SERVER
>
> Those can and will change though, over time.  But -mcpu=powerpc64 (etc.)
> always will mean what the current documentation says it does:
>      '-mcpu=powerpc', '-mcpu=powerpc64', and '-mcpu=powerpc64le' specify
>      pure 32-bit PowerPC (either endian), 64-bit big endian PowerPC and
>      64-bit little endian PowerPC architecture machine types, with an
>      appropriate, generic processor model assumed for scheduling
>      purposes.
>
> > My suggestion was to explicitly set -mcpu=power8 instead of
> > -mcpu=powerpc64le.
>
> That is implied anyway, it is the minimum supported for
> powerpc64le-linux.  Using -mcpu=powerpc64le might schedule better for
> newer CPUs, in the future (but the code will always work on all still
> supported CPUs).
>
>
> Segher


More information about the Linuxppc-dev mailing list