Page MenuHomeFreeBSD

D15431.id42570.diff
No OneTemporary

D15431.id42570.diff

Index: sys/arm/arm/trap-v4.c
===================================================================
--- sys/arm/arm/trap-v4.c
+++ sys/arm/arm/trap-v4.c
@@ -404,7 +404,16 @@
struct ksig *ksig)
{
const char *mode;
+#ifdef KDB
+ bool handled;
+#endif
+#ifdef KDB
+ if (kdb_active) {
+ kdb_reenter();
+ return (0);
+ }
+#endif
#ifdef KDTRACE_HOOKS
if (!TRAP_USERMODE(tf)) {
if (dtrace_trap_func != NULL && (*dtrace_trap_func)(tf, far & FAULT_TYPE_MASK))
@@ -447,9 +456,13 @@
printf(", pc =%08x\n\n", tf->tf_pc);
#ifdef KDB
- if (debugger_on_panic || kdb_active)
- if (kdb_trap(fsr, 0, tf))
+ if (debugger_on_panic) {
+ kdb_why = KDB_WHY_TRAP;
+ handled = kdb_trap(fsr, 0, tf);
+ kdb_why = KDB_WHY_UNSET;
+ if (handled)
return (0);
+ }
#endif
panic("Fatal abort");
/*NOTREACHED*/
Index: sys/arm/arm/trap-v6.c
===================================================================
--- sys/arm/arm/trap-v6.c
+++ sys/arm/arm/trap-v6.c
@@ -599,8 +599,11 @@
printf(", pc =%08x\n\n", tf->tf_pc);
#ifdef KDB
- if (debugger_on_panic || kdb_active)
+ if (debugger_on_panic) {
+ kdb_why = KDB_WHY_TRAP;
kdb_trap(fsr, 0, tf);
+ kdb_why = KDB_WHY_UNSET;
+ }
#endif
panic("Fatal abort");
/*NOTREACHED*/
Index: sys/arm64/arm64/trap.c
===================================================================
--- sys/arm64/arm64/trap.c
+++ sys/arm64/arm64/trap.c
@@ -156,6 +156,9 @@
vm_prot_t ftype;
vm_offset_t va;
int error, sig, ucode;
+#ifdef KDB
+ bool handled;
+#endif
/*
* According to the ARMv8-A rev. A.g, B2.10.5 "Load-Exclusive
@@ -226,9 +229,14 @@
printf(" esr: %.8lx\n", esr);
#ifdef KDB
- if (debugger_on_panic || kdb_active)
- if (kdb_trap(ESR_ELx_EXCEPTION(esr), 0, frame))
+ if (debugger_on_panic) {
+ kdb_why = KDB_WHY_TRAP;
+ handled = kdb_trap(ESR_ELx_EXCEPTION(esr), 0,
+ frame);
+ kdb_why = KDB_WHY_UNSET;
+ if (handled)
return;
+ }
#endif
panic("vm_fault failed: %lx", frame->tf_elr);
}
Index: sys/mips/mips/trap.c
===================================================================
--- sys/mips/mips/trap.c
+++ sys/mips/mips/trap.c
@@ -530,7 +530,12 @@
register_t *frame_regs;
trapdebug_enter(trapframe, 0);
-
+#ifdef KDB
+ if (kdb_active) {
+ kdb_reenter();
+ return (0);
+ }
+#endif
type = (trapframe->cause & MIPS_CR_EXC_CODE) >> MIPS_CR_EXC_CODE_SHIFT;
if (TRAPF_USERMODE(trapframe)) {
type |= T_USER;
@@ -1095,8 +1100,10 @@
#endif
#ifdef KDB
- if (debugger_on_panic || kdb_active) {
+ if (debugger_on_panic) {
+ kdb_why = KDB_WHY_TRAP;
kdb_trap(type, 0, trapframe);
+ kdb_why = KDB_WHY_UNSET;
}
#endif
panic("trap");

File Metadata

Mime Type
text/plain
Expires
Sun, Dec 21, 7:55 PM (3 h, 11 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27120636
Default Alt Text
D15431.id42570.diff (2 KB)

Event Timeline