mirror of
https://github.com/Fennix-Project/Kernel.git
synced 2025-05-28 07:24:37 +00:00
Refactor code to improve performance and readability
This commit is contained in:
parent
69c61037ed
commit
11221b205a
@ -446,92 +446,95 @@ namespace CrashHandler
|
|||||||
Address = strtol(arg, NULL, 16);
|
Address = strtol(arg, NULL, 16);
|
||||||
debug("Converted %s to %#lx", arg, Address);
|
debug("Converted %s to %#lx", arg, Address);
|
||||||
Memory::PageTable *BasePageTable = (Memory::PageTable *)Address;
|
Memory::PageTable *BasePageTable = (Memory::PageTable *)Address;
|
||||||
if (Memory::Virtual().Check(BasePageTable))
|
if (!Memory::Virtual().Check(BasePageTable))
|
||||||
|
{
|
||||||
|
EHPrint("\eFF4400Address %#lx is not valid!\eFAFAFA\n", Address);
|
||||||
|
goto DrawBottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int PMLIndex = 0; PMLIndex < 512; PMLIndex++)
|
||||||
{
|
{
|
||||||
for (int PMLIndex = 0; PMLIndex < 512; PMLIndex++)
|
|
||||||
{
|
|
||||||
#if defined(a64)
|
#if defined(a64)
|
||||||
Memory::PageMapLevel4 PML4 = BasePageTable->Entries[PMLIndex];
|
Memory::PageMapLevel4 PML4 = BasePageTable->Entries[PMLIndex];
|
||||||
|
EHPrint("\e888888# \eAABBCC%03d-%03d-%03d-%03d\e4500F5: P:%s RW:%s US:%s PWT:%s PCB:%s A:%s NX:%s Address:\e888888%#lx\n",
|
||||||
|
PMLIndex, 0, 0, 0,
|
||||||
|
PML4.Present ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PML4.ReadWrite ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PML4.UserSupervisor ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PML4.WriteThrough ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PML4.CacheDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PML4.Accessed ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PML4.ExecuteDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PML4.GetAddress() << 12);
|
||||||
|
Display->SetBuffer(SBIdx);
|
||||||
|
if (!PML4.Present)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Memory::PageDirectoryPointerTableEntryPtr *PDPTE = (Memory::PageDirectoryPointerTableEntryPtr *)((uintptr_t)PML4.GetAddress() << 12);
|
||||||
|
if (!PDPTE)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (int PDPTEIndex = 0; PDPTEIndex < 512; PDPTEIndex++)
|
||||||
|
{
|
||||||
EHPrint("\e888888# \eAABBCC%03d-%03d-%03d-%03d\e4500F5: P:%s RW:%s US:%s PWT:%s PCB:%s A:%s NX:%s Address:\e888888%#lx\n",
|
EHPrint("\e888888# \eAABBCC%03d-%03d-%03d-%03d\e4500F5: P:%s RW:%s US:%s PWT:%s PCB:%s A:%s NX:%s Address:\e888888%#lx\n",
|
||||||
PMLIndex, 0, 0, 0,
|
PMLIndex, PDPTEIndex, 0, 0,
|
||||||
PML4.Present ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PDPTE->Entries[PDPTEIndex].Present ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PML4.ReadWrite ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PDPTE->Entries[PDPTEIndex].ReadWrite ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PML4.UserSupervisor ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PDPTE->Entries[PDPTEIndex].UserSupervisor ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PML4.WriteThrough ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PDPTE->Entries[PDPTEIndex].WriteThrough ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PML4.CacheDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PDPTE->Entries[PDPTEIndex].CacheDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PML4.Accessed ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PDPTE->Entries[PDPTEIndex].Accessed ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PML4.ExecuteDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PDPTE->Entries[PDPTEIndex].ExecuteDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PML4.GetAddress() << 12);
|
PDPTE->Entries[PDPTEIndex].GetAddress() << 12);
|
||||||
Display->SetBuffer(SBIdx);
|
Display->SetBuffer(SBIdx);
|
||||||
if (PML4.Present)
|
if (!PDPTE->Entries[PDPTEIndex].Present)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Memory::PageDirectoryEntryPtr *PDE = (Memory::PageDirectoryEntryPtr *)((uintptr_t)PDPTE->Entries[PDPTEIndex].GetAddress() << 12);
|
||||||
|
if (!PDE)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (int PDEIndex = 0; PDEIndex < 512; PDEIndex++)
|
||||||
{
|
{
|
||||||
Memory::PageDirectoryPointerTableEntryPtr *PDPTE = (Memory::PageDirectoryPointerTableEntryPtr *)((uintptr_t)PML4.GetAddress() << 12);
|
EHPrint("\e888888# \eAABBCC%03d-%03d-%03d-%03d\e4500F5: P:%s RW:%s US:%s PWT:%s PCB:%s A:%s NX:%s Address:\e888888%#lx\n",
|
||||||
if (PDPTE)
|
PMLIndex, PDPTEIndex, PDEIndex, 0,
|
||||||
|
PDE->Entries[PDEIndex].Present ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PDE->Entries[PDEIndex].ReadWrite ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PDE->Entries[PDEIndex].UserSupervisor ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PDE->Entries[PDEIndex].WriteThrough ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PDE->Entries[PDEIndex].CacheDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PDE->Entries[PDEIndex].Accessed ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PDE->Entries[PDEIndex].ExecuteDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
|
PDE->Entries[PDEIndex].GetAddress() << 12);
|
||||||
|
Display->SetBuffer(SBIdx);
|
||||||
|
if (!PDE->Entries[PDEIndex].Present)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
Memory::PageTableEntryPtr *PTE = (Memory::PageTableEntryPtr *)((uintptr_t)PDE->Entries[PDEIndex].GetAddress() << 12);
|
||||||
|
if (!PTE)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
for (int PTEIndex = 0; PTEIndex < 512; PTEIndex++)
|
||||||
{
|
{
|
||||||
for (int PDPTEIndex = 0; PDPTEIndex < 512; PDPTEIndex++)
|
EHPrint("\e888888# \eAABBCC%03d-%03d-%03d-%03d\e4500F5: P:%s RW:%s US:%s PWT:%s PCB:%s A:%s D:%s PAT:%s G:%s PK:%d NX:%s Address:\e888888%#lx\n",
|
||||||
{
|
PMLIndex, PDPTEIndex, PDEIndex, PTEIndex,
|
||||||
EHPrint("\e888888# \eAABBCC%03d-%03d-%03d-%03d\e4500F5: P:%s RW:%s US:%s PWT:%s PCB:%s A:%s NX:%s Address:\e888888%#lx\n",
|
PTE->Entries[PTEIndex].Present ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PMLIndex, PDPTEIndex, 0, 0,
|
PTE->Entries[PTEIndex].ReadWrite ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PDPTE->Entries[PDPTEIndex].Present ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PTE->Entries[PTEIndex].UserSupervisor ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PDPTE->Entries[PDPTEIndex].ReadWrite ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PTE->Entries[PTEIndex].WriteThrough ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PDPTE->Entries[PDPTEIndex].UserSupervisor ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PTE->Entries[PTEIndex].CacheDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PDPTE->Entries[PDPTEIndex].WriteThrough ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PTE->Entries[PTEIndex].Accessed ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PDPTE->Entries[PDPTEIndex].CacheDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PTE->Entries[PTEIndex].Dirty ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PDPTE->Entries[PDPTEIndex].Accessed ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PTE->Entries[PTEIndex].PageAttributeTable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PDPTE->Entries[PDPTEIndex].ExecuteDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
PTE->Entries[PTEIndex].Global ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
PDPTE->Entries[PDPTEIndex].GetAddress() << 12);
|
PTE->Entries[PTEIndex].ProtectionKey,
|
||||||
Display->SetBuffer(SBIdx);
|
PTE->Entries[PTEIndex].ExecuteDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
||||||
if ((PDPTE->Entries[PDPTEIndex].Present))
|
PTE->Entries[PTEIndex].GetAddress() << 12);
|
||||||
{
|
Display->SetBuffer(SBIdx);
|
||||||
Memory::PageDirectoryEntryPtr *PDE = (Memory::PageDirectoryEntryPtr *)((uintptr_t)PDPTE->Entries[PDPTEIndex].GetAddress() << 12);
|
|
||||||
if (PDE)
|
|
||||||
{
|
|
||||||
for (int PDEIndex = 0; PDEIndex < 512; PDEIndex++)
|
|
||||||
{
|
|
||||||
EHPrint("\e888888# \eAABBCC%03d-%03d-%03d-%03d\e4500F5: P:%s RW:%s US:%s PWT:%s PCB:%s A:%s NX:%s Address:\e888888%#lx\n",
|
|
||||||
PMLIndex, PDPTEIndex, PDEIndex, 0,
|
|
||||||
PDE->Entries[PDEIndex].Present ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PDE->Entries[PDEIndex].ReadWrite ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PDE->Entries[PDEIndex].UserSupervisor ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PDE->Entries[PDEIndex].WriteThrough ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PDE->Entries[PDEIndex].CacheDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PDE->Entries[PDEIndex].Accessed ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PDE->Entries[PDEIndex].ExecuteDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PDE->Entries[PDEIndex].GetAddress() << 12);
|
|
||||||
Display->SetBuffer(SBIdx);
|
|
||||||
if ((PDE->Entries[PDEIndex].Present))
|
|
||||||
{
|
|
||||||
Memory::PageTableEntryPtr *PTE = (Memory::PageTableEntryPtr *)((uintptr_t)PDE->Entries[PDEIndex].GetAddress() << 12);
|
|
||||||
if (PTE)
|
|
||||||
{
|
|
||||||
for (int PTEIndex = 0; PTEIndex < 512; PTEIndex++)
|
|
||||||
{
|
|
||||||
EHPrint("\e888888# \eAABBCC%03d-%03d-%03d-%03d\e4500F5: P:%s RW:%s US:%s PWT:%s PCB:%s A:%s D:%s PAT:%s G:%s PK:%d NX:%s Address:\e888888%#lx\n",
|
|
||||||
PMLIndex, PDPTEIndex, PDEIndex, PTEIndex,
|
|
||||||
PTE->Entries[PTEIndex].Present ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PTE->Entries[PTEIndex].ReadWrite ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PTE->Entries[PTEIndex].UserSupervisor ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PTE->Entries[PTEIndex].WriteThrough ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PTE->Entries[PTEIndex].CacheDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PTE->Entries[PTEIndex].Accessed ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PTE->Entries[PTEIndex].Dirty ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PTE->Entries[PTEIndex].PageAttributeTable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PTE->Entries[PTEIndex].Global ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PTE->Entries[PTEIndex].ProtectionKey,
|
|
||||||
PTE->Entries[PTEIndex].ExecuteDisable ? "\e00FF001\e4500F5" : "\eFF00000\e4500F5",
|
|
||||||
PTE->Entries[PTEIndex].GetAddress() << 12);
|
|
||||||
Display->SetBuffer(SBIdx);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (strncmp(Input, "bitmap", 6) == 0)
|
else if (strncmp(Input, "bitmap", 6) == 0)
|
||||||
@ -808,6 +811,7 @@ namespace CrashHandler
|
|||||||
else if (strlen(Input) > 0)
|
else if (strlen(Input) > 0)
|
||||||
EHPrint("Unknown command: %s", Input);
|
EHPrint("Unknown command: %s", Input);
|
||||||
|
|
||||||
|
DrawBottom:
|
||||||
DisplayBottomOverlay();
|
DisplayBottomOverlay();
|
||||||
Display->SetBuffer(SBIdx);
|
Display->SetBuffer(SBIdx);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user