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