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

  1. 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/
  1. build qemu-aarch64; cp qemu-aarch64 /tmp/jessie-arm64/
  2. chroot /tmp/jessie-arm64/
  3. ./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
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information