aboutsummaryrefslogtreecommitdiff
path: root/bsd-user/signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'bsd-user/signal.c')
-rw-r--r--bsd-user/signal.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/bsd-user/signal.c b/bsd-user/signal.c
index db8cf0a08f..454aef2993 100644
--- a/bsd-user/signal.c
+++ b/bsd-user/signal.c
@@ -48,6 +48,18 @@ int target_to_host_signal(int sig)
return sig;
}
+/* Adjust the signal context to rewind out of safe-syscall if we're in it */
+static inline void rewind_if_in_safe_syscall(void *puc)
+{
+ ucontext_t *uc = (ucontext_t *)puc;
+ uintptr_t pcreg = host_signal_pc(uc);
+
+ if (pcreg > (uintptr_t)safe_syscall_start
+ && pcreg < (uintptr_t)safe_syscall_end) {
+ host_signal_set_pc(uc, (uintptr_t)safe_syscall_start);
+ }
+}
+
static bool has_trapno(int tsig)
{
return tsig == TARGET_SIGILL ||
@@ -57,7 +69,6 @@ static bool has_trapno(int tsig)
tsig == TARGET_SIGTRAP;
}
-
/* Siginfo conversion. */
/*