summaryrefslogtreecommitdiff
path: root/sys/arch/mvme68k
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2004-03-03 07:46:59 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2004-03-03 07:46:59 +0000
commit559c87caa75f6049925b85877ce1d24d802f0277 (patch)
tree7e42904c56a2c6c874be0e421bf9f770fcf139f8 /sys/arch/mvme68k
parent7ea415bc0ccc9633ad7a1a037416a033a7091203 (diff)
Handle 68060 branch prediction error traps before checking whether we are
ignoring bus errors.
Diffstat (limited to 'sys/arch/mvme68k')
-rw-r--r--sys/arch/mvme68k/mvme68k/locore.s29
1 files changed, 15 insertions, 14 deletions
diff --git a/sys/arch/mvme68k/mvme68k/locore.s b/sys/arch/mvme68k/mvme68k/locore.s
index 6b26d1ece58..b9f2f2b1195 100644
--- a/sys/arch/mvme68k/mvme68k/locore.s
+++ b/sys/arch/mvme68k/mvme68k/locore.s
@@ -1,4 +1,4 @@
-/* $OpenBSD: locore.s,v 1.37 2004/03/02 22:55:55 miod Exp $ */
+/* $OpenBSD: locore.s,v 1.38 2004/03/03 07:46:58 miod Exp $ */
/*
* Copyright (c) 1995 Theo de Raadt
@@ -664,11 +664,6 @@ ENTRY_NOPROFILE(addrerr4060)
#if defined(M68060)
ENTRY_NOPROFILE(buserr60)
- tstl _C_LABEL(nofault) | device probe?
- jeq Lbuserr60 | no, handle as usual
- movl _C_LABEL(nofault),sp@- | yes,
- jbsr _C_LABEL(longjmp) | longjmp(nofault)
-Lbuserr60:
clrl sp@- | stack adjust count
moveml #0xFFFF,sp@- | save user registers
movl usp,a0 | save the user SP
@@ -696,17 +691,17 @@ Lberr3:
movl d1,sp@-
movl d0,sp@- | code is FSLW now.
andw #0x1f80,d0
+ jeq Lbuserr60 | no, handle as usual
+ movl #T_MMUFLT,sp@- | show that we are an MMU fault
+ jra _ASM_LABEL(faultstkadj) | and deal with it
+Lbuserr60:
+ tstl _C_LABEL(nofault) | device probe?
jeq Lisberr | Bus Error?
- jra Lismerr | no, MMU fault.
+ movl _C_LABEL(nofault),sp@- | yes,
+ jbsr _C_LABEL(longjmp) | longjmp(nofault)
#endif
#if defined(M68040)
ENTRY_NOPROFILE(buserr40)
- tstl _C_LABEL(nofault) | device probe?
- jeq Lbuserr40 | no, handle as usual
- movl _C_LABEL(nofault),sp@- | yes,
- jbsr _C_LABEL(longjmp) | longjmp(nofault)
- /* NOTREACHED */
-Lbuserr40:
clrl sp@- | stack adjust count
moveml #0xFFFF,sp@- | save user registers
movl usp,a0 | save the user SP
@@ -722,9 +717,15 @@ Lbe1stpg:
movl d1,sp@- | pass fault address.
movl d0,sp@- | pass SSW as code
btst #10,d0 | test ATC
- jeq Lisberr | it is a bus error
+ jeq Lbuserr40 | no, handle as usual
movl #T_MMUFLT,sp@- | show that we are an MMU fault
jra _ASM_LABEL(faultstkadj) | and deal with it
+Lbuserr40:
+ tstl _C_LABEL(nofault) | device probe?
+ jeq Lisberr | it is a bus error
+ movl _C_LABEL(nofault),sp@- | yes,
+ jbsr _C_LABEL(longjmp) | longjmp(nofault)
+ /* NOTREACHED */
#endif
ENTRY_NOPROFILE(busaddrerr2030)