From 6bf3ce61406f2f25d9da051cd29cb00fcbe539da Mon Sep 17 00:00:00 2001 From: forsyth Date: Fri, 5 Feb 2010 15:15:14 +0000 Subject: 20100205-1515 --- emu/FreeBSD/os.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'emu/FreeBSD/os.c') diff --git a/emu/FreeBSD/os.c b/emu/FreeBSD/os.c index 5bf2a833..fd09e968 100644 --- a/emu/FreeBSD/os.c +++ b/emu/FreeBSD/os.c @@ -12,6 +12,7 @@ #include #include #include +#include enum { @@ -111,6 +112,16 @@ 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 @@ -156,6 +167,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"); } -- cgit v1.2.3