summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2004-06-22 05:02:36 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2004-06-22 05:02:36 +0000
commit8604291e10a59739f1632613615ccd05820e4869 (patch)
tree9cbb3dbf281f2de4394f7926b5f6f46f665e4116
parentca1eff565277850b0231424d808feb6336d85a51 (diff)
After 88110 exception processing, do not reset the in-frame [di][lp]ar
values, they won't be put back to registers anyways...
-rw-r--r--sys/arch/m88k/m88k/trap.c8
-rw-r--r--sys/arch/mvme88k/mvme88k/eh.S14
2 files changed, 6 insertions, 16 deletions
diff --git a/sys/arch/m88k/m88k/trap.c b/sys/arch/m88k/m88k/trap.c
index 4fe7b704a49..13392c15cfe 100644
--- a/sys/arch/m88k/m88k/trap.c
+++ b/sys/arch/m88k/m88k/trap.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trap.c,v 1.6 2004/06/22 05:01:05 miod Exp $ */
+/* $OpenBSD: trap.c,v 1.7 2004/06/22 05:02:32 miod Exp $ */
/*
* Copyright (c) 2004, Miodrag Vallat.
* Copyright (c) 1998 Steve Murphree, Jr.
@@ -1009,7 +1009,6 @@ m88110_user_fault:
*/
if (result != 0 && p->p_addr->u_pcb.pcb_onfault != NULL) {
frame->tf_exip = p->p_addr->u_pcb.pcb_onfault;
- frame->tf_dsr = frame->tf_isr = 0;
/*
* Continue as if the fault had been resolved.
*/
@@ -1143,11 +1142,6 @@ m88110_user_fault:
if (sig) {
sv.sival_int = fault_addr;
trapsignal(p, sig, fault_code, fault_type, sv);
- /*
- * don't want multiple faults - we are going to
- * deliver signal.
- */
- frame->tf_dsr = frame->tf_isr = 0;
}
userret(p, frame, sticks);
diff --git a/sys/arch/mvme88k/mvme88k/eh.S b/sys/arch/mvme88k/mvme88k/eh.S
index 88a8990fcac..0784e15f34b 100644
--- a/sys/arch/mvme88k/mvme88k/eh.S
+++ b/sys/arch/mvme88k/mvme88k/eh.S
@@ -1,4 +1,4 @@
-/* $OpenBSD: eh.S,v 1.51 2004/06/22 05:01:08 miod Exp $ */
+/* $OpenBSD: eh.S,v 1.52 2004/06/22 05:02:35 miod Exp $ */
/*
* Mach Operating System
* Copyright (c) 1993-1991 Carnegie Mellon University
@@ -943,8 +943,6 @@ ASLOCAL(m88110_badaddr__return_nonzero)
* DSR before the rte instruction clears the EFRZ bit in the PSR.
*/
stcr r0, DSR
- stcr r0, DLAR
- stcr r0, DPAR
/* FALLTHROUGH */
#endif
ASLOCAL(badaddr__return_nonzero)
@@ -2576,14 +2574,12 @@ ASLOCAL(m88110_setup_phase_two)
ASLOCAL(m88110_fpu_enable)
FLUSH_PIPELINE
+
/* Now we can handle another exception!!! */
/* Now that EFRZ is cleared, we can clear these */
- stcr r0, ISR /* Clear ISR */
- stcr r0, ILAR /* Clear ILAR */
- stcr r0, IPAR /* Clear IPAR */
- stcr r0, DSR /* Clear DSR */
- stcr r0, DLAR /* Clear DLAR */
- stcr r0, DPAR /* Clear DPAR */
+ stcr r0, ISR
+ stcr r0, DSR
+
xcr TMP, TMP, SR3 /* get E.F. pointer */
st r30, TMP, GENREG_OFF(30) /* save previous r30, r31 */
st r31, TMP, GENREG_OFF(31) /* save previous r30, r31 */