older programs running under qemu-aarch64 segfaults
Host environment
- Operating system: Linux
- OS/kernel version: Debian Bookworm, 6.1.0-10-amd64
- Architecture: amd64
- QEMU flavor: qemu-aarch64[-static]
- QEMU version: 8.1.0-rc2
- QEMU command line: ./qemu-aarch64 /bin/ls
Emulated/Virtualized environment
- Operating system: Debian Jessie, Ubuntu Xenial, ...
- Architecture: aarch64
Description of problem
Numerous aarch64 programs segfaults when run under qemu-aarch64.
Steps to reproduce
- Install an arm64 chroot (with working qemu-aarch64 binfmt_misc setup):
debootstrap --variant=minbase --arch=arm64 jessie /tmp/jessie-arm64/ http://archive.debian.org/debian
or
debootstrap --variant=minbase --arch=arm64 xenial /tmp/xenial-arm64/ http://ports.ubuntu.com/
- build qemu-aarch64; cp qemu-aarch64 /tmp/jessie-arm64/
- chroot /tmp/jessie-arm64/
- ./qemu-aarch64 /bin/ls
qemu: uncaught target signal 11 (Segmentation fault) - core dumped
Segmentation fault
Additional information
Old userspace (eg Debian jessie, Ubuntu xenial) does not work within qemu 8.1-rc2 aarch64 linux-user emulation, since commit 59b6b42c . My guess is that old userspace isn't prepared for recent CPU features, but it still smells strange.
Not all programs segfaults. dash works, ls or bash does not.
A chroot is easier in this case, since many old programs don't run inside current environment, like asserting while reading locale-specific information. To run debootstrap and to enter the resulting chroot, a working qemu-aarch64 binfmt_misc setup is needed.
Reverting the mentioned commit makes everything work again.
Edited by Michael Tokarev