mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 08:17:45 +00:00
Kernel: Dump registers and code on ring0 page fault.
This commit is contained in:
parent
b896d4b237
commit
e28de4ad5e
1 changed files with 8 additions and 7 deletions
|
@ -211,7 +211,7 @@ void exception_14_handler(RegisterDumpWithExceptionCode& regs)
|
||||||
esp = regs.esp_if_crossRing;
|
esp = regs.esp_if_crossRing;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef PAGE_FAULT_DEBUG
|
auto dump_registers_and_code = [&] {
|
||||||
dbgprintf("exception code: %w\n", regs.exception_code);
|
dbgprintf("exception code: %w\n", regs.exception_code);
|
||||||
dbgprintf("pc=%w:%x ds=%w es=%w fs=%w gs=%w\n", regs.cs, regs.eip, regs.ds, regs.es, regs.fs, regs.gs);
|
dbgprintf("pc=%w:%x ds=%w es=%w fs=%w gs=%w\n", regs.cs, regs.eip, regs.ds, regs.es, regs.fs, regs.gs);
|
||||||
dbgprintf("stk=%w:%x\n", ss, esp);
|
dbgprintf("stk=%w:%x\n", ss, esp);
|
||||||
|
@ -229,13 +229,18 @@ void exception_14_handler(RegisterDumpWithExceptionCode& regs)
|
||||||
codeptr[6],
|
codeptr[6],
|
||||||
codeptr[7]
|
codeptr[7]
|
||||||
);
|
);
|
||||||
#endif
|
};
|
||||||
|
|
||||||
if (current->isRing0()) {
|
if (current->isRing0()) {
|
||||||
|
dump_registers_and_code();
|
||||||
current->dumpRegions();
|
current->dumpRegions();
|
||||||
HANG;
|
HANG;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef PAGE_FAULT_DEBUG
|
||||||
|
dump_registers_and_code();
|
||||||
|
#endif
|
||||||
|
|
||||||
auto response = MM.handle_page_fault(PageFault(regs.exception_code, LinearAddress(faultAddress)));
|
auto response = MM.handle_page_fault(PageFault(regs.exception_code, LinearAddress(faultAddress)));
|
||||||
|
|
||||||
if (response == PageFaultResponse::ShouldCrash) {
|
if (response == PageFaultResponse::ShouldCrash) {
|
||||||
|
@ -245,11 +250,7 @@ void exception_14_handler(RegisterDumpWithExceptionCode& regs)
|
||||||
regs.exception_code & 2 ? "write" : "read",
|
regs.exception_code & 2 ? "write" : "read",
|
||||||
faultAddress);
|
faultAddress);
|
||||||
|
|
||||||
kprintf("exception code: %w\n", regs.exception_code);
|
dump_registers_and_code();
|
||||||
kprintf("pc=%w:%x ds=%w es=%w fs=%w gs=%w\n", regs.cs, regs.eip, regs.ds, regs.es, regs.fs, regs.gs);
|
|
||||||
kprintf("stk=%w:%x\n", ss, esp);
|
|
||||||
kprintf("eax=%x ebx=%x ecx=%x edx=%x\n", regs.eax, regs.ebx, regs.ecx, regs.edx);
|
|
||||||
kprintf("ebp=%x esp=%x esi=%x edi=%x\n", regs.ebp, esp, regs.esi, regs.edi);
|
|
||||||
current->crash();
|
current->crash();
|
||||||
} else if (response == PageFaultResponse::Continue) {
|
} else if (response == PageFaultResponse::Continue) {
|
||||||
#ifdef PAGE_FAULT_DEBUG
|
#ifdef PAGE_FAULT_DEBUG
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue