diff options
author | Warner Losh | 2022-01-08 23:58:34 +0100 |
---|---|---|
committer | Warner Losh | 2022-01-28 23:52:38 +0100 |
commit | 0ef599897345e0a43b3741a9990866c92a33d6e9 (patch) | |
tree | 1f9ab66eb83f67a87959a618e349b02dbade6366 /bsd-user/signal.c | |
parent | bsd-user/arm/target_arch_cpu.h: Move EXCP_ATOMIC to match linux-user (diff) | |
download | qemu-0ef599897345e0a43b3741a9990866c92a33d6e9.tar.gz qemu-0ef599897345e0a43b3741a9990866c92a33d6e9.tar.xz qemu-0ef599897345e0a43b3741a9990866c92a33d6e9.zip |
bsd-user/signal.c: implement force_sig_fault
Start to implement the force_sig_fault code. This currently just calls
queue_signal(). The bsd-user fork version of that will handle this the
synchronous nature of this call. Add signal-common.h to hold signal
helper functions like force_sig_fault.
Signed-off-by: Stacey Son <sson@FreeBSD.org>
Signed-off-by: Kyle Evans <kevans@freebsd.org>
Signed-off-by: Warner Losh <imp@bsdimp.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'bsd-user/signal.c')
-rw-r--r-- | bsd-user/signal.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/bsd-user/signal.c b/bsd-user/signal.c index 05b277c642..1206d0d728 100644 --- a/bsd-user/signal.c +++ b/bsd-user/signal.c @@ -19,6 +19,7 @@ #include "qemu/osdep.h" #include "qemu.h" +#include "signal-common.h" /* * Stubbed out routines until we merge signal support from bsd-user @@ -34,6 +35,23 @@ void queue_signal(CPUArchState *env, int sig, target_siginfo_t *info) qemu_log_mask(LOG_UNIMP, "No signal queueing, dropping signal %d\n", sig); } +/* + * Force a synchronously taken QEMU_SI_FAULT signal. For QEMU the + * 'force' part is handled in process_pending_signals(). + */ +void force_sig_fault(int sig, int code, abi_ulong addr) +{ + CPUState *cpu = thread_cpu; + CPUArchState *env = cpu->env_ptr; + target_siginfo_t info = {}; + + info.si_signo = sig; + info.si_errno = 0; + info.si_code = code; + info.si_addr = addr; + queue_signal(env, sig, &info); +} + void signal_init(void) { } |