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
This commit is contained in:
Mateusz Guzik 2022-08-25 17:30:31 +00:00
parent 49afea1059
commit e621cb0be2

View File

@ -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;