Bug#823526: linux: FTBFS on powerpcspe due to the use of unsupported instructions
On Thu, May 05, 2016 at 06:59:33PM +0200, John Paul Adrian Glaubitz wrote:
> Source: linux
> Version: 4.5.2-1
> Severity: normal
> User: debian-powerpc@lists.debian.org
> Usertags: powerpcspe
>
> Hi!
>
> linux currently fails to build from source on powerpcspe since the compiler
> is using FPU instructions which are not available on the e500v2 CPUs [1,2]:
>
> {standard input}: Assembler messages:
> {standard input}:2227: Error: unrecognized opcode: `ldarx'
> {standard input}:2274: Error: unrecognized opcode: `stdcx.'
> /<<PKGBUILDDIR>>/scripts/Makefile.build:263: recipe for target 'arch/powerpc/lib/sstep.o' failed
> make[6]: *** [arch/powerpc/lib/sstep.o] Error 1
> /<<PKGBUILDDIR>>/Makefile:954: recipe for target 'arch/powerpc/lib' failed
> make[5]: *** [arch/powerpc/lib] Error 2
> make[5]: *** Waiting for unfinished jobs....
>
> Looking at arch/powerpc/lib/sstep.c, there are actually #ifdefs for the CONFIG_PPC_FPU,
> however, it seems there is no way of manually setting CONFIG_PPC_FPU in the kernel
> configuration. I assume, this is done by choosing a certain type of PowerPC hardware.
>
> In any case, version 3.16.7 still builds fine [3], so this is a regression either
> way. Although we currently have to use a custom kernel for our e500v2 boards
> anyway, it's still desirable to fix any build issues with the kernel package
> on powerpcspe.
Doing this seems to agree:
objdump -d arch/powerpc/lib/sstep.o | grep ldarx
1f0c: 7f 80 e0 a8 ldarx r28,0,r28
objdump -d arch/powerpc/lib/sstep.o -M 603| grep 1f0c:
1f0c: 7f 80 e0 a8 .long 0x7f80e0a8
And similarly for:
objdump -d arch/powerpc/lib/sstep.o |grep stdcx
1f78: 7d 40 e1 ad stdcx. r10,0,r28
objdump -d arch/powerpc/lib/sstep.o -M 603 |grep 1f78:
1f78: 7d 40 e1 ad .long 0x7d40e1ad
Going through the list of machine types in objdump I see:
ldarx invalid:
403, 405, 440, 464, 476, 601, 603, 604, 7400, 7410, 7450, 7455, 750cl,
ppcps, pwr, pwr2, booke, booke32, com, e300, e500, e500mc, e500x2, efs,
ppc, ppc32, pwrx, titan
ldarx valid:
a2, altivec, any, cell, e500mc64, e5500, e6500, power4, power5, power6,
power7, power8, ppc64, ppc64bridge, pwr4, pwr5, pwr5x, pwr6, pwr7, pwr8,
spe, vle, vsx, htm, 32, 64, 620
So that seems to agree with IBM
https://www.google.ca/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwjr-5rO1cPMAhXMyRoKHd3fBTUQFggbMAA&url=https%3A%2F%2Fwww.ibm.com%2Fsupport%2Fknowledgecenter%2Fssw_aix_53%2Fcom.ibm.aix.aixassem%2Fdoc%2Falangref%2Fldarx.htm&usg=AFQjCNF1n3feBCinAC3RjBJy81zCYBES7Q&bvm=bv.121099550,d.d2s
saying ldarx is only to be used in 64 bit mode on a 64 bit powerpc.
--
Len Sorensen
Reply to: