OSDN Git Service

linux-user/arm: Use force_sig() to deliver fpa11 emulation SIGFPE
authorPeter Maydell <peter.maydell@linaro.org>
Fri, 13 Aug 2021 13:18:05 +0000 (14:18 +0100)
committerLaurent Vivier <laurent@vivier.eu>
Thu, 23 Sep 2021 12:42:55 +0000 (14:42 +0200)
commitbabe6d5c88b587d30f72f31a81ce87610b68e952
tree811c5f9bfb15a0fb6304f0ef7557201eb9d4efe2
parent1af354120dc4d9187ee1162b95ac84aafd7c4df0
linux-user/arm: Use force_sig() to deliver fpa11 emulation SIGFPE

In the Arm target code, when the fpa11 emulation code tells us we
need to send the guest a SIGFPE, we do this with queue_signal(), but
we are using the wrong si_type, and we aren't setting the _sifields
union members corresponding to either the si_type we are using or the
si_type we should be using.

As the existing comment notes, the kernel code for this calls the old
send_sig() function to deliver the signal.  This eventually results
in the kernel's signal handling code fabricating a siginfo_t with a
SI_KERNEL code and a zero pid and uid.  For QEMU this means we need
to use QEMU_SI_KILL.  We already have a function for that:
force_sig() sets up the whole target_siginfo_t the way we need it.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-Id: <20210813131809.28655-4-peter.maydell@linaro.org>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
linux-user/arm/cpu_loop.c