git: e621cb0be2a3 - main - amd64: dump standard registers when crashing
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 25 Aug 2022 18:16:26 UTC
The branch main has been updated by mjg:
URL: https://cgit.FreeBSD.org/src/commit/?id=e621cb0be2a32938844c2e1fdb085dc21620334b
commit e621cb0be2a32938844c2e1fdb085dc21620334b
Author: Mateusz Guzik <mjg@FreeBSD.org>
AuthorDate: 2022-08-25 17:30:31 +0000
Commit: Mateusz Guzik <mjg@FreeBSD.org>
CommitDate: 2022-08-25 17:33:07 +0000
amd64: dump standard registers when crashing
Sample output:
Fatal trap 12: page fault while in kernel mode
cpuid = 1; apic id = 01
fault virtual address = 0x2
fault code = supervisor write data, page not present
instruction pointer = 0x20:0xffffffff80556853
stack pointer = 0x28:0xffffffff8141bf50
frame pointer = 0x28:0xffffffff8141bfa0
code segment = base 0x0, limit 0xfffff, type 0x1b
= DPL 0, pres 1, long 1, def32 0, gran 1
processor eflags = interrupt enabled, resume, IOPL = 0
current process = 0 (swapper)
rdi: fffff80002c9c400 rsi: ffffffff80b89183 rdx: 0
rcx: 2 r8: fe r9: 1
rax: fffff80002c9c400 rbx: 1 rbp: ffffffff8141bfa0
r10: 0 r11: ffffffff80b97f8c r12: 0
r13: 0 r14: 0 r15: 0
trap number = 12
panic: page fault
cpuid = 1
time = 1
Reviewed by: kib
Sponsored by: Rubicon Communications, LLC ("Netgate")
Differential Revision: https://reviews.freebsd.org/D36348
---
sys/amd64/amd64/trap.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/sys/amd64/amd64/trap.c b/sys/amd64/amd64/trap.c
index a94722851ce1..39a2ef1d373f 100644
--- a/sys/amd64/amd64/trap.c
+++ b/sys/amd64/amd64/trap.c
@@ -931,6 +931,17 @@ trap_fatal(struct trapframe *frame, vm_offset_t eva)
printf("current process = %d (%s)\n",
curproc->p_pid, curthread->td_name);
+ printf("rdi: %16lx rsi: %16lx rdx: %16lx\n", frame->tf_rdi,
+ frame->tf_rsi, frame->tf_rdx);
+ printf("rcx: %16lx r8: %16lx r9: %16lx\n", frame->tf_rcx,
+ frame->tf_r8, frame->tf_r9);
+ printf("rax: %16lx rbx: %16lx rbp: %16lx\n", frame->tf_rax,
+ frame->tf_rbx, frame->tf_rbp);
+ printf("r10: %16lx r11: %16lx r12: %16lx\n", frame->tf_r10,
+ frame->tf_r11, frame->tf_r12);
+ printf("r13: %16lx r14: %16lx r15: %16lx\n", frame->tf_r13,
+ frame->tf_r14, frame->tf_r15);
+
#ifdef KDB
if (debugger_on_trap) {
kdb_why = KDB_WHY_TRAP;