Qemu crashes with SIGFPE on certain trapping arithmetic operations on m68k target
Host environment
- Operating system: NetBSD
- OS/kernel version: NetBSD the-ripe-vessel 10.99.10 NetBSD 10.99.10 (GENERIC)
- Architecture: x86-64
- QEMU flavor: qemu-system-m68k
- QEMU version: QEMU emulator version 8.1.3
- QEMU command line:
./qemu-system-m68k -machine virt -kernel netbsd-virt68k ... # it actually doesn't matter
Emulated/Virtualized environment
- Operating system: NetBSD
- OS/kernel version: NetBSD-10.99.x (post-10 -current)
- Architecture: m68k
Description of problem
I recently ported NetBSD to the Qemu m68k "virt" platform, and this was discovered when running NetBSD's automated tests. Certain arithmetic operation that will trap in the guest will crash Qemu. First case encountered is below.
Steps to reproduce
- Compile and run the following program in the m68k guest:
virt68k:thorpej 3$ cat crash-qemu.c
#include <limits.h>
#include <stdlib.h>
int divisor = -1;
int
main(int argc, char *argv[])
{
if (argc > 1)
divisor = atoi(argv[1]);
return INT_MIN / divisor;
}
virt68k:thorpej 4$
Another minimal case would be:
move.l #-2147483648,%d0
move.l #-1,%d1
divsl.l %d1,%d1:%d0
Additional information
Edited by Mark Cave-Ayland