Add Hurl.debug_lookup()

This commit is contained in:
Josh Holtrop 2022-10-18 11:18:19 -04:00
parent 7d2b535df5
commit 4f98c469b7

View File

@ -8,6 +8,7 @@ module hulk.hurl;
import hos.cpu;
import hulk.hippo;
import hos.memory;
import hulk.klog;
/** HULK virtual base address. */
enum ulong HULK_VIRTUAL_BASE_ADDRESS = 0xFFFF_8000_0000_0000u;
@ -34,6 +35,7 @@ struct Hurl
private struct PageTableEntry
{
private ulong m_entry;
alias m_entry this;
this(ulong address, ulong flags)
{
@ -130,4 +132,27 @@ struct Hurl
map(address, address, flags);
}
}
public static void debug_lookup(void * address)
{
klog.writefln("Debugging page table lookup of 0x%x", address);
PageTable * pt = m_pt_base;
for (size_t level = 0; level < 4u; level++)
{
PageTableEntry entry = (*pt)[address, level];
klog.writefln("Level %u, entry = 0x%x", level, entry);
if (entry.present)
{
pt = entry.follow();
}
else
{
break;
}
if ((entry & MAP_HUGE_PAGE) != 0u)
{
break;
}
}
}
}