diff --git a/src/hulk/hurl.d b/src/hulk/hurl.d index 4df77b4..808647e 100644 --- a/src/hulk/hurl.d +++ b/src/hulk/hurl.d @@ -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; + } + } + } }