mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-07-11 15:29:18 +00:00
Improved symbol table + every process have one allocated
This commit is contained in:
@ -23,7 +23,7 @@ namespace CrashHandler
|
||||
uint64_t rip;
|
||||
};
|
||||
|
||||
SafeFunction void TraceFrames(CHArchTrapFrame *Frame, int Count)
|
||||
SafeFunction void TraceFrames(CHArchTrapFrame *Frame, int Count, SymbolResolver::Symbols *SymHandle, bool Kernel)
|
||||
{
|
||||
|
||||
#if defined(__amd64__)
|
||||
@ -44,9 +44,9 @@ namespace CrashHandler
|
||||
#endif
|
||||
EHPrint("\e7925CC-");
|
||||
#if defined(__amd64__)
|
||||
EHPrint("\eAA25CC%s", KernelSymbolTable->GetSymbolFromAddress(Frame->rip));
|
||||
EHPrint("\eAA25CC%s", SymHandle->GetSymbolFromAddress(Frame->rip));
|
||||
#elif defined(__i386__)
|
||||
EHPrint("\eAA25CC%s", KernelSymbolTable->GetSymbolFromAddress(Frame->eip));
|
||||
EHPrint("\eAA25CC%s", SymHandle->GetSymbolFromAddress(Frame->eip));
|
||||
#elif defined(__aarch64__)
|
||||
#endif
|
||||
EHPrint("\e7981FC <- Exception");
|
||||
@ -57,15 +57,15 @@ namespace CrashHandler
|
||||
#if defined(__amd64__)
|
||||
EHPrint("\e2565CC%p", (void *)Frame->rip);
|
||||
EHPrint("\e7925CC-");
|
||||
if (Frame->rip >= 0xFFFFFFFF80000000 && Frame->rip <= (uint64_t)&_kernel_end)
|
||||
EHPrint("\eAA25CC%s", KernelSymbolTable->GetSymbolFromAddress(Frame->rip));
|
||||
if ((Frame->rip >= 0xFFFFFFFF80000000 && Frame->rip <= (uint64_t)&_kernel_end) || !Kernel)
|
||||
EHPrint("\eAA25CC%s", SymHandle->GetSymbolFromAddress(Frame->rip));
|
||||
else
|
||||
EHPrint("Outside Kernel");
|
||||
#elif defined(__i386__)
|
||||
EHPrint("\e2565CC%p", (void *)Frame->eip);
|
||||
EHPrint("\e7925CC-");
|
||||
if (Frame->eip >= 0xC0000000 && Frame->eip <= (uint64_t)&_kernel_end)
|
||||
EHPrint("\eAA25CC%s", KernelSymbolTable->GetSymbolFromAddress(Frame->eip));
|
||||
if ((Frame->eip >= 0xC0000000 && Frame->eip <= (uint64_t)&_kernel_end) || !Kernel)
|
||||
EHPrint("\eAA25CC%s", SymHandle->GetSymbolFromAddress(Frame->eip));
|
||||
else
|
||||
EHPrint("Outside Kernel");
|
||||
#elif defined(__aarch64__)
|
||||
@ -78,12 +78,12 @@ namespace CrashHandler
|
||||
EHPrint("\n\e2565CC%p", (void *)frames->rip);
|
||||
EHPrint("\e7925CC-");
|
||||
#if defined(__amd64__)
|
||||
if (frames->rip >= 0xFFFFFFFF80000000 && frames->rip <= (uint64_t)&_kernel_end)
|
||||
if ((frames->rip >= 0xFFFFFFFF80000000 && frames->rip <= (uint64_t)&_kernel_end) || !Kernel)
|
||||
#elif defined(__i386__)
|
||||
if (frames->rip >= 0xC0000000 && frames->rip <= (uint64_t)&_kernel_end)
|
||||
if ((frames->rip >= 0xC0000000 && frames->rip <= (uint64_t)&_kernel_end) || !Kernel)
|
||||
#elif defined(__aarch64__)
|
||||
#endif
|
||||
EHPrint("\e25CCC9%s", KernelSymbolTable->GetSymbolFromAddress(frames->rip));
|
||||
EHPrint("\e25CCC9%s", SymHandle->GetSymbolFromAddress(frames->rip));
|
||||
else
|
||||
EHPrint("\eFF4CA9Outside Kernel");
|
||||
|
||||
@ -92,5 +92,6 @@ namespace CrashHandler
|
||||
frames = frames->rbp;
|
||||
}
|
||||
}
|
||||
EHPrint("\n");
|
||||
}
|
||||
}
|
||||
|
@ -20,9 +20,20 @@ namespace CrashHandler
|
||||
{
|
||||
SafeFunction void DisplayStackFrameScreen(CRData data)
|
||||
{
|
||||
EHPrint("\eFAFAFATracing 40 frames...\n");
|
||||
TraceFrames(data.Frame, 40);
|
||||
EHPrint("\n\n\eFAFAFATracing interrupt frames...\n");
|
||||
EHPrint("\eFAFAFATracing 40 frames...");
|
||||
TraceFrames(data.Frame, 40, KernelSymbolTable, true);
|
||||
if (data.Process)
|
||||
{
|
||||
EHPrint("\n\eFAFAFATracing 40 process frames...");
|
||||
SymbolResolver::Symbols *sh = data.Process->ELFSymbolTable;
|
||||
if (!sh)
|
||||
{
|
||||
EHPrint("\eFF0000< No symbol table available. >\n");
|
||||
return;
|
||||
}
|
||||
TraceFrames(data.Frame, 40, sh, false);
|
||||
}
|
||||
EHPrint("\n\eFAFAFATracing interrupt frames...");
|
||||
for (uint64_t i = 0; i < 8; i++)
|
||||
{
|
||||
if (EHIntFrames[i])
|
||||
|
@ -256,7 +256,7 @@ namespace CrashHandler
|
||||
~CrashKeyboardDriver();
|
||||
};
|
||||
|
||||
void TraceFrames(CHArchTrapFrame *Frame, int Count);
|
||||
void TraceFrames(CHArchTrapFrame *Frame, int Count, SymbolResolver::Symbols *SymHandle, bool Kernel);
|
||||
|
||||
void ArrowInput(uint8_t key);
|
||||
void UserInput(char *Input);
|
||||
|
Reference in New Issue
Block a user