diff options
Diffstat (limited to 'emu/OpenBSD')
| -rw-r--r-- | emu/OpenBSD/os.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/emu/OpenBSD/os.c b/emu/OpenBSD/os.c index 2dd4c4d1..0715ec2a 100644 --- a/emu/OpenBSD/os.c +++ b/emu/OpenBSD/os.c @@ -15,6 +15,7 @@ #include <pwd.h> #include <errno.h> #include <unistd.h> +#include <fpuctl.h> enum { @@ -116,6 +117,15 @@ trapSEGV(int signo) disfault(nil, "Segmentation violation"); } +static void +trapFPE(int signo) +{ + char buf[64]; + USED(signo); + snprint(buf, sizeof(buf), "sys: fp: exception status=%.4lux", getfsr()); + disfault(nil, buf); +} + static sigset_t initmask; static void @@ -161,6 +171,9 @@ setsigs(void) act.sa_handler = trapSEGV; if(sigaction(SIGSEGV, &act, nil)) panic("sigaction SIGSEGV"); + act.sa_handler = trapFPE; + if(sigaction(SIGFPE, &act, nil)) + panic("sigaction SIGFPE"); if(sigaddset(&initmask, SIGINT) == -1) panic("sigaddset"); } |
