summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkstailey <kstailey@cvs.openbsd.org>1997-02-06 20:04:00 +0000
committerkstailey <kstailey@cvs.openbsd.org>1997-02-06 20:04:00 +0000
commit522bf125c94f2ceb671a04deb45f5780f1afcb61 (patch)
treed70ab06b7a1136b986747222f483ce1d99a7b5d8
parentcb42992a3ed145e7edb25916bf1cd79af3fa3ba9 (diff)
adjustments to SA_SIGINFO
-rw-r--r--sys/arch/sun3/sun3/trap.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/sys/arch/sun3/sun3/trap.c b/sys/arch/sun3/sun3/trap.c
index 5cbfc483953..48535cadab8 100644
--- a/sys/arch/sun3/sun3/trap.c
+++ b/sys/arch/sun3/sun3/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.13 1997/02/04 01:31:35 kstailey Exp $ */
+/* $OpenBSD: trap.c,v 1.14 1997/02/06 20:03:59 kstailey Exp $ */
/* $NetBSD: trap.c,v 1.63-1.65ish 1997/01/16 15:41:40 gwr Exp $ */
/*
@@ -312,6 +312,7 @@ trap(type, code, v, frame)
sig = SIGILL;
ucode = frame.f_format;
si_type = ILL_COPROC;
+ v = frame.f_pc;
break;
case T_COPERR|T_USER: /* user coprocessor violation */
@@ -319,6 +320,7 @@ trap(type, code, v, frame)
ucode = 0;
sig = SIGFPE;
si_type = FPE_FLTINV;
+ v = frame.f_pc;
break;
case T_FPERR|T_USER: /* 68881 exceptions */
@@ -334,6 +336,7 @@ trap(type, code, v, frame)
ucode = code;
sig = SIGFPE;
si_type = FPE_FLTRES;
+ v = frame.f_pc;
break;
case T_FPEMULI: /* FPU faults in supervisor mode */
@@ -353,6 +356,7 @@ trap(type, code, v, frame)
ucode = frame.f_format; /* XXX was ILL_PRIVIN_FAULT */
sig = SIGILL;
si_type = ILL_ILLOPC;
+ v = frame.f_pc;
#endif
break;
@@ -361,24 +365,28 @@ trap(type, code, v, frame)
ucode = frame.f_format;
sig = SIGILL;
si_type = ILL_PRVOPC;
+ v = frame.f_pc;
break;
case T_ZERODIV|T_USER: /* Divide by zero */
ucode = frame.f_format;
sig = SIGFPE;
si_type = FPE_INTDIV;
+ v = frame.f_pc;
break;
case T_CHKINST|T_USER: /* CHK instruction trap */
ucode = frame.f_format;
sig = SIGFPE;
si_type = FPE_FLTSUB;
+ v = frame.f_pc;
break;
case T_TRAPVINST|T_USER: /* TRAPV instruction trap */
ucode = frame.f_format;
- sig = SIGFPE;
- si_type = FPE_FLTOVF;
+ sig = SIGILL;
+ si_type = ILL_ILLTRP;
+ v = frame.f_pc;
break;
/*
@@ -451,7 +459,7 @@ trap(type, code, v, frame)
register struct vmspace *vm = NULL;
register vm_map_t map;
int rv;
- vm_prot_t ftype;
+ vm_prot_t ftype, vftype;
extern vm_map_t kernel_map;
/* vmspace only significant if T_USER */
@@ -479,9 +487,10 @@ trap(type, code, v, frame)
map = kernel_map;
}
- if (WRFAULT(code))
+ if (WRFAULT(code)) {
+ vftype = VM_PROT_WRITE;
ftype = VM_PROT_READ | VM_PROT_WRITE;
- else
+ } else
ftype = VM_PROT_READ;
va = trunc_page((vm_offset_t)v);
@@ -567,7 +576,7 @@ trap(type, code, v, frame)
goto dopanic;
}
frame.f_pad = code & 0xffff;
- ucode = T_MMUFLT;
+ ucode = vftype;
sig = SIGSEGV;
si_type = SEGV_MAPERR;
break;