#include <palacios/vmm_mem.h>
#include <palacios/vmm.h>
#include <palacios/vmcb.h>
-#include <palacios/vmm_emulate.h>
+#include <palacios/vmm_decoder.h>
#include <palacios/vm_guest_mem.h>
#include <palacios/vmm_ctrl_regs.h>
} else if ((instr[index] == cr_access_byte) &&
(instr[index + 1] == clts_byte)) {
// CLTS
-
+ PrintDebug("CLTS unhandled\n");
+ return -1;
} else if ((instr[index] == cr_access_byte) &&
(instr[index + 1] = mov_to_cr_byte)) {
if (guest_pa_to_host_va(info, first_operand + (info->segments.ds.base << 4), &host_addr) == -1) {
// gpf the guest
+ PrintDebug("Could not convert guest physical address to host virtual address\n");
return -1;
}
first_operand = host_addr;
} else {
- // error... don't know what to do
- return -1;
+ // Register operand
+ // Should be ok??
}
cr0_val = *(char*)cr0 & 0x0f;
struct cr3_32 * shadow_cr3 = (struct cr3_32 *)&(info->shdw_pg_state.shadow_cr3);
struct cr3_32 * guest_cr3 = (struct cr3_32 *)&(info->shdw_pg_state.guest_cr3);
+ /* Delete the current Page Tables */
+ delete_page_tables_pde32((pde32_t *)CR3_TO_PDE32(shadow_cr3));
*guest_cr3 = *new_cr3;
shadow_pt = create_new_shadow_pt32(info);
//shadow_pt = setup_shadow_pt32(info, CR3_TO_PDE32(*(addr_t *)new_cr3));
+
/* Copy Various flags */
*shadow_cr3 = *new_cr3;