diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1997-02-03 13:09:17 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1997-02-03 13:09:17 +0000 |
commit | 43c4f19381db7d00fe209c9b2a6a48e55c2623f3 (patch) | |
tree | 58b94b6b18d0537be44b904f8b7e7b7d06a93343 | |
parent | cb5d8c0fa1e3cf6632dc06ee22fc94b847de1866 (diff) |
initial cut at siginfo
-rw-r--r-- | sys/arch/alpha/alpha/machdep.c | 6 | ||||
-rw-r--r-- | sys/arch/alpha/alpha/trap.c | 15 |
2 files changed, 16 insertions, 5 deletions
diff --git a/sys/arch/alpha/alpha/machdep.c b/sys/arch/alpha/alpha/machdep.c index 92c2efb6955..87cb15c33af 100644 --- a/sys/arch/alpha/alpha/machdep.c +++ b/sys/arch/alpha/alpha/machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: machdep.c,v 1.15 1997/01/24 19:56:37 niklas Exp $ */ +/* $OpenBSD: machdep.c,v 1.16 1997/02/03 13:09:14 deraadt Exp $ */ /* $NetBSD: machdep.c,v 1.61 1996/12/07 01:54:49 cgd Exp $ */ /* @@ -1134,10 +1134,12 @@ int sigpid = 0; * Send an interrupt to process. */ void -sendsig(catcher, sig, mask, code) +sendsig(catcher, sig, mask, code, type, val) sig_t catcher; int sig, mask; u_long code; + int type; + union sigval val; { struct proc *p = curproc; struct sigcontext *scp, ksc; diff --git a/sys/arch/alpha/alpha/trap.c b/sys/arch/alpha/alpha/trap.c index 47620f99514..350ea38caf3 100644 --- a/sys/arch/alpha/alpha/trap.c +++ b/sys/arch/alpha/alpha/trap.c @@ -1,4 +1,4 @@ -/* $OpenBSD: trap.c,v 1.6 1997/01/24 19:56:46 niklas Exp $ */ +/* $OpenBSD: trap.c,v 1.7 1997/02/03 13:09:16 deraadt Exp $ */ /* $NetBSD: trap.c,v 1.19 1996/11/27 01:28:30 cgd Exp $ */ /* @@ -161,6 +161,10 @@ trap(a0, a1, a2, entry, framep) goto out; ucode = a0; /* VA */ + if (i == SIGBUS) + typ = BUS_ADRALN; + else + typ = SEGV_MAPERR; break; } @@ -185,7 +189,8 @@ trap(a0, a1, a2, entry, framep) */ if (user) { sigfpe: i = SIGFPE; - ucode = a0; /* exception summary */ + vv = ucode = a0; /* exception summary */ + typ = FPE_FLTINV; /* XXX? */ break; } @@ -208,6 +213,7 @@ sigfpe: i = SIGFPE; case ALPHA_IF_CODE_BUGCHK: ucode = a0; /* trap type */ i = SIGTRAP; + typ = TRAP_BRKPT; break; case ALPHA_IF_CODE_OPDEC: @@ -222,6 +228,7 @@ panic("foo"); } #endif i = SIGILL; + typ = ILL_ILLOPC; break; case ALPHA_IF_CODE_FEN: @@ -394,6 +401,7 @@ panic("foo"); } ucode = a0; i = SIGSEGV; + typ = SEGV_MAPERR; break; } @@ -407,7 +415,7 @@ panic("foo"); goto dopanic; } - trapsignal(p, i, ucode); + trapsignal(p, i, ucode, typ, ucode); out: if (user) userret(p, framep->tf_regs[FRAME_PC], sticks); @@ -927,6 +935,7 @@ unaligned_fixup(va, opcode, reg, p) * unaligned_{load,store}_* clears the signal flag. */ signal = SIGBUS; + typ = BUS_ADRALN; if (dofix && size != 0) { switch (opcode) { #ifdef FIX_UNALIGNED_VAX_FP |