[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC] Unable to use qemu-ppc to run 32-bit powerpc executables gener
From: |
Pierre Muller |
Subject: |
Re: [RFC] Unable to use qemu-ppc to run 32-bit powerpc executables generated on gcc110 machine |
Date: |
Fri, 12 Aug 2022 09:03:16 +0200 |
User-agent: |
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.1.2 |
Le 12/08/2022 à 06:16, Thomas Huth a écrit :
On 11/08/2022 23.38, Pierre Muller wrote:
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
[...]
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?
So you are building on a POWER7 host and try to run the binaries on an
emulated G2? That sounds weird. Why don't you use
The g2 was just an example, I used a script to iterate
over all possible cpus (as listed by --cpu help),
but I always get a Illegal instruction on xllxor,
because none of the cpu in the least seems to enable VSX
extension.
qemu-ppc64 -cpu power7 ...
Because I am interested in testing 32-bit ELF binaries:
muller@gcc186:~/pas/check$ file ./twide1
./twide1: ELF 32-bit MSB executable, PowerPC or cisco 4500, version 1 (SYSV),
dynamically linked, interpreter /lib/ld.so.1, stripped
muller@gcc186:~/pas/check$ qemu-ppc64 -cpu power7 ./twide1
-bash: qemu-ppc64: command not found
muller@gcc186:~/pas/check$ ~/sys-root/bin/qemu-ppc64 -cpu power7 ./twide1
qemu-ppc64: ./twide1: Invalid ELF image for this architecture
muller@gcc186:~/pas/check$ ~/sys-root/bin/qemu-ppc64 --version
qemu-ppc64 version 7.0.0
Copyright (c) 2003-2022 Fabrice Bellard and the QEMU Project developers
muller@gcc186:~/pas/check$ ~/gnu/qemu/build-qemu-7.1.0-rc2/qemu-ppc64 -cpu
power7 ./twide1
qemu-ppc64: ./twide1: Invalid ELF image for this architecture
So qemu-ppc64 (7.0.0 and 7.1.0-rc2) is only able to run 64-bit binaries.
Pierre