Page MenuHomeFreeBSD

D41786.id127792.diff
No OneTemporary

D41786.id127792.diff

diff --git a/sys/riscv/riscv/trap.c b/sys/riscv/riscv/trap.c
--- a/sys/riscv/riscv/trap.c
+++ b/sys/riscv/riscv/trap.c
@@ -299,7 +299,7 @@
return;
}
#endif
- panic("Fatal page fault at %#lx: %#016lx", frame->tf_sepc, stval);
+ panic("Fatal page fault at %#lx: %#lx", frame->tf_sepc, stval);
}
void
@@ -326,7 +326,7 @@
return;
#endif
- CTR4(KTR_TRAP, "%s: exception=%lu, sepc=%lx, stval=%lx", __func__,
+ CTR4(KTR_TRAP, "%s: exception=%lu, sepc=%#lx, stval=%#lx", __func__,
exception, frame->tf_sepc, frame->tf_stval);
switch (exception) {
@@ -334,13 +334,14 @@
case SCAUSE_STORE_ACCESS_FAULT:
case SCAUSE_INST_ACCESS_FAULT:
dump_regs(frame);
- panic("Memory access exception at 0x%016lx\n", frame->tf_sepc);
+ panic("Memory access exception at %#lx: %#lx",
+ frame->tf_sepc, frame->tf_stval);
break;
case SCAUSE_LOAD_MISALIGNED:
case SCAUSE_STORE_MISALIGNED:
case SCAUSE_INST_MISALIGNED:
dump_regs(frame);
- panic("Misaligned address exception at %#016lx: %#016lx\n",
+ panic("Misaligned address exception at %#lx: %#lx",
frame->tf_sepc, frame->tf_stval);
break;
case SCAUSE_STORE_PAGE_FAULT:
@@ -358,16 +359,34 @@
kdb_trap(exception, 0, frame);
#else
dump_regs(frame);
- panic("No debugger in kernel.\n");
+ panic("No debugger in kernel.");
#endif
break;
case SCAUSE_ILLEGAL_INSTRUCTION:
+ {
+ int width;
+
+ if ((frame->tf_stval & 0x3) != 0x3) {
+ /* 16-bit instructions with aa != 11 */
+ width = 4;
+ } else if ((frame->tf_stval & 0x1f) != 0x1f) {
+ /* 32-bit instructions with bbb != 111 */
+ width = 8;
+ } else if ((frame->tf_stval & 0x3f) == 0x1f) {
+ /* 48-bit instructions with 011111 in low bits */
+ width = 12;
+ } else {
+ /* 64-bit or longer instructions */
+ width = 16;
+ }
dump_regs(frame);
- panic("Illegal instruction at 0x%016lx\n", frame->tf_sepc);
+ panic("Illegal instruction 0x%0*lx at %#lx", width,
+ frame->tf_stval, frame->tf_sepc);
break;
+ }
default:
dump_regs(frame);
- panic("Unknown kernel exception %lx trap value %lx\n",
+ panic("Unknown kernel exception %#lx trap value %#lx",
exception, frame->tf_stval);
}
}
@@ -400,7 +419,7 @@
}
intr_enable();
- CTR4(KTR_TRAP, "%s: exception=%lu, sepc=%lx, stval=%lx", __func__,
+ CTR4(KTR_TRAP, "%s: exception=%lu, sepc=%#lx, stval=%#lx", __func__,
exception, frame->tf_sepc, frame->tf_stval);
switch (exception) {
@@ -450,7 +469,7 @@
break;
default:
dump_regs(frame);
- panic("Unknown userland exception %lx, trap value %lx\n",
+ panic("Unknown userland exception %#lx, trap value %#lx",
exception, frame->tf_stval);
}
}

File Metadata

Mime Type
text/plain
Expires
Tue, Oct 6, 12:28 AM (10 h, 44 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40267857
Default Alt Text
D41786.id127792.diff (2 KB)

Event Timeline