#include <palacios/vm_guest.h>
#include <palacios/vmm_ctrl_regs.h>
#include <palacios/vmm.h>
+#include <palacios/vmcb.h>
v3_vm_cpu_mode_t v3_get_cpu_mode(struct guest_info * info) {
if (cr0->pe == 0) {
return REAL;
- } else if ((cr4->pae == 0) && (efer->lma == 0)) {
+ } else if ((cr4->pae == 0) && (efer->lme == 0)) {
return PROTECTED;
- } else if (efer->lma == 0) {
+ } else if (efer->lme == 0) {
return PROTECTED_PAE;
- } else if ((efer->lma == 1) && (cs->long_mode == 1)) {
+ } else if ((efer->lme == 1) && (cs->long_mode == 1)) {
return LONG;
} else {
+ // What about LONG_16_COMPAT???
return LONG_32_COMPAT;
}
}
for (i = 0; seg_names[i] != NULL; i++) {
- PrintDebug("\t%s: Sel=%x, base=%x, limit=%x\n", seg_names[i], seg_ptr[i].selector, seg_ptr[i].base, seg_ptr[i].limit);
+ PrintDebug("\t%s: Sel=%x, base=%p, limit=%x\n", seg_names[i], seg_ptr[i].selector,
+ (void *)(addr_t)seg_ptr[i].base, seg_ptr[i].limit);
}
int i = 0;
v3_reg_t * reg_ptr;
char * reg_names[] = {"CR0", "CR2", "CR3", "CR4", "CR8", "FLAGS", NULL};
+ vmcb_saved_state_t * guest_state = GET_VMCB_SAVE_STATE_AREA(info->vmm_data);
reg_ptr= (v3_reg_t *)regs;
PrintDebug("32 bit Ctrl Regs:\n");
for (i = 0; reg_names[i] != NULL; i++) {
- PrintDebug("\t%s=0x%x\n", reg_names[i], reg_ptr[i]);
+ PrintDebug("\t%s=0x%p\n", reg_names[i], (void *)(addr_t)reg_ptr[i]);
}
+
+ PrintDebug("\tEFER=0x%p\n", (void*)(addr_t)(guest_state->efer));
+
}
PrintDebug("32 bit GPRs:\n");
for (i = 0; reg_names[i] != NULL; i++) {
- PrintDebug("\t%s=0x%x\n", reg_names[i], reg_ptr[i]);
+ PrintDebug("\t%s=0x%p\n", reg_names[i], (void *)(addr_t)reg_ptr[i]);
}
}