summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2006-04-26 20:49:59 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2006-04-26 20:49:59 +0000
commitcfa0db19831c29b2faddf07a6dcae0ab1f1708d6 (patch)
tree95af7b7fde01a6fcc350010d4b8c4f916fecca81
parent56e5e1230b4e0bfc4f264e6750cca4f7dc0c9795 (diff)
In nmihand(), do not enter ddb with Debugger(), which causes an exception,
as we might not be in a state where we can process a nested exception. This would then cause an error exception, which handler calls nmihand. Kaboom. Instead, directly invoke m88k_db_trap(); from the AV tree.
-rw-r--r--sys/arch/mvme88k/mvme88k/machdep.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/sys/arch/mvme88k/mvme88k/machdep.c b/sys/arch/mvme88k/mvme88k/machdep.c
index 728a6f690e5..d58611a0b02 100644
--- a/sys/arch/mvme88k/mvme88k/machdep.c
+++ b/sys/arch/mvme88k/mvme88k/machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: machdep.c,v 1.179 2006/04/19 22:09:40 miod Exp $ */
+/* $OpenBSD: machdep.c,v 1.180 2006/04/26 20:49:58 miod Exp $ */
/*
* Copyright (c) 1998, 1999, 2000, 2001 Steve Murphree, Jr.
* Copyright (c) 1996 Nivas Madhur
@@ -900,8 +900,15 @@ nmihand(void *frame)
{
#ifdef DDB
printf("Abort switch pressed\n");
- if (db_console)
- Debugger();
+ if (db_console) {
+ /*
+ * We can't use Debugger() here, as we are coming from an
+ * exception handler, and can't assume anything about the
+ * state we are in. Invoke the post-trap ddb entry directly.
+ */
+ extern void m88k_db_trap(int, struct trapframe *);
+ m88k_db_trap(T_KDB_ENTRY, (struct trapframe *)frame);
+ }
#endif
}