qemu-s390x puts a wrong value into SIGILL's siginfo_t's psw.addr: it should be a pointer to the instruction following the illegal instruction, but at the moment it is a pointer to the illegal instruction itself. This breaks OpenJDK, which relies on this value. A similar problem exists for SIGFPE.
Patch 1 fixes the issue, patch 2 adds a test. v1: https://lists.nongnu.org/archive/html/qemu-devel/2021-05/msg06592.html v1 -> v2: Use a better buglink (Cornelia), simplify the inline asm magic in the test and add an explanation (David). v2: https://lists.nongnu.org/archive/html/qemu-devel/2021-05/msg06649.html v2 -> v3: Fix SIGSEGV handling (found when trying to run valgrind under qemu-user). v3: https://lists.nongnu.org/archive/html/qemu-devel/2021-06/msg00299.html v3 -> v4: Fix compiling the test on Ubuntu 20.04 (Jonathan). v4: https://lists.nongnu.org/archive/html/qemu-devel/2021-06/msg05848.html v4 -> v5: Greatly simplify the fix (Ulrich). v5: https://lists.nongnu.org/archive/html/qemu-devel/2021-06/msg06244.html v5 -> v6: Fix breakpoints (David). Add gdbstub test. Note: the compare-and-trap SIGFPE issue is being fixed separately. https://lists.nongnu.org/archive/html/qemu-devel/2021-06/msg05690.html Ilya Leoshkevich (2): target/s390x: Fix SIGILL and SIGFPE psw.addr reporting tests/tcg/s390x: Test SIGILL and SIGSEGV handling linux-user/s390x/cpu_loop.c | 12 +- tests/tcg/s390x/Makefile.target | 18 +- tests/tcg/s390x/gdbstub/test-signals-s390x.py | 76 ++++++++ tests/tcg/s390x/signals-s390x.c | 165 ++++++++++++++++++ 4 files changed, 269 insertions(+), 2 deletions(-) create mode 100644 tests/tcg/s390x/gdbstub/test-signals-s390x.py create mode 100644 tests/tcg/s390x/signals-s390x.c -- 2.31.1