X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmm_paging_debug.h;h=8ce5f8746177c6fbbcb91af52f60419e9d1f057f;hb=refs%2Fheads%2Fdevel;hp=21817a3c55633f145f0592e250969bb0b8783ce7;hpb=362391accc505b29d938e9d0a21bf6a28a8cee34;p=palacios.git diff --git a/palacios/src/palacios/vmm_paging_debug.h b/palacios/src/palacios/vmm_paging_debug.h index 21817a3..8ce5f87 100644 --- a/palacios/src/palacios/vmm_paging_debug.h +++ b/palacios/src/palacios/vmm_paging_debug.h @@ -28,37 +28,37 @@ static void PrintPDE32(addr_t virtual_address, pde32_t * pde) { - PrintDebug("PDE %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, reserved=%x, largePages=%x, globalPage=%x, kernelInfo=%x\n", - (void *)virtual_address, - (void *)(addr_t) (pde->pt_base_addr << PAGE_POWER), - pde->present, - pde->writable, - pde->user_page, - pde->write_through, - pde->cache_disable, - pde->accessed, - pde->reserved, - pde->large_page, - pde->global_page, - pde->vmm_info); + PrintDebug(VM_NONE, VCORE_NONE, "PDE %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, reserved=%x, largePages=%x, globalPage=%x, kernelInfo=%x\n", + (void *)virtual_address, + (void *)(addr_t) (pde->pt_base_addr << PAGE_POWER), + pde->present, + pde->writable, + pde->user_page, + pde->write_through, + pde->cache_disable, + pde->accessed, + pde->reserved, + pde->large_page, + pde->global_page, + pde->vmm_info); } static void PrintPTE32(addr_t virtual_address, pte32_t * pte) { - PrintDebug("PTE %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, dirty=%x, pteAttribute=%x, globalPage=%x, vmm_info=%x\n", - (void *)virtual_address, - (void*)(addr_t)(pte->page_base_addr << PAGE_POWER), - pte->present, - pte->writable, - pte->user_page, - pte->write_through, - pte->cache_disable, - pte->accessed, - pte->dirty, - pte->pte_attr, - pte->global_page, - pte->vmm_info); + PrintDebug(VM_NONE, VCORE_NONE, "PTE %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, dirty=%x, pteAttribute=%x, globalPage=%x, vmm_info=%x\n", + (void *)virtual_address, + (void*)(addr_t)(pte->page_base_addr << PAGE_POWER), + pte->present, + pte->writable, + pte->user_page, + pte->write_through, + pte->cache_disable, + pte->accessed, + pte->dirty, + pte->pte_attr, + pte->global_page, + pte->vmm_info); } @@ -70,48 +70,48 @@ static void PrintPTE32(addr_t virtual_address, pte32_t * pte) static void PrintPDPE32PAE(addr_t virtual_address, pdpe32pae_t * pdpe) { - PrintDebug("PDPE %p -> %p : present=%x, wt=%x, cd=%x, accessed=%x, kernelInfo=%x\n", - (void *)virtual_address, - (void *)(addr_t) (pdpe->pd_base_addr << PAGE_POWER), - pdpe->present, - pdpe->write_through, - pdpe->cache_disable, - pdpe->accessed, - pdpe->vmm_info); + PrintDebug(VM_NONE, VCORE_NONE, "PDPE %p -> %p : present=%x, wt=%x, cd=%x, accessed=%x, kernelInfo=%x\n", + (void *)virtual_address, + (void *)(addr_t) (pdpe->pd_base_addr << PAGE_POWER), + pdpe->present, + pdpe->write_through, + pdpe->cache_disable, + pdpe->accessed, + pdpe->vmm_info); } static void PrintPDE32PAE(addr_t virtual_address, pde32pae_t * pde) { - PrintDebug("PDE %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, largePages=%x, globalPage=%x, kernelInfo=%x\n", - (void *)virtual_address, - (void *)(addr_t) (pde->pt_base_addr << PAGE_POWER), - pde->present, - pde->writable, - pde->user_page, - pde->write_through, - pde->cache_disable, - pde->accessed, - pde->large_page, - pde->global_page, - pde->vmm_info); + PrintDebug(VM_NONE, VCORE_NONE, "PDE %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, largePages=%x, globalPage=%x, kernelInfo=%x\n", + (void *)virtual_address, + (void *)(addr_t) (pde->pt_base_addr << PAGE_POWER), + pde->present, + pde->writable, + pde->user_page, + pde->write_through, + pde->cache_disable, + pde->accessed, + pde->large_page, + pde->global_page, + pde->vmm_info); } static void PrintPTE32PAE(addr_t virtual_address, pte32pae_t * pte) { - PrintDebug("PTE %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, dirty=%x, pteAttribute=%x, globalPage=%x, vmm_info=%x\n", - (void *)virtual_address, - (void*)(addr_t)(pte->page_base_addr << PAGE_POWER), - pte->present, - pte->writable, - pte->user_page, - pte->write_through, - pte->cache_disable, - pte->accessed, - pte->dirty, - pte->pte_attr, - pte->global_page, - pte->vmm_info); + PrintDebug(VM_NONE, VCORE_NONE, "PTE %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, dirty=%x, pteAttribute=%x, globalPage=%x, vmm_info=%x\n", + (void *)virtual_address, + (void*)(addr_t)(pte->page_base_addr << PAGE_POWER), + pte->present, + pte->writable, + pte->user_page, + pte->write_through, + pte->cache_disable, + pte->accessed, + pte->dirty, + pte->pte_attr, + pte->global_page, + pte->vmm_info); } @@ -123,71 +123,71 @@ static void PrintPTE32PAE(addr_t virtual_address, pte32pae_t * pte) static void PrintPML4e64(addr_t virtual_address, pml4e64_t * pml) { - PrintDebug("PML4e64 %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, reserved=%x, kernelInfo=%x\n", - (void *)virtual_address, - (void *)(addr_t) (BASE_TO_PAGE_ADDR(pml->pdp_base_addr)), - pml->present, - pml->writable, - pml->user_page, - pml->write_through, - pml->cache_disable, - pml->accessed, - pml->reserved, - pml->vmm_info); + PrintDebug(VM_NONE, VCORE_NONE, "PML4e64 %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, reserved=%x, kernelInfo=%x\n", + (void *)virtual_address, + (void *)(addr_t) (BASE_TO_PAGE_ADDR(pml->pdp_base_addr)), + pml->present, + pml->writable, + pml->user_page, + pml->write_through, + pml->cache_disable, + pml->accessed, + pml->reserved, + pml->vmm_info); } static void PrintPDPE64(addr_t virtual_address, pdpe64_t * pdpe) { - PrintDebug("PDPE64 %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, reserved=%x, largePages=%x, globalPage/zero=%x, kernelInfo=%x\n", - (void *)virtual_address, - (void *)(addr_t) (BASE_TO_PAGE_ADDR(pdpe->pd_base_addr)), - pdpe->present, - pdpe->writable, - pdpe->user_page, - pdpe->write_through, - pdpe->cache_disable, - pdpe->accessed, - pdpe->avail, - pdpe->large_page, - pdpe->zero, - pdpe->vmm_info); + PrintDebug(VM_NONE, VCORE_NONE, "PDPE64 %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, reserved=%x, largePages=%x, globalPage/zero=%x, kernelInfo=%x\n", + (void *)virtual_address, + (void *)(addr_t) (BASE_TO_PAGE_ADDR(pdpe->pd_base_addr)), + pdpe->present, + pdpe->writable, + pdpe->user_page, + pdpe->write_through, + pdpe->cache_disable, + pdpe->accessed, + pdpe->avail, + pdpe->large_page, + pdpe->zero, + pdpe->vmm_info); } static void PrintPDE64(addr_t virtual_address, pde64_t * pde) { - PrintDebug("PDE64 %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, reserved=%x, largePages=%x, globalPage=%x, kernelInfo=%x\n", - (void *)virtual_address, - (void *)(addr_t) (BASE_TO_PAGE_ADDR(pde->pt_base_addr)), - pde->present, - pde->writable, - pde->user_page, - pde->write_through, - pde->cache_disable, - pde->accessed, - pde->avail, - pde->large_page, - pde->global_page, - pde->vmm_info); + PrintDebug(VM_NONE, VCORE_NONE, "PDE64 %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, reserved=%x, largePages=%x, globalPage=%x, kernelInfo=%x\n", + (void *)virtual_address, + (void *)(addr_t) (BASE_TO_PAGE_ADDR(pde->pt_base_addr)), + pde->present, + pde->writable, + pde->user_page, + pde->write_through, + pde->cache_disable, + pde->accessed, + pde->avail, + pde->large_page, + pde->global_page, + pde->vmm_info); } static void PrintPTE64(addr_t virtual_address, pte64_t * pte) { - PrintDebug("PTE64 %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, dirty=%x, pteAttribute=%x, globalPage=%x, vmm_info=%x\n", - (void *)virtual_address, - (void*)(addr_t)(BASE_TO_PAGE_ADDR(pte->page_base_addr)), - pte->present, - pte->writable, - pte->user_page, - pte->write_through, - pte->cache_disable, - pte->accessed, - pte->dirty, - pte->pte_attr, - pte->global_page, - pte->vmm_info); + PrintDebug(VM_NONE, VCORE_NONE, "PTE64 %p -> %p : present=%x, writable=%x, user=%x, wt=%x, cd=%x, accessed=%x, dirty=%x, pteAttribute=%x, globalPage=%x, vmm_info=%x\n", + (void *)virtual_address, + (void*)(addr_t)(BASE_TO_PAGE_ADDR(pte->page_base_addr)), + pte->present, + pte->writable, + pte->user_page, + pte->write_through, + pte->cache_disable, + pte->accessed, + pte->dirty, + pte->pte_attr, + pte->global_page, + pte->vmm_info); } @@ -197,160 +197,299 @@ static void PrintPTE64(addr_t virtual_address, pte64_t * pte) +static int print_page_walk_cb(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data) { + int i = 0; + addr_t tmp_vaddr = 0; + switch (type) { + + /* 64 Bit */ + + case PAGE_PML464: + { + pml4e64_t * pml = (pml4e64_t *)page_ptr; + PrintDebug(info->vm_info, info, "PML4E64 Page\n"); + for (i = 0; i < MAX_PML4E64_ENTRIES; i++) { + tmp_vaddr = (4096 * MAX_PTE64_ENTRIES); + tmp_vaddr *= (MAX_PDE64_ENTRIES * MAX_PDPE64_ENTRIES * i); // break apart to avoid int overflow compile errors + tmp_vaddr += vaddr; + if (pml[i].present) + PrintPML4e64(tmp_vaddr, &(pml[i])); + } + break; + } + case PAGE_PDP64: + { + pdpe64_t * pdp = (pdpe64_t *)page_ptr; + PrintDebug(info->vm_info, info, "PDPE64 Page\n"); + for (i = 0; i < MAX_PDPE64_ENTRIES; i++) { + tmp_vaddr = 4096UL * MAX_PTE64_ENTRIES * MAX_PDE64_ENTRIES * i; + tmp_vaddr += vaddr; + if (pdp[i].present) + PrintPDPE64(tmp_vaddr, &(pdp[i])); + } + break; + } + case PAGE_PD64: + { + pde64_t * pd = (pde64_t *)page_ptr; + PrintDebug(info->vm_info, info, "PDE64 Page\n"); + for (i = 0; i < MAX_PDE64_ENTRIES; i++) { + tmp_vaddr = 4096 * MAX_PTE64_ENTRIES * i; + tmp_vaddr += vaddr; + if (pd[i].present) + PrintPDE64(tmp_vaddr, &(pd[i])); + } + break; + } + case PAGE_PT64: + { + pte64_t * pt = (pte64_t *)page_ptr; + PrintDebug(info->vm_info, info, "PTE64 Page\n"); + for (i = 0; i < MAX_PTE64_ENTRIES; i++) { + tmp_vaddr = 4096 * i; + tmp_vaddr += vaddr; + if (pt[i].present) + PrintPTE64(tmp_vaddr, &(pt[i])); + } + break; + } + + /* 32 BIT PAE */ + + case PAGE_PDP32PAE: + { + pdpe32pae_t * pdp = (pdpe32pae_t *)page_ptr; + PrintDebug(info->vm_info, info, "PDPE32PAE Page\n"); + for (i = 0; i < MAX_PDPE32PAE_ENTRIES; i++) { + tmp_vaddr = 4096UL * MAX_PTE32PAE_ENTRIES * MAX_PDE32PAE_ENTRIES * i; + tmp_vaddr += vaddr; + if (pdp[i].present) + PrintPDPE32PAE(tmp_vaddr, &(pdp[i])); + } + break; + } + case PAGE_PD32PAE: + { + pde32pae_t * pd = (pde32pae_t *)page_ptr; + PrintDebug(info->vm_info, info, "PDE32PAE Page\n"); + for (i = 0; i < MAX_PDE32PAE_ENTRIES; i++) { + tmp_vaddr = 4096 * MAX_PTE32PAE_ENTRIES * i; + tmp_vaddr += vaddr; + if (pd[i].present) + PrintPDE32PAE(tmp_vaddr, &(pd[i])); + } + break; + } + case PAGE_PT32PAE: + { + pte32pae_t * pt = (pte32pae_t *)page_ptr; + PrintDebug(info->vm_info, info, "PTE32PAE Page\n"); + for (i = 0; i < MAX_PTE32PAE_ENTRIES; i++) { + tmp_vaddr = 4096 * i; + tmp_vaddr += vaddr; + if (pt[i].present) + PrintPTE32PAE(tmp_vaddr, &(pt[i])); + } + break; + } + + /* 32 Bit */ + + case PAGE_PD32: + { + pde32_t * pd = (pde32_t *)page_ptr; + PrintDebug(info->vm_info, info, "PDE32 Page\n"); + for (i = 0; i < MAX_PTE32_ENTRIES; i++) { + tmp_vaddr = 4096UL * MAX_PTE32_ENTRIES * i; + tmp_vaddr += vaddr; + if (pd[i].present) + PrintPDE32(tmp_vaddr, &(pd[i])); + } + break; + } + case PAGE_PT32: + { + pte32_t * pt = (pte32_t *)page_ptr; + PrintDebug(info->vm_info, info, "PTE32 Page\n"); + for (i = 0; i < MAX_PTE32_ENTRIES; i++) { + tmp_vaddr = 4096 * i; + tmp_vaddr += vaddr; + if (pt[i].present) + PrintPTE32(tmp_vaddr, &(pt[i])); + } + break; + } + default: + break; + } + return 0; +} -static int print_page_tree_cb(page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data) { - - switch (type) { - - /* 64 Bit */ - - case PAGE_PML464: - { - pml4e64_t * pml = (pml4e64_t *)page_ptr; - PrintPML4e64(vaddr, &(pml[PML4E64_INDEX(vaddr)])); - break; - } - case PAGE_PDP64: - { - pdpe64_t * pdp = (pdpe64_t *)page_ptr; - PrintPDPE64(vaddr, &(pdp[PDPE64_INDEX(vaddr)])); - break; - } - case PAGE_PD64: - { - pde64_t * pd = (pde64_t *)page_ptr; - PrintPDE64(vaddr, &(pd[PDE64_INDEX(vaddr)])); - break; - } - case PAGE_PT64: - { - pte64_t * pt = (pte64_t *)page_ptr; - PrintPTE64(vaddr, &(pt[PTE64_INDEX(vaddr)])); - break; - } - - /* 32 BIT PAE */ +static int print_page_tree_cb(struct guest_info * info, page_type_t type, addr_t vaddr, addr_t page_ptr, addr_t page_pa, void * private_data) { + switch (type) { + + /* 64 Bit */ + + case PAGE_PML464: + { + pml4e64_t * pml = (pml4e64_t *)page_ptr; + PrintPML4e64(vaddr, &(pml[PML4E64_INDEX(vaddr)])); + break; + } + case PAGE_PDP64: + { + pdpe64_t * pdp = (pdpe64_t *)page_ptr; + PrintPDPE64(vaddr, &(pdp[PDPE64_INDEX(vaddr)])); + break; + } + case PAGE_PD64: + { + pde64_t * pd = (pde64_t *)page_ptr; + PrintPDE64(vaddr, &(pd[PDE64_INDEX(vaddr)])); + break; + } + case PAGE_PT64: + { + pte64_t * pt = (pte64_t *)page_ptr; + PrintPTE64(vaddr, &(pt[PTE64_INDEX(vaddr)])); + break; + } + + /* 32 BIT PAE */ - case PAGE_PDP32PAE: - { - pdpe32pae_t * pdp = (pdpe32pae_t *)page_ptr; - PrintPDPE32PAE(vaddr, &(pdp[PDPE32PAE_INDEX(vaddr)])); - break; + case PAGE_PDP32PAE: + { + pdpe32pae_t * pdp = (pdpe32pae_t *)page_ptr; + PrintPDPE32PAE(vaddr, &(pdp[PDPE32PAE_INDEX(vaddr)])); + break; + } + case PAGE_PD32PAE: + { + pde32pae_t * pd = (pde32pae_t *)page_ptr; + PrintPDE32PAE(vaddr, &(pd[PDE32PAE_INDEX(vaddr)])); + break; + } + case PAGE_PT32PAE: + { + pte32pae_t * pt = (pte32pae_t *)page_ptr; + PrintPTE32PAE(vaddr, &(pt[PTE32PAE_INDEX(vaddr)])); + break; + } + + /* 32 Bit */ + + case PAGE_PD32: + { + pde32_t * pd = (pde32_t *)page_ptr; + PrintPDE32(vaddr, &(pd[PDE32_INDEX(vaddr)])); + break; + } + case PAGE_PT32: + { + pte32_t * pt = (pte32_t *)page_ptr; + PrintPTE32(vaddr, &(pt[PTE32_INDEX(vaddr)])); + break; + } + default: + PrintDebug(info->vm_info, info, "%s %p->%p \n", v3_page_type_to_str(type), (void *)vaddr, (void *)page_pa); + break; } - case PAGE_PD32PAE: - { - pde32pae_t * pd = (pde32pae_t *)page_ptr; - PrintPDE32PAE(vaddr, &(pd[PDE32PAE_INDEX(vaddr)])); - break; - } - case PAGE_PT32PAE: - { - pte32pae_t * pt = (pte32pae_t *)page_ptr; - PrintPTE32PAE(vaddr, &(pt[PTE32PAE_INDEX(vaddr)])); - break; - } - - /* 32 Bit */ - - case PAGE_PD32: - { - pde32_t * pd = (pde32_t *)page_ptr; - PrintPDE32(vaddr, &(pd[PDE32_INDEX(vaddr)])); - break; - } - case PAGE_PT32: - { - pte32_t * pt = (pte32_t *)page_ptr; - PrintPTE32(vaddr, &(pt[PTE32_INDEX(vaddr)])); - break; - } - default: - PrintDebug("%s %p->%p \n", v3_page_type_to_str(type), (void *)vaddr, (void *)page_pa); - break; - } - return 0; + return 0; } -void PrintPTEntry(page_type_t type, addr_t vaddr, void * entry) { - print_page_tree_cb(type, vaddr, PAGE_ADDR_4KB((addr_t)entry), 0, NULL); +void PrintPTEntry(struct guest_info * info, page_type_t type, addr_t vaddr, void * entry) { + print_page_tree_cb(info, type, vaddr, PAGE_ADDR_4KB((addr_t)entry), 0, NULL); } -void PrintHostPageTables(v3_vm_cpu_mode_t cpu_mode, addr_t cr3) { - switch (cpu_mode) { - case PROTECTED: - v3_walk_host_pt_32(cr3, print_page_tree_cb, NULL); - case PROTECTED_PAE: - v3_walk_host_pt_32pae(cr3, print_page_tree_cb, NULL); - case LONG: - case LONG_32_COMPAT: - case LONG_16_COMPAT: - v3_walk_host_pt_64(cr3, print_page_tree_cb, NULL); - break; - default: - PrintError("Unsupported CPU MODE %s\n", v3_cpu_mode_to_str(cpu_mode)); - break; - } +void PrintHostPageTables(struct guest_info * info, v3_cpu_mode_t cpu_mode, addr_t cr3) { + PrintDebug(info->vm_info, info, "CR3: %p\n", (void *)cr3); + switch (cpu_mode) { + case PROTECTED: + v3_walk_host_pt_32(info, cr3, print_page_walk_cb, NULL); + break; + case PROTECTED_PAE: + v3_walk_host_pt_32pae(info, cr3, print_page_walk_cb, NULL); + break; + case LONG: + case LONG_32_COMPAT: + case LONG_16_COMPAT: + v3_walk_host_pt_64(info, cr3, print_page_walk_cb, NULL); + break; + default: + PrintError(info->vm_info, info, "Unsupported CPU MODE %s\n", v3_cpu_mode_to_str(info->cpu_mode)); + break; + } } void PrintGuestPageTables(struct guest_info * info, addr_t cr3) { - switch (info->cpu_mode) { - case PROTECTED: - v3_walk_guest_pt_32(info, cr3, print_page_tree_cb, NULL); - case PROTECTED_PAE: - v3_walk_guest_pt_32pae(info, cr3, print_page_tree_cb, NULL); - case LONG: - case LONG_32_COMPAT: - case LONG_16_COMPAT: - v3_walk_guest_pt_64(info, cr3, print_page_tree_cb, NULL); - break; - default: - PrintError("Unsupported CPU MODE %s\n", v3_cpu_mode_to_str(info->cpu_mode)); - break; - } + PrintDebug(info->vm_info, info, "CR3: %p\n", (void *)cr3); + switch (info->cpu_mode) { + case REAL: + case PROTECTED: + v3_walk_guest_pt_32(info, cr3, print_page_walk_cb, NULL); + break; + case PROTECTED_PAE: + v3_walk_guest_pt_32pae(info, cr3, print_page_walk_cb, NULL); + break; + case LONG: + case LONG_32_COMPAT: + case LONG_16_COMPAT: + v3_walk_guest_pt_64(info, cr3, print_page_walk_cb, NULL); + break; + default: + PrintError(info->vm_info, info, "Unsupported CPU MODE %s\n", v3_cpu_mode_to_str(info->cpu_mode)); + break; + } } -void PrintHostPageTree(v3_vm_cpu_mode_t cpu_mode, addr_t virtual_addr, addr_t cr3) { - switch (cpu_mode) { - case PROTECTED: - v3_drill_host_pt_32(cr3, virtual_addr, print_page_tree_cb, NULL); - case PROTECTED_PAE: - v3_drill_host_pt_32pae(cr3, virtual_addr, print_page_tree_cb, NULL); - case LONG: - case LONG_32_COMPAT: - case LONG_16_COMPAT: - v3_drill_host_pt_64(cr3, virtual_addr, print_page_tree_cb, NULL); - break; - default: - PrintError("Unsupported CPU MODE %s\n", v3_cpu_mode_to_str(cpu_mode)); - break; - } +void PrintHostPageTree(struct guest_info * info, addr_t virtual_addr, addr_t cr3) { + PrintDebug(info->vm_info, info, "CR3: %p\n, cpu mode is %x", (void *)cr3, info->cpu_mode); + switch (info->cpu_mode) { + case PROTECTED: + v3_drill_host_pt_32(info, cr3, virtual_addr, print_page_tree_cb, NULL); + break; + case PROTECTED_PAE: + v3_drill_host_pt_32pae(info, cr3, virtual_addr, print_page_tree_cb, NULL); + break; + case LONG: + case LONG_32_COMPAT: + case LONG_16_COMPAT: + v3_drill_host_pt_64(info, cr3, virtual_addr, print_page_tree_cb, NULL); + break; + default: + PrintError(info->vm_info, info, "Unsupported CPU MODE %s\n", v3_cpu_mode_to_str(info->cpu_mode)); + break; + } } void PrintGuestPageTree(struct guest_info * info, addr_t virtual_addr, addr_t cr3) { - switch (info->cpu_mode) { - case PROTECTED: - v3_drill_guest_pt_32(info, cr3, virtual_addr, print_page_tree_cb, NULL); - case PROTECTED_PAE: - v3_drill_guest_pt_32pae(info, cr3, virtual_addr, print_page_tree_cb, NULL); - case LONG: - case LONG_32_COMPAT: - case LONG_16_COMPAT: - v3_drill_guest_pt_64(info, cr3, virtual_addr, print_page_tree_cb, NULL); - break; - default: - PrintError("Unsupported CPU MODE %s\n", v3_cpu_mode_to_str(info->cpu_mode)); - break; - } + PrintDebug(info->vm_info, info, "CR3: %p\n", (void *)cr3); + switch (info->cpu_mode) { + case PROTECTED: + v3_drill_guest_pt_32(info, cr3, virtual_addr, print_page_tree_cb, NULL); + break; + case PROTECTED_PAE: + v3_drill_guest_pt_32pae(info, cr3, virtual_addr, print_page_tree_cb, NULL); + break; + case LONG: + case LONG_32_COMPAT: + case LONG_16_COMPAT: + v3_drill_guest_pt_64(info, cr3, virtual_addr, print_page_tree_cb, NULL); + break; + default: + PrintError(info->vm_info, info, "Unsupported CPU MODE %s\n", v3_cpu_mode_to_str(info->cpu_mode)); + break; + } }