diff options
author | Theo de Raadt <deraadt@cvs.openbsd.org> | 1997-02-05 15:50:19 +0000 |
---|---|---|
committer | Theo de Raadt <deraadt@cvs.openbsd.org> | 1997-02-05 15:50:19 +0000 |
commit | 7b8e7de08fa29a897879c57f598153fac7b590eb (patch) | |
tree | e1476b44b2980293bf9c34bf833e5ed4fe1c90c6 /sys/arch | |
parent | 7a5d658bf7dd0d07558988a5aa12f5eb74208863 (diff) |
map native sig/code to svr4 code in a different fashion; must be checked later
Diffstat (limited to 'sys/arch')
-rw-r--r-- | sys/arch/i386/i386/svr4_machdep.c | 145 |
1 files changed, 71 insertions, 74 deletions
diff --git a/sys/arch/i386/i386/svr4_machdep.c b/sys/arch/i386/i386/svr4_machdep.c index 0bdfcf9c2c8..77c4ba515ba 100644 --- a/sys/arch/i386/i386/svr4_machdep.c +++ b/sys/arch/i386/i386/svr4_machdep.c @@ -1,4 +1,4 @@ -/* $OpenBSD: svr4_machdep.c,v 1.10 1997/02/01 21:53:26 deraadt Exp $ */ +/* $OpenBSD: svr4_machdep.c,v 1.11 1997/02/05 15:50:18 deraadt Exp $ */ /* $NetBSD: svr4_machdep.c,v 1.24 1996/05/03 19:42:26 christos Exp $ */ /* @@ -223,84 +223,81 @@ svr4_getsiginfo(si, sig, code, type, addr) si->svr4_si_errno = 0; si->svr4_si_addr = addr; - switch (code) { - case T_PRIVINFLT: - si->svr4_si_code = SVR4_ILL_PRVOPC; - si->svr4_si_trap = SVR4_T_PRIVINFLT; - break; - - case T_BPTFLT: - si->svr4_si_code = SVR4_TRAP_BRKPT; - si->svr4_si_trap = SVR4_T_BPTFLT; - break; - - case T_ARITHTRAP: - si->svr4_si_code = SVR4_FPE_INTOVF; - si->svr4_si_trap = SVR4_T_DIVIDE; - break; - - case T_PROTFLT: - si->svr4_si_code = SVR4_SEGV_ACCERR; - si->svr4_si_trap = SVR4_T_PROTFLT; - break; - - case T_TRCTRAP: - si->svr4_si_code = SVR4_TRAP_TRACE; - si->svr4_si_trap = SVR4_T_TRCTRAP; - break; - - case T_PAGEFLT: - si->svr4_si_code = SVR4_SEGV_ACCERR; - si->svr4_si_trap = SVR4_T_PAGEFLT; - break; - - case T_ALIGNFLT: - si->svr4_si_code = SVR4_BUS_ADRALN; - si->svr4_si_trap = SVR4_T_ALIGNFLT; - break; - - case T_DIVIDE: - si->svr4_si_code = SVR4_FPE_FLTDIV; - si->svr4_si_trap = SVR4_T_DIVIDE; - break; - - case T_OFLOW: - si->svr4_si_code = SVR4_FPE_FLTOVF; - si->svr4_si_trap = SVR4_T_DIVIDE; - break; - - case T_BOUND: - si->svr4_si_code = SVR4_FPE_FLTSUB; - si->svr4_si_trap = SVR4_T_BOUND; + si->svr4_si_code = 0; + si->svr4_si_trap = 0; + + switch (sig) { + case SIGSEGV: + switch (type) { + case SEGV_ACCERR: + si->svr4_si_code = SVR4_SEGV_ACCERR; + si->svr4_si_trap = SVR4_T_PROTFLT; + break; + case SEGV_MAPERR: + si->svr4_si_code = SVR4_SEGV_MAPERR; + si->svr4_si_trap = SVR4_T_SEGNPFLT; + break; + } break; - - case T_DNA: - si->svr4_si_code = SVR4_FPE_FLTINV; - si->svr4_si_trap = SVR4_T_DNA; + case SIGBUS: + switch (type) { + case BUS_ADRALN: + si->svr4_si_code = SVR4_BUS_ADRALN; + si->svr4_si_trap = SVR4_T_ALIGNFLT; + break; + } break; - - case T_FPOPFLT: - si->svr4_si_code = SVR4_FPE_FLTINV; - si->svr4_si_trap = SVR4_T_FPOPFLT; + case SIGTRAP: + switch (type) { + case TRAP_BRKPT: + si->svr4_si_code = SVR4_TRAP_BRKPT; + si->svr4_si_trap = SVR4_T_BPTFLT; + break; + case TRAP_TRACE: + si->svr4_si_code = SVR4_TRAP_TRACE; + si->svr4_si_trap = SVR4_T_TRCTRAP; + break; + } break; - - case T_SEGNPFLT: - si->svr4_si_code = SVR4_SEGV_MAPERR; - si->svr4_si_trap = SVR4_T_SEGNPFLT; + case SIGEMT: + switch (type) { + } break; - - case T_STKFLT: - si->svr4_si_code = SVR4_ILL_BADSTK; - si->svr4_si_trap = SVR4_T_STKFLT; + case SIGILL: + switch (type) { + case ILL_PRVOPC: + si->svr4_si_code = SVR4_ILL_PRVOPC; + si->svr4_si_trap = SVR4_T_PRIVINFLT; + break; + case ILL_BADSTK: + si->svr4_si_code = SVR4_ILL_BADSTK; + si->svr4_si_trap = SVR4_T_STKFLT; + break; + } break; - - default: - si->svr4_si_code = 0; - si->svr4_si_trap = 0; -#ifdef DIAGNOSTIC - printf("sig %d code %ld\n", sig, code); - panic("svr4_getsiginfo"); -#endif + case SIGFPE: + switch (type) { + case T_ARITHTRAP: + si->svr4_si_code = SVR4_FPE_INTOVF; + si->svr4_si_trap = SVR4_T_DIVIDE; + break; + case FPE_FLTDIV: + si->svr4_si_code = SVR4_FPE_FLTDIV; + si->svr4_si_trap = SVR4_T_DIVIDE; + break; + case FPE_FLTOVF: + si->svr4_si_code = SVR4_FPE_FLTOVF; + si->svr4_si_trap = SVR4_T_DIVIDE; + break; + case FPE_FLTSUB: + si->svr4_si_code = SVR4_FPE_FLTSUB; + si->svr4_si_trap = SVR4_T_BOUND; + break; + case FPE_FLTINV: + si->svr4_si_code = SVR4_FPE_FLTINV; + si->svr4_si_trap = SVR4_T_FPOPFLT; + break; + } break; } } |