On zlinux, we print the wrong pc in the vm error logs. In fact, we do this for all Unix platforms, but only on zlinux it has an effect.
In signal handling, we take the pc from the crash context. On zlinux, this is not necessarily the instruction causing the crash. For SIGILL and SIGFPE, context->pc points the the instruction after the one causing the crash.
The proper way to do this is - when handling SIGILL, SIGFPE - to instead take the pc from the si_addr field of the signal info structure (according to Posix, si_addr is the "address of the faulting instruction"). This yields the correct crash address on zlinux.
In signal handling, we take the pc from the crash context. On zlinux, this is not necessarily the instruction causing the crash. For SIGILL and SIGFPE, context->pc points the the instruction after the one causing the crash.
The proper way to do this is - when handling SIGILL, SIGFPE - to instead take the pc from the si_addr field of the signal info structure (according to Posix, si_addr is the "address of the faulting instruction"). This yields the correct crash address on zlinux.