summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakob Kaivo <jkk@ung.org>2024-01-31 15:54:15 -0500
committerJakob Kaivo <jkk@ung.org>2024-01-31 15:54:15 -0500
commit1dcdfdc0141e94b57b80526ca917b1228fe53f53 (patch)
treea1567c7dfe39b9514ff946a844be0aaafd4453af
parentc030ac43d9cc5c2accdda8b47e07d2d7b0ba8dc4 (diff)
fix up signal-related UB reporting
-rw-r--r--src/signal/__signal_handler.c8
-rw-r--r--src/signal/signal.c3
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;