summaryrefslogtreecommitdiff
path: root/emu/OpenBSD/os.c
diff options
context:
space:
mode:
authorforsyth <forsyth@vitanuova.com>2010-02-05 15:15:14 +0000
committerforsyth <forsyth@vitanuova.com>2010-02-05 15:15:14 +0000
commit6bf3ce61406f2f25d9da051cd29cb00fcbe539da (patch)
tree7f3707b84995a0bc8ca490d8e342556de843d8b8 /emu/OpenBSD/os.c
parent07f684ffc61236e171b449cfe9f91cef1e62866b (diff)
20100205-1515
Diffstat (limited to 'emu/OpenBSD/os.c')
-rw-r--r--emu/OpenBSD/os.c13
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");
}