I am using qemu to check code generated by Free Pascal compiler
for various CPUs.

  Recently, this allowed me to find out that Free Pascal was generating
wrong instructions, leading to SIGBUS errors using qemu-mips.
  The same binaries worked without troubles on mips test machines,
probably because SIGBUS is handled directly inside the kernel.

  Here I would like to report the problem I get when trying to run
powerpc executables using shared libs generated on gcc110 machine.

  I copied over the needed libraries into a sys-root directory.

  The problem is that the code crashes with a Illegal Instruction
after only a very few instructions:

muller@gcc186:~/pas/check$ ~/sys-root/bin/qemu-ppc -cpu g2 -d in_asm -L 
~/sys-root/powerpc-linux ./twide1
----------------
IN: _start
0x3ffda784:  7c230b78  mr       r3, r1
0x3ffda788:  38800000  li       r4, 0
0x3ffda78c:  3821fff0  addi     r1, r1, -0x10
0x3ffda790:  90810000  stw      r4, 0(r1)
0x3ffda794:  4bfe756d  bl       0x3ffc1d00

----------------
IN: _dl_start
0x3ffc1d00:  9421fd40  stwu     r1, -0x2c0(r1)
0x3ffc1d04:  7c0802a6  mflr     r0
0x3ffc1d08:  429f0005  bdnzl    0x3ffc1d0c

----------------
IN: _dl_start
0x3ffc1d0c:  93c102b8  stw      r30, 0x2b8(r1)
0x3ffc1d10:  938102b0  stw      r28, 0x2b0(r1)
0x3ffc1d14:  92e1029c  stw      r23, 0x29c(r1)
0x3ffc1d18:  930102a0  stw      r24, 0x2a0(r1)
0x3ffc1d1c:  7fc802a6  mflr     r30
0x3ffc1d20:  932102a4  stw      r25, 0x2a4(r1)
0x3ffc1d24:  934102a8  stw      r26, 0x2a8(r1)
0x3ffc1d28:  936102ac  stw      r27, 0x2ac(r1)
0x3ffc1d2c:  900102c4  stw      r0, 0x2c4(r1)
0x3ffc1d30:  93a102b4  stw      r29, 0x2b4(r1)
0x3ffc1d34:  93e102bc  stw      r31, 0x2bc(r1)
0x3ffc1d38:  7c7c1b78  mr       r28, r3
0x3ffc1d3c:  3fde0004  addis    r30, r30, 4
0x3ffc1d40:  3bded2d0  addi     r30, r30, -0x2d30
0x3ffc1d44:  7d4d42a6  mfspr    r10, 0x10d
0x3ffc1d48:  7d2c42a6  mfspr    r9, 0x10c
0x3ffc1d4c:  7d0d42a6  mfspr    r8, 0x10d
0x3ffc1d50:  7c0a4000  cmpw     r10, r8
0x3ffc1d54:  4082fff0  bne      0x3ffc1d44

----------------
IN: _dl_start
0x3ffc1d58:  91410268  stw      r10, 0x268(r1)
0x3ffc1d5c:  38e00013  li       r7, 0x13
0x3ffc1d60:  f00004d7  xxlxor   v0, v0, v0

qemu: uncaught target signal 4 (Illegal instruction) - core dumped

The problem is the the 'xxlxor' instruction is a VSX extension instruction.

 There is apparently no cpu in the powerpc cpu list that enabled this extension.
The output of cat /proc/cpuinfo on gcc110 gives that:
.....
processor       : 63
cpu             : POWER7 (architected), altivec supported
clock           : 3550.000000MHz
revision        : 2.1 (pvr 003f 0201)

timebase        : 512000000
platform        : pSeries
model           : IBM,8231-E2B
machine         : CHRP IBM,8231-E2B

  Is there a way to enable cpu features separately for ppc like is done for 
x86_64?
Or would it be possible to define a new cpu inside qemu source that would match
the description above?

 Pierre Muller

Reply via email to