qemu-user compiled static for ppc fails on 64bit hosts
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
QEMU |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
On debian I used debootstrap to set up a powerpc chroot. If I then copy in a statically linked qemu-user ppc binary it will work for some commands in the chroot and fail for others. Steps to reproduce:
host$ mkdir powerpc
host$ sudo debootstrap --arch=powerpc --foreign wheezy powerpc http://
host$ sudo cp /usr/bin/
host$ LANG=C sudo chroot powerpc /usr/bin/
I have no name!@guest:/# pwd
/
I have no name!@guest:/# cd home/
I have no name!@guest:/home# ls
qemu-ppc-static: /tmp/buildd/
I have also built this from the git HEAD sources (hash 6b80f7db8a7f84d
summary: |
- qemu-user compiled static for ppc fails + qemu-user compiled static for ppc fails on 64bit hosts |
I ran into this issue also and did a bit of investigating. This is only an issue when ran on a 64bit host. The actual problem line is
err |= __put_user( h2g(ka- >_sa_handler) , &sc->handler);
inside of linux_user/ signal. c. What I am unsure of is when the h2g() macro, the cause of the assert, is valid to be used. In this case, under 64bit, GUEST_BASE has a value (32bit it is 0) but ka->_sa_handler has a low value. Assuming that the low value is a direct result of being a guest address and not a host address then the h2g() shouldn't be called.
I removed the macro from that line which kept the assert from appearing but qemu still died after running 'ls'. I am attempting to fix this bug but I have limited understanding of qemu itself so no promises of me doing a fix, let alone a proper fix.