SIGABRT with -M raspi3b,accel=hvf on macOS
Host environment
- Operating system: macOS 12.4
- OS/kernel version: Darwin Kernel Version 21.5.0: Tue Apr 26 21:08:29 PDT 2022; root:xnu-8020.121.3~4/RELEASE_ARM64_T8101 arm64
- Architecture: arm64
- QEMU flavor: qemu-system-aarch64
- QEMU version: QEMU emulator version 7.0.50 (v7.0.0-1760-g30796f55-dirty)
- QEMU command line:
qemu-img create -f qcow2 zero.qcow2 2G qemu-system-aarch64 -M raspi3b,accel=hvf -drive id=card0,if=none,format=qcow2,index=0,file=./zero.qcow2 -device sd-card,drive=card0 -serial stdio
Emulated/Virtualized environment
- Operating system: N/A
- OS/kernel version: N/A
- Architecture: N/A
Description of problem
There is a SIGUSR2
or SIGUSR1
raised which causes QEMU to abort:
(lldb) bt
* thread #3, stop reason = signal SIGUSR2
* frame #0: 0x0000000184c384a4 libsystem_kernel.dylib`__sigsuspend + 8
frame #1: 0x0000000100b7ff34 qemu-system-aarch64`qemu_coroutine_new at coroutine-sigaltstack.c:221:9
frame #2: 0x0000000100b91f0c qemu-system-aarch64`qemu_coroutine_create(entry=(qemu-system-aarch64`monitor_qmp_dispatcher_co at qmp.c:211), opaque=0x0000000000000000) at qemu-coroutine.c:90:14
frame #3: 0x0000000100a833d8 qemu-system-aarch64`monitor_init_globals_core at monitor.c:707:25
I tried skipping over it with lldb
:
(lldb) b main
(lldb) r
(lldb) process handle SIGUSR1 -s false -p true
(lldb) process handle SIGUSR2 -s false -p true
(lldb) c
qemu-system-aarch64: Unknown Error
I investigated the Unknown Error and and it's actually HV_ILLEGAL_GUEST_STATE
which is unhandled in the assert_hvf_ok
function. From here the VM will fail.
Steps to reproduce
- Get a fake disk. Or create a fake one with:
qemu-img create -f qcow2 zero.qcow2 2G
- Run QEMU with the HVF accelerator:
qemu-system-aarch64 -M raspi3b,accel=hvf -drive id=card0,if=none,format=qcow2,index=0,file=./zero.qcow2 -device sd-card,drive=card0 -serial stdio