Add register dump to trap handler
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 33s
Builds / ExectOS (amd64, debug) (push) Successful in 35s
Builds / ExectOS (i686, debug) (push) Successful in 30s
Builds / ExectOS (i686, release) (push) Successful in 29s

This commit is contained in:
2025-09-25 08:28:02 +02:00
parent 4ee3daa8f8
commit 332e57f305
2 changed files with 78 additions and 44 deletions

View File

@@ -23,6 +23,25 @@ XTCDECL
VOID
AR::Traps::DispatchTrap(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Caught trap: 0x%.2llX with error code: %.4llX at RIP: 0x%.16llX\n"
L"RAX: 0x%.16llX, RBX: 0x%.16llX, RCX: 0x%.16llX, RDX: 0x%.16llX\n"
L"R8: 0x%.16llX, R9: 0x%.16llX, R10: 0x%.16llX, R11: 0x%.16llX\n"
L"R12: 0x%.16llX, R13: 0x%.16llX, R14: 0x%.16llX, R15: 0x%.16llX\n"
L"RBP: 0x%.16llX, RSP: 0x%.16llX, RDI: 0x%.16llX, RSI: 0x%.16llX\n"
L"DR0: 0x%.16llX, DR1: 0x%.16llX, DR2: 0x%.16llX, DR3: 0x%.16llX\n"
L"DR6: 0x%.16llX, DR7: 0x%.16llX\n"
L"CR2: 0x%.16llX, CR3: 0x%.16llX, CS: 0x%.16llX, DS: 0x%.16hX\n"
L"ES: 0x%.16hX, FS: 0x%.16hX, GS: 0x%.16hX, SS: 0x%.16llX\n",
TrapFrame->Vector, TrapFrame->ErrorCode, TrapFrame->Rip,
TrapFrame->Rax, TrapFrame->Rbx, TrapFrame->Rcx, TrapFrame->Rdx,
TrapFrame->R8, TrapFrame->R9, TrapFrame->R10, TrapFrame->R11,
TrapFrame->R12, TrapFrame->R13, TrapFrame->R14, TrapFrame->R15,
TrapFrame->Rbp, TrapFrame->Rsp, TrapFrame->Rdi, TrapFrame->Rsi,
TrapFrame->Dr0, TrapFrame->Dr1, TrapFrame->Dr2, TrapFrame->Dr3,
TrapFrame->Dr6, TrapFrame->Dr7,
TrapFrame->Cr2, TrapFrame->Cr3, TrapFrame->SegCs, TrapFrame->SegDs,
TrapFrame->SegEs, TrapFrame->SegFs, TrapFrame->SegGs, TrapFrame->SegSs);
/* Check vector and call appropriate handler */
switch(TrapFrame->Vector)
{
@@ -172,7 +191,7 @@ VOID
AR::Traps::HandleTrap00(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Division-By-Zero Error (0x00)!\n");
for(;;);
KE::Crash::Panic(0x00);
}
/**
@@ -190,7 +209,7 @@ VOID
AR::Traps::HandleTrap01(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Debug exception (0x01)!\n");
for(;;);
KE::Crash::Panic(0x01);
}
/**
@@ -208,7 +227,7 @@ VOID
AR::Traps::HandleTrap02(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Non-Maskable-Interrupt (0x02)!\n");
for(;;);
KE::Crash::Panic(0x02);
}
/**
@@ -226,7 +245,7 @@ VOID
AR::Traps::HandleTrap03(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled INT3 (0x03)!\n");
for(;;);
KE::Crash::Panic(0x03);
}
/**
@@ -244,7 +263,7 @@ VOID
AR::Traps::HandleTrap04(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Overflow exception (0x04)!\n");
for(;;);
KE::Crash::Panic(0x04);
}
/**
@@ -262,7 +281,7 @@ VOID
AR::Traps::HandleTrap05(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Bound-Range-Exceeded exception (0x05)!\n");
for(;;);
KE::Crash::Panic(0x05);
}
/**
@@ -280,7 +299,7 @@ VOID
AR::Traps::HandleTrap06(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Invalid Opcode exception (0x06)!\n");
for(;;);
KE::Crash::Panic(0x06);
}
/**
@@ -298,7 +317,7 @@ VOID
AR::Traps::HandleTrap07(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Device Not Available exception (0x07)!\n");
for(;;);
KE::Crash::Panic(0x07);
}
/**
@@ -316,7 +335,7 @@ VOID
AR::Traps::HandleTrap08(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Double-Fault exception (0x08)!\n");
for(;;);
KE::Crash::Panic(0x08);
}
/**
@@ -334,7 +353,7 @@ VOID
AR::Traps::HandleTrap09(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Segment-Overrun exception (0x09)!\n");
for(;;);
KE::Crash::Panic(0x09);
}
/**
@@ -352,7 +371,7 @@ VOID
AR::Traps::HandleTrap0A(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Invalid-TSS exception (0x0A)!\n");
for(;;);
KE::Crash::Panic(0x0A);
}
/**
@@ -370,7 +389,7 @@ VOID
AR::Traps::HandleTrap0B(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Segment-Not-Present exception (0x0B)!\n");
for(;;);
KE::Crash::Panic(0x0B);
}
/**
@@ -388,7 +407,7 @@ VOID
AR::Traps::HandleTrap0C(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Stack-Segment-Fault exception (0x0C)!\n");
for(;;);
KE::Crash::Panic(0x0C);
}
/**
@@ -406,7 +425,7 @@ VOID
AR::Traps::HandleTrap0D(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled General-Protection-Fault (0x0D)!\n");
for(;;);
KE::Crash::Panic(0x0D);
}
/**
@@ -424,7 +443,7 @@ VOID
AR::Traps::HandleTrap0E(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Page-Fault exception (0x0E)!\n");
for(;;);
KE::Crash::Panic(0x0E);
}
/**
@@ -442,7 +461,7 @@ VOID
AR::Traps::HandleTrap10(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled x87 Floating-Point exception (0x10)!\n");
for(;;);
KE::Crash::Panic(0x10);
}
/**
@@ -460,7 +479,7 @@ VOID
AR::Traps::HandleTrap11(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Alignment-Check exception (0x11)!\n");
for(;;);
KE::Crash::Panic(0x11);
}
/**
@@ -478,7 +497,7 @@ VOID
AR::Traps::HandleTrap12(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Machine-Check exception (0x12)!\n");
for(;;);
KE::Crash::Panic(0x12);
}
/**
@@ -496,7 +515,7 @@ VOID
AR::Traps::HandleTrap13(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled SIMD Floating-Point exception (0x13)!\n");
for(;;);
KE::Crash::Panic(0x13);
}
/**
@@ -531,7 +550,7 @@ VOID
AR::Traps::HandleTrap2C(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Assertion (0x2C)!\n");
for(;;);
KE::Crash::Panic(0x2C);
}
/**
@@ -549,7 +568,7 @@ VOID
AR::Traps::HandleTrap2D(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Debug-Service-Request (0x2D)!\n");
for(;;);
KE::Crash::Panic(0x2D);
}
/**
@@ -601,7 +620,7 @@ VOID
AR::Traps::HandleTrapFF(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Unexpected-Interrupt (0xFF)!\n");
for(;;);
KE::Crash::Panic(0xFF);
}
/**

View File

@@ -23,6 +23,21 @@ XTCDECL
VOID
AR::Traps::DispatchTrap(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Caught trap: 0x%.2lX with error code: %.4lX at EIP: 0x%.8lX\n"
L"EAX: 0x%.8lX, EBX: 0x%.8lX, ECX: 0x%.8lX, EDX: 0x%.8lX\n"
L"EBP: 0x%.8lX, ESP: 0x%.8lX, EDI: 0x%.8lX, ESI: 0x%.8lX\n"
L"DR0: 0x%.8lX, DR1: 0x%.8lX, DR2: 0x%.8lX, DR3: 0x%.8lX\n"
L"DR6: 0x%.8lX, DR7: 0x%.8lX\n"
L"CR2: 0x%.8lX, CR3: 0x%.8lX, CS: 0x%.8lX, DS: 0x%.8hX\n"
L"ES: 0x%.8hX, FS: 0x%.8hX, GS: 0x%.8hX, SS: 0x%.8lX\n",
TrapFrame->Vector, TrapFrame->ErrorCode, TrapFrame->Eip,
TrapFrame->Eax, TrapFrame->Ebx, TrapFrame->Ecx, TrapFrame->Edx,
TrapFrame->Ebp, TrapFrame->Esp, TrapFrame->Edi, TrapFrame->Esi,
TrapFrame->Dr0, TrapFrame->Dr1, TrapFrame->Dr2, TrapFrame->Dr3,
TrapFrame->Dr6, TrapFrame->Dr7,
TrapFrame->Cr2, TrapFrame->Cr3, TrapFrame->SegCs, TrapFrame->SegDs,
TrapFrame->SegEs, TrapFrame->SegFs, TrapFrame->SegGs, TrapFrame->SegSs);
/* Check vector and call appropriate handler */
switch(TrapFrame->Vector)
{
@@ -144,7 +159,7 @@ VOID
AR::Traps::HandleTrap00(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Division-By-Zero Error (0x00)!\n");
for(;;);
KE::Crash::Panic(0x00);
}
/**
@@ -162,7 +177,7 @@ VOID
AR::Traps::HandleTrap01(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Debug exception (0x01)!\n");
for(;;);
KE::Crash::Panic(0x01);
}
/**
@@ -180,7 +195,7 @@ VOID
AR::Traps::HandleTrap02(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Non-Maskable-Interrupt (0x02)!\n");
for(;;);
KE::Crash::Panic(0x02);
}
/**
@@ -198,7 +213,7 @@ VOID
AR::Traps::HandleTrap03(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled INT3 (0x03)!\n");
for(;;);
KE::Crash::Panic(0x03);
}
/**
@@ -216,7 +231,7 @@ VOID
AR::Traps::HandleTrap04(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Overflow exception (0x04)!\n");
for(;;);
KE::Crash::Panic(0x04);
}
/**
@@ -234,7 +249,7 @@ VOID
AR::Traps::HandleTrap05(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Bound-Range-Exceeded exception (0x05)!\n");
for(;;);
KE::Crash::Panic(0x05);
}
/**
@@ -252,7 +267,7 @@ VOID
AR::Traps::HandleTrap06(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Invalid Opcode exception (0x06)!\n");
for(;;);
KE::Crash::Panic(0x06);
}
/**
@@ -270,7 +285,7 @@ VOID
AR::Traps::HandleTrap07(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Device Not Available exception (0x07)!\n");
for(;;);
KE::Crash::Panic(0x07);
}
/**
@@ -288,7 +303,7 @@ VOID
AR::Traps::HandleTrap08(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Double-Fault exception (0x08)!\n");
for(;;);
KE::Crash::Panic(0x08);
}
/**
@@ -306,7 +321,7 @@ VOID
AR::Traps::HandleTrap09(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Segment-Overrun exception (0x09)!\n");
for(;;);
KE::Crash::Panic(0x09);
}
/**
@@ -324,7 +339,7 @@ VOID
AR::Traps::HandleTrap0A(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Invalid-TSS exception (0x0A)!\n");
for(;;);
KE::Crash::Panic(0x0A);
}
/**
@@ -342,7 +357,7 @@ VOID
AR::Traps::HandleTrap0B(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Segment-Not-Present exception (0x0B)!\n");
for(;;);
KE::Crash::Panic(0x0B);
}
/**
@@ -360,7 +375,7 @@ VOID
AR::Traps::HandleTrap0C(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Stack-Segment-Fault exception (0x0C)!\n");
for(;;);
KE::Crash::Panic(0x0C);
}
/**
@@ -378,7 +393,7 @@ VOID
AR::Traps::HandleTrap0D(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled General-Protection-Fault (0x0D)!\n");
for(;;);
KE::Crash::Panic(0x0D);
}
/**
@@ -396,7 +411,7 @@ VOID
AR::Traps::HandleTrap0E(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Page-Fault exception (0x0E)!\n");
for(;;);
KE::Crash::Panic(0x0E);
}
/**
@@ -414,7 +429,7 @@ VOID
AR::Traps::HandleTrap10(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled x87 Floating-Point exception (0x10)!\n");
for(;;);
KE::Crash::Panic(0x10);
}
/**
@@ -432,7 +447,7 @@ VOID
AR::Traps::HandleTrap11(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Alignment-Check exception (0x11)!\n");
for(;;);
KE::Crash::Panic(0x11);
}
/**
@@ -450,7 +465,7 @@ VOID
AR::Traps::HandleTrap12(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Machine-Check exception (0x12)!\n");
for(;;);
KE::Crash::Panic(0x12);
}
/**
@@ -468,7 +483,7 @@ VOID
AR::Traps::HandleTrap13(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled SIMD Floating-Point exception (0x13)!\n");
for(;;);
KE::Crash::Panic(0x13);
}
/**
@@ -520,7 +535,7 @@ VOID
AR::Traps::HandleTrap2C(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Assertion (0x2C)!\n");
for(;;);
KE::Crash::Panic(0x2C);
}
/**
@@ -538,7 +553,7 @@ VOID
AR::Traps::HandleTrap2D(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Debug-Service-Request (0x2D)!\n");
for(;;);
KE::Crash::Panic(0x2D);
}
/**
@@ -573,7 +588,7 @@ VOID
AR::Traps::HandleTrapFF(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Handled Unexpected-Interrupt (0xFF)!\n");
for(;;);
KE::Crash::Panic(0xFF);
}
/**