[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: