From 1dcdfdc0141e94b57b80526ca917b1228fe53f53 Mon Sep 17 00:00:00 2001 From: Jakob Kaivo Date: Wed, 31 Jan 2024 15:54:15 -0500 Subject: fix up signal-related UB reporting --- src/signal/__signal_handler.c | 8 +++++++- src/signal/signal.c | 3 +-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/signal/__signal_handler.c b/src/signal/__signal_handler.c index ca529999..9cd9eda7 100644 --- a/src/signal/__signal_handler.c +++ b/src/signal/__signal_handler.c @@ -8,7 +8,13 @@ void __signal_handler(int sig) if (___signal.handlers[sig] != NULL) { ___signal.handlers[sig](sig); } - /* TODO: if signal is fatal, trigger UB */ + + /* TODO: signal number to name */ + if (sig == SIGFPE || sig == SIGILL || sig == SIGSEGV) { + ___signal.current = 0; + __undefined("Signal handler for signal %d returned", sig); + } + ___signal.current = 0; } diff --git a/src/signal/signal.c b/src/signal/signal.c index 927025ee..4bd74744 100644 --- a/src/signal/signal.c +++ b/src/signal/signal.c @@ -17,6 +17,7 @@ #define SA_RESTART 0x10000000 #define SA_RESTORER 0x04000000 +__attribute__((noinline, target("no-sse"))) void (*signal(int sig, void (*func)(int)))(int) { /* signal safe iff we are resetting the current signal handler */ @@ -27,8 +28,6 @@ void (*signal(int sig, void (*func)(int)))(int) return SIG_ERR; } - /* TODO: install __signal_handler as a hook */ - void (*prev)(int) = ___signal.handlers[sig]; ___signal.handlers[sig] = func; -- cgit v1.2.1