Index: sys/arm/arm/trap-v6.c =================================================================== --- sys/arm/arm/trap-v6.c +++ sys/arm/arm/trap-v6.c @@ -562,6 +562,9 @@ bool usermode; const char *mode; const char *rw_mode; +#ifdef KDB + bool handled; +#endif usermode = TRAPF_USERMODE(tf); #ifdef KDTRACE_HOOKS @@ -609,8 +612,10 @@ #ifdef KDB if (debugger_on_trap) { kdb_why = KDB_WHY_TRAP; - kdb_trap(fsr, 0, tf); + handled = kdb_trap(fsr, 0, tf); kdb_why = KDB_WHY_UNSET; + if (handled) + return; } #endif panic("Fatal abort"); Index: sys/mips/mips/trap.c =================================================================== --- sys/mips/mips/trap.c +++ sys/mips/mips/trap.c @@ -524,6 +524,9 @@ register_t pc; int cop, error; register_t *frame_regs; +#ifdef KDB + bool handled; +#endif trapdebug_enter(trapframe, 0); #ifdef KDB @@ -1091,8 +1094,10 @@ #ifdef KDB if (debugger_on_trap) { kdb_why = KDB_WHY_TRAP; - kdb_trap(type, 0, trapframe); + handled = kdb_trap(type, 0, trapframe); kdb_why = KDB_WHY_UNSET; + if (handled) + return; } #endif panic("trap");