diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2006-04-26 20:49:59 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2006-04-26 20:49:59 +0000 |
commit | cfa0db19831c29b2faddf07a6dcae0ab1f1708d6 (patch) | |
tree | 95af7b7fde01a6fcc350010d4b8c4f916fecca81 | |
parent | 56e5e1230b4e0bfc4f264e6750cca4f7dc0c9795 (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.c | 13 |
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 } |