summaryrefslogtreecommitdiff
path: root/sys/arch/sparc/fpu/fpu.c
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1997-02-01 23:05:10 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1997-02-01 23:05:10 +0000
commit8b9eebd8494d97b2b02bf5e7a0f2edc7ebe67ca7 (patch)
treefbe34d7c5b2260f82ecd081e95486ee33ed5bece /sys/arch/sparc/fpu/fpu.c
parent41af40fac6714670ff497a0558dab724ca56f35f (diff)
trapsignal/sendsig type/sigval changes
Diffstat (limited to 'sys/arch/sparc/fpu/fpu.c')
-rw-r--r--sys/arch/sparc/fpu/fpu.c17
1 files changed, 13 insertions, 4 deletions
diff --git a/sys/arch/sparc/fpu/fpu.c b/sys/arch/sparc/fpu/fpu.c
index 3b1c8a0dbf9..ea82f000beb 100644
--- a/sys/arch/sparc/fpu/fpu.c
+++ b/sys/arch/sparc/fpu/fpu.c
@@ -89,6 +89,14 @@ static u_char fpu_codes[] = {
X16(FPE_FLTOPERR_TRAP)
};
+static int fpu_types[] = {
+ FPE_FLTRES,
+ FPE_FLTDIV,
+ FPE_FLTUND,
+ FPE_FLTOVF,
+ FPE_FLTINV,
+};
+
/*
* The FPU gave us an exception. Clean up the mess. Note that the
* fp queue can only have FPops in it, never load/store FP registers
@@ -114,7 +122,7 @@ fpu_cleanup(p, fs)
/* XXX missing trap address! */
if ((i = fsr & FSR_CX) == 0)
panic("fpu ieee trap, but no exception");
- trapsignal(p, SIGFPE, fpu_codes[i - 1], 0);
+ trapsignal(p, SIGFPE, fpu_codes[i - 1], fpu_types[i - i], 0);
break; /* XXX should return, but queue remains */
case FSR_TT_UNFIN:
@@ -131,7 +139,7 @@ fpu_cleanup(p, fs)
log(LOG_ERR, "fpu hardware error (%s[%d])\n",
p->p_comm, p->p_pid);
uprintf("%s[%d]: fpu hardware error\n", p->p_comm, p->p_pid);
- trapsignal(p, SIGFPE, -1, 0); /* ??? */
+ trapsignal(p, SIGFPE, -1, FPE_FLTINV, 0); /* ??? */
goto out;
default:
@@ -155,11 +163,12 @@ fpu_cleanup(p, fs)
case FPE:
trapsignal(p, SIGFPE,
- fpu_codes[(fs->fs_fsr & FSR_CX) - 1], 0);
+ fpu_codes[(fs->fs_fsr & FSR_CX) - 1],
+ fpu_types[(fs->fs_fsr & FSR_CX) - 1], 0);
break;
case NOTFPU:
- trapsignal(p, SIGILL, 0, 0); /* ??? code? */
+ trapsignal(p, SIGILL, 0, FPE_FLTINV, 0);
break;
default: