diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1997-02-01 23:05:10 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1997-02-01 23:05:10 +0000 |
commit | 8b9eebd8494d97b2b02bf5e7a0f2edc7ebe67ca7 (patch) | |
tree | fbe34d7c5b2260f82ecd081e95486ee33ed5bece /sys/arch/sparc/fpu/fpu.c | |
parent | 41af40fac6714670ff497a0558dab724ca56f35f (diff) |
trapsignal/sendsig type/sigval changes
Diffstat (limited to 'sys/arch/sparc/fpu/fpu.c')
-rw-r--r-- | sys/arch/sparc/fpu/fpu.c | 17 |
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: |