X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=blobdiff_plain;f=palacios%2Fsrc%2Fpalacios%2Fvmcb.c;h=12cf36f6cd4afd0d191cc6439549c44cf2cce451;hb=c6d28a5255ee5d1995865fc615bbe2481b19996d;hp=d1754aed2cca2fa3a0f7b3f81a57aeadbd33fd20;hpb=eb87f60800c8634e37d1f8e71cd8f88605f2a46e;p=palacios.git diff --git a/palacios/src/palacios/vmcb.c b/palacios/src/palacios/vmcb.c index d1754ae..12cf36f 100644 --- a/palacios/src/palacios/vmcb.c +++ b/palacios/src/palacios/vmcb.c @@ -1,395 +1,549 @@ +/* + * This file is part of the Palacios Virtual Machine Monitor developed + * by the V3VEE Project with funding from the United States National + * Science Foundation and the Department of Energy. + * + * The V3VEE Project is a joint project between Northwestern University + * and the University of New Mexico. You can find out more at + * http://www.v3vee.org + * + * Copyright (c) 2008, Jack Lange + * Copyright (c) 2008, The V3VEE Project + * All rights reserved. + * + * Author: Jack Lange + * + * This is free software. You are permitted to use, + * redistribute, and modify it as specified in the file "V3VEE_LICENSE". + */ + #include #include #include -void set_vmcb_segment(struct vmcb_selector * vmcb_seg, struct v3_segment * seg) { - vmcb_seg->selector = seg->selector; - vmcb_seg->limit = seg->limit; - vmcb_seg->base = seg->base; - vmcb_seg->attrib.fields.type = seg->type; - vmcb_seg->attrib.fields.S = seg->system; - vmcb_seg->attrib.fields.dpl = seg->dpl; - vmcb_seg->attrib.fields.P = seg->present; - vmcb_seg->attrib.fields.avl = seg->avail; - vmcb_seg->attrib.fields.L = seg->long_mode; - vmcb_seg->attrib.fields.db = seg->db; - vmcb_seg->attrib.fields.G = seg->granularity; +void v3_set_vmcb_segment(struct vmcb_selector * vmcb_seg, struct v3_segment * seg) { + vmcb_seg->selector = seg->selector; + vmcb_seg->limit = seg->limit; + vmcb_seg->base = seg->base; + vmcb_seg->attrib.fields.type = seg->type; + vmcb_seg->attrib.fields.S = seg->system; + vmcb_seg->attrib.fields.dpl = seg->dpl; + vmcb_seg->attrib.fields.P = seg->present; + vmcb_seg->attrib.fields.avl = seg->avail; + vmcb_seg->attrib.fields.L = seg->long_mode; + vmcb_seg->attrib.fields.db = seg->db; + vmcb_seg->attrib.fields.G = seg->granularity; } -void get_vmcb_segment(struct vmcb_selector * vmcb_seg, struct v3_segment * seg) { - seg->selector = vmcb_seg->selector; - seg->limit = vmcb_seg->limit; - seg->base = vmcb_seg->base; - seg->type = vmcb_seg->attrib.fields.type; - seg->system = vmcb_seg->attrib.fields.S; - seg->dpl = vmcb_seg->attrib.fields.dpl; - seg->present = vmcb_seg->attrib.fields.P; - seg->avail = vmcb_seg->attrib.fields.avl; - seg->long_mode = vmcb_seg->attrib.fields.L; - seg->db = vmcb_seg->attrib.fields.db; - seg->granularity = vmcb_seg->attrib.fields.G; +void v3_get_vmcb_segment(struct vmcb_selector * vmcb_seg, struct v3_segment * seg) { + seg->selector = vmcb_seg->selector; + seg->limit = vmcb_seg->limit; + seg->base = vmcb_seg->base; + seg->type = vmcb_seg->attrib.fields.type; + seg->system = vmcb_seg->attrib.fields.S; + seg->dpl = vmcb_seg->attrib.fields.dpl; + seg->present = vmcb_seg->attrib.fields.P; + seg->avail = vmcb_seg->attrib.fields.avl; + seg->long_mode = vmcb_seg->attrib.fields.L; + seg->db = vmcb_seg->attrib.fields.db; + seg->granularity = vmcb_seg->attrib.fields.G; } -void set_vmcb_segments(vmcb_t * vmcb, struct v3_segments * segs) { - vmcb_saved_state_t * guest_area = GET_VMCB_SAVE_STATE_AREA(vmcb); +void v3_set_vmcb_segments(vmcb_t * vmcb, struct v3_segments * segs) { + vmcb_saved_state_t * guest_area = GET_VMCB_SAVE_STATE_AREA(vmcb); - set_vmcb_segment(&(guest_area->cs), &(segs->cs)); - set_vmcb_segment(&(guest_area->ds), &(segs->ds)); - set_vmcb_segment(&(guest_area->es), &(segs->es)); - set_vmcb_segment(&(guest_area->fs), &(segs->fs)); - set_vmcb_segment(&(guest_area->gs), &(segs->gs)); - set_vmcb_segment(&(guest_area->ss), &(segs->ss)); - set_vmcb_segment(&(guest_area->ldtr), &(segs->ldtr)); - set_vmcb_segment(&(guest_area->gdtr), &(segs->gdtr)); - set_vmcb_segment(&(guest_area->idtr), &(segs->idtr)); - set_vmcb_segment(&(guest_area->tr), &(segs->tr)); + v3_set_vmcb_segment(&(guest_area->cs), &(segs->cs)); + v3_set_vmcb_segment(&(guest_area->ds), &(segs->ds)); + v3_set_vmcb_segment(&(guest_area->es), &(segs->es)); + v3_set_vmcb_segment(&(guest_area->fs), &(segs->fs)); + v3_set_vmcb_segment(&(guest_area->gs), &(segs->gs)); + v3_set_vmcb_segment(&(guest_area->ss), &(segs->ss)); + v3_set_vmcb_segment(&(guest_area->ldtr), &(segs->ldtr)); + v3_set_vmcb_segment(&(guest_area->gdtr), &(segs->gdtr)); + v3_set_vmcb_segment(&(guest_area->idtr), &(segs->idtr)); + v3_set_vmcb_segment(&(guest_area->tr), &(segs->tr)); } -void get_vmcb_segments(vmcb_t * vmcb, struct v3_segments * segs) { - vmcb_saved_state_t * guest_area = GET_VMCB_SAVE_STATE_AREA(vmcb); +void v3_get_vmcb_segments(vmcb_t * vmcb, struct v3_segments * segs) { + vmcb_saved_state_t * guest_area = GET_VMCB_SAVE_STATE_AREA(vmcb); - get_vmcb_segment(&(guest_area->cs), &(segs->cs)); - get_vmcb_segment(&(guest_area->ds), &(segs->ds)); - get_vmcb_segment(&(guest_area->es), &(segs->es)); - get_vmcb_segment(&(guest_area->fs), &(segs->fs)); - get_vmcb_segment(&(guest_area->gs), &(segs->gs)); - get_vmcb_segment(&(guest_area->ss), &(segs->ss)); - get_vmcb_segment(&(guest_area->ldtr), &(segs->ldtr)); - get_vmcb_segment(&(guest_area->gdtr), &(segs->gdtr)); - get_vmcb_segment(&(guest_area->idtr), &(segs->idtr)); - get_vmcb_segment(&(guest_area->tr), &(segs->tr)); + v3_get_vmcb_segment(&(guest_area->cs), &(segs->cs)); + v3_get_vmcb_segment(&(guest_area->ds), &(segs->ds)); + v3_get_vmcb_segment(&(guest_area->es), &(segs->es)); + v3_get_vmcb_segment(&(guest_area->fs), &(segs->fs)); + v3_get_vmcb_segment(&(guest_area->gs), &(segs->gs)); + v3_get_vmcb_segment(&(guest_area->ss), &(segs->ss)); + v3_get_vmcb_segment(&(guest_area->ldtr), &(segs->ldtr)); + v3_get_vmcb_segment(&(guest_area->gdtr), &(segs->gdtr)); + v3_get_vmcb_segment(&(guest_area->idtr), &(segs->idtr)); + v3_get_vmcb_segment(&(guest_area->tr), &(segs->tr)); } void PrintDebugVMCB(vmcb_t * vmcb) { - reg_ex_t tmp_reg; + int i; + reg_ex_t tmp_reg; - vmcb_ctrl_t * ctrl_area = GET_VMCB_CTRL_AREA(vmcb); - vmcb_saved_state_t * guest_area = GET_VMCB_SAVE_STATE_AREA(vmcb); + vmcb_ctrl_t * ctrl_area = GET_VMCB_CTRL_AREA(vmcb); + vmcb_saved_state_t * guest_area = GET_VMCB_SAVE_STATE_AREA(vmcb); - PrintDebug("VMCB (0x%.8x)\n", vmcb); + PrintDebug(VM_NONE, VCORE_NONE, "VMCB (0x%p)\n", (void *)vmcb); - PrintDebug("--Control Area--\n"); - PrintDebug("CR Reads: %x\n", *(ushort_t*)&(ctrl_area->cr_reads)); - PrintDebug("CR Writes: %x\n", *(ushort_t*)&(ctrl_area->cr_writes)); - PrintDebug("DR Reads: %x\n", *(ushort_t*)&(ctrl_area->dr_reads)); - PrintDebug("DR Writes: %x\n", *(ushort_t*)&(ctrl_area->dr_writes)); + PrintDebug(VM_NONE, VCORE_NONE, "--Control Area--\n"); + PrintDebug(VM_NONE, VCORE_NONE, "CR Reads: 0x%x\n", *(ushort_t*)&(ctrl_area->cr_reads)); + PrintDebug(VM_NONE, VCORE_NONE, "CR Writes: 0x%x\n", *(ushort_t*)&(ctrl_area->cr_writes)); + PrintDebug(VM_NONE, VCORE_NONE, "DR Reads: 0x%x\n", *(ushort_t*)&(ctrl_area->dr_reads)); + PrintDebug(VM_NONE, VCORE_NONE, "DR Writes: 0x%x\n", *(ushort_t*)&(ctrl_area->dr_writes)); - PrintDebug("Exception Bitmap: %x (at 0x%.8x)\n", *(uint_t*)&(ctrl_area->exceptions), &(ctrl_area->exceptions)); - PrintDebug("\tDivide-by-Zero: %d\n", ctrl_area->exceptions.de); - PrintDebug("\tDebug: %d\n", ctrl_area->exceptions.db); - PrintDebug("\tNon-maskable interrupts: %d\n", ctrl_area->exceptions.nmi); - PrintDebug("\tBreakpoint: %d\n", ctrl_area->exceptions.bp); - PrintDebug("\tOverflow: %d\n", ctrl_area->exceptions.of); - PrintDebug("\tBound-Range: %d\n", ctrl_area->exceptions.br); - PrintDebug("\tInvalid Opcode: %d\n", ctrl_area->exceptions.ud); - PrintDebug("\tDevice not available: %d\n", ctrl_area->exceptions.nm); - PrintDebug("\tDouble Fault: %d\n", ctrl_area->exceptions.df); - PrintDebug("\tInvalid TSS: %d\n", ctrl_area->exceptions.ts); - PrintDebug("\tSegment not present: %d\n", ctrl_area->exceptions.np); - PrintDebug("\tStack: %d\n", ctrl_area->exceptions.ss); - PrintDebug("\tGPF: %d\n", ctrl_area->exceptions.gp); - PrintDebug("\tPage Fault: %d\n", ctrl_area->exceptions.pf); - PrintDebug("\tFloating Point: %d\n", ctrl_area->exceptions.mf); - PrintDebug("\tAlignment Check: %d\n", ctrl_area->exceptions.ac); - PrintDebug("\tMachine Check: %d\n", ctrl_area->exceptions.mc); - PrintDebug("\tSIMD floating point: %d\n", ctrl_area->exceptions.xf); - PrintDebug("\tSecurity: %d\n", ctrl_area->exceptions.sx); - - PrintDebug("Instructions bitmap: %.8x (at 0x%.8x)\n", *(uint_t*)&(ctrl_area->instrs), &(ctrl_area->instrs)); - PrintDebug("\tINTR: %d\n", ctrl_area->instrs.INTR); - PrintDebug("\tNMI: %d\n", ctrl_area->instrs.NMI); - PrintDebug("\tSMI: %d\n", ctrl_area->instrs.SMI); - PrintDebug("\tINIT: %d\n", ctrl_area->instrs.INIT); - PrintDebug("\tVINTR: %d\n", ctrl_area->instrs.VINTR); - PrintDebug("\tCR0: %d\n", ctrl_area->instrs.CR0); - PrintDebug("\tRD_IDTR: %d\n", ctrl_area->instrs.RD_IDTR); - PrintDebug("\tRD_GDTR: %d\n", ctrl_area->instrs.RD_GDTR); - PrintDebug("\tRD_LDTR: %d\n", ctrl_area->instrs.RD_LDTR); - PrintDebug("\tRD_TR: %d\n", ctrl_area->instrs.RD_TR); - PrintDebug("\tWR_IDTR: %d\n", ctrl_area->instrs.WR_IDTR); - PrintDebug("\tWR_GDTR: %d\n", ctrl_area->instrs.WR_GDTR); - PrintDebug("\tWR_LDTR: %d\n", ctrl_area->instrs.WR_LDTR); - PrintDebug("\tWR_TR: %d\n", ctrl_area->instrs.WR_TR); - PrintDebug("\tRDTSC: %d\n", ctrl_area->instrs.RDTSC); - PrintDebug("\tRDPMC: %d\n", ctrl_area->instrs.RDPMC); - PrintDebug("\tPUSHF: %d\n", ctrl_area->instrs.PUSHF); - PrintDebug("\tPOPF: %d\n", ctrl_area->instrs.POPF); - PrintDebug("\tCPUID: %d\n", ctrl_area->instrs.CPUID); - PrintDebug("\tRSM: %d\n", ctrl_area->instrs.RSM); - PrintDebug("\tIRET: %d\n", ctrl_area->instrs.IRET); - PrintDebug("\tINTn: %d\n", ctrl_area->instrs.INTn); - PrintDebug("\tINVD: %d\n", ctrl_area->instrs.INVD); - PrintDebug("\tPAUSE: %d\n", ctrl_area->instrs.PAUSE); - PrintDebug("\tHLT: %d\n", ctrl_area->instrs.HLT); - PrintDebug("\tINVLPG: %d\n", ctrl_area->instrs.INVLPG); - PrintDebug("\tINVLPGA: %d\n", ctrl_area->instrs.INVLPGA); - PrintDebug("\tIOIO_PROT: %d\n", ctrl_area->instrs.IOIO_PROT); - PrintDebug("\tMSR_PROT: %d\n", ctrl_area->instrs.MSR_PROT); - PrintDebug("\ttask_switch: %d\n", ctrl_area->instrs.task_switch); - PrintDebug("\tFERR_FREEZE: %d\n", ctrl_area->instrs.FERR_FREEZE); - PrintDebug("\tshutdown_evts: %d\n", ctrl_area->instrs.shutdown_evts); - - PrintDebug("SVM Instruction Bitmap: %.8x (at 0x%.8x)\n", *(uint_t*)&(ctrl_area->svm_instrs), &(ctrl_area->svm_instrs)); - PrintDebug("\tVMRUN: %d\n", ctrl_area->svm_instrs.VMRUN); - PrintDebug("\tVMMCALL: %d\n", ctrl_area->svm_instrs.VMMCALL); - PrintDebug("\tVMLOAD: %d\n", ctrl_area->svm_instrs.VMLOAD); - PrintDebug("\tVMSAVE: %d\n", ctrl_area->svm_instrs.VMSAVE); - PrintDebug("\tSTGI: %d\n", ctrl_area->svm_instrs.STGI); - PrintDebug("\tCLGI: %d\n", ctrl_area->svm_instrs.CLGI); - PrintDebug("\tSKINIT: %d\n", ctrl_area->svm_instrs.SKINIT); - PrintDebug("\tRDTSCP: %d\n", ctrl_area->svm_instrs.RDTSCP); - PrintDebug("\tICEBP: %d\n", ctrl_area->svm_instrs.ICEBP); - PrintDebug("\tWBINVD: %d\n", ctrl_area->svm_instrs.WBINVD); - PrintDebug("\tMONITOR: %d\n", ctrl_area->svm_instrs.MONITOR); - PrintDebug("\tMWAIT_always: %d\n", ctrl_area->svm_instrs.MWAIT_always); - PrintDebug("\tMWAIT_if_armed: %d\n", ctrl_area->svm_instrs.MWAIT_if_armed); - - - - tmp_reg.r_reg = ctrl_area->IOPM_BASE_PA; - PrintDebug("IOPM_BASE_PA: lo: 0x%.8x, hi: 0x%.8x\n", tmp_reg.e_reg.low, tmp_reg.e_reg.high); - tmp_reg.r_reg = ctrl_area->MSRPM_BASE_PA; - PrintDebug("MSRPM_BASE_PA: lo: 0x%.8x, hi: 0x%.8x\n", tmp_reg.e_reg.low, tmp_reg.e_reg.high); - tmp_reg.r_reg = ctrl_area->TSC_OFFSET; - PrintDebug("TSC_OFFSET: lo: 0x%.8x, hi: 0x%.8x\n", tmp_reg.e_reg.low, tmp_reg.e_reg.high); - - PrintDebug("guest_ASID: %d\n", ctrl_area->guest_ASID); - PrintDebug("TLB_CONTROL: %d\n", ctrl_area->TLB_CONTROL); - - - PrintDebug("Guest Control Bitmap: %x (at 0x%.8x)\n", *(uint_t*)&(ctrl_area->guest_ctrl), &(ctrl_area->guest_ctrl)); - PrintDebug("\tV_TPR: %d\n", ctrl_area->guest_ctrl.V_TPR); - PrintDebug("\tV_IRQ: %d\n", ctrl_area->guest_ctrl.V_IRQ); - PrintDebug("\tV_INTR_PRIO: %d\n", ctrl_area->guest_ctrl.V_INTR_PRIO); - PrintDebug("\tV_IGN_TPR: %d\n", ctrl_area->guest_ctrl.V_IGN_TPR); - PrintDebug("\tV_INTR_MASKING: %d\n", ctrl_area->guest_ctrl.V_INTR_MASKING); - PrintDebug("\tV_INTR_VECTOR: %d\n", ctrl_area->guest_ctrl.V_INTR_VECTOR); - - PrintDebug("Interrupt_shadow: %d\n", ctrl_area->interrupt_shadow); - - - tmp_reg.r_reg = ctrl_area->exit_code; - PrintDebug("exit_code: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = ctrl_area->exit_info1; - PrintDebug("exit_info1: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = ctrl_area->exit_info2; - PrintDebug("exit_info2: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - - PrintDebug("Exit Int Info: (at 0x%.8x)\n", &(ctrl_area->exit_int_info)); - PrintDebug("Vector: %d\n", ctrl_area->exit_int_info.vector); - PrintDebug("(type=%d) (ev=%d) (valid=%d)\n", ctrl_area->exit_int_info.type, - ctrl_area->exit_int_info.ev, ctrl_area->exit_int_info.valid); - PrintDebug("Error Code: %d\n", ctrl_area->exit_int_info.error_code); - - - tmp_reg.r_reg = ctrl_area->NP_ENABLE; - PrintDebug("NP_ENABLE: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - PrintDebug("Event Injection: (at 0x%.8x)\n", &(ctrl_area->EVENTINJ)); - PrintDebug("Vector: %d\n", ctrl_area->EVENTINJ.vector); - PrintDebug("(type=%d) (ev=%d) (valid=%d)\n", ctrl_area->EVENTINJ.type, - ctrl_area->EVENTINJ.ev, ctrl_area->EVENTINJ.valid); - PrintDebug("Error Code: %d\n", ctrl_area->EVENTINJ.error_code); - - - tmp_reg.r_reg = ctrl_area->N_CR3; - PrintDebug("N_CR3: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - PrintDebug("LBR_VIRTUALIZATION_ENABLE: %d\n", ctrl_area->LBR_VIRTUALIZATION_ENABLE); - - - PrintDebug("\n--Guest Saved State--\n"); - - PrintDebug("es Selector (at 0x%.8x): \n", &(guest_area->es)); - PrintDebug("\tSelector: %d\n", guest_area->es.selector); - PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", - guest_area->es.attrib.fields.type, guest_area->es.attrib.fields.S, - guest_area->es.attrib.fields.dpl, guest_area->es.attrib.fields.P, - guest_area->es.attrib.fields.avl, guest_area->es.attrib.fields.L, - guest_area->es.attrib.fields.db, guest_area->es.attrib.fields.G); - PrintDebug("\tlimit: %lu\n", guest_area->es.limit); - tmp_reg.r_reg = guest_area->es.base; - PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - - PrintDebug("cs Selector (at 0x%.8x): \n", &(guest_area->cs)); - PrintDebug("\tSelector: %d\n", guest_area->cs.selector); - PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", - guest_area->cs.attrib.fields.type, guest_area->cs.attrib.fields.S, - guest_area->cs.attrib.fields.dpl, guest_area->cs.attrib.fields.P, - guest_area->cs.attrib.fields.avl, guest_area->cs.attrib.fields.L, - guest_area->cs.attrib.fields.db, guest_area->cs.attrib.fields.G); - PrintDebug("\tlimit: %lu\n", guest_area->cs.limit); - tmp_reg.r_reg = guest_area->cs.base; - PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - - PrintDebug("ss Selector (at 0x%.8x): \n", &(guest_area->ss)); - PrintDebug("\tSelector: %d\n", guest_area->ss.selector); - PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", - guest_area->ss.attrib.fields.type, guest_area->ss.attrib.fields.S, - guest_area->ss.attrib.fields.dpl, guest_area->ss.attrib.fields.P, - guest_area->ss.attrib.fields.avl, guest_area->ss.attrib.fields.L, - guest_area->ss.attrib.fields.db, guest_area->ss.attrib.fields.G); - PrintDebug("\tlimit: %lu\n", guest_area->ss.limit); - tmp_reg.r_reg = guest_area->ss.base; - PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - - PrintDebug("ds Selector (at 0x%.8x): \n", &(guest_area->ds)); - PrintDebug("\tSelector: %d\n", guest_area->ds.selector); - PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", - guest_area->ds.attrib.fields.type, guest_area->ds.attrib.fields.S, - guest_area->ds.attrib.fields.dpl, guest_area->ds.attrib.fields.P, - guest_area->ds.attrib.fields.avl, guest_area->ds.attrib.fields.L, - guest_area->ds.attrib.fields.db, guest_area->ds.attrib.fields.G); - PrintDebug("\tlimit: %lu\n", guest_area->ds.limit); - tmp_reg.r_reg = guest_area->ds.base; - PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - - PrintDebug("fs Selector (at 0x%.8x): \n", &(guest_area->fs)); - PrintDebug("\tSelector: %d\n", guest_area->fs.selector); - PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", - guest_area->fs.attrib.fields.type, guest_area->fs.attrib.fields.S, - guest_area->fs.attrib.fields.dpl, guest_area->fs.attrib.fields.P, - guest_area->fs.attrib.fields.avl, guest_area->fs.attrib.fields.L, - guest_area->fs.attrib.fields.db, guest_area->fs.attrib.fields.G); - PrintDebug("\tlimit: %lu\n", guest_area->fs.limit); - tmp_reg.r_reg = guest_area->fs.base; - PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - - PrintDebug("gs Selector (at 0x%.8x): \n", &(guest_area->gs)); - PrintDebug("\tSelector: %d\n", guest_area->gs.selector); - PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", - guest_area->gs.attrib.fields.type, guest_area->gs.attrib.fields.S, - guest_area->gs.attrib.fields.dpl, guest_area->gs.attrib.fields.P, - guest_area->gs.attrib.fields.avl, guest_area->gs.attrib.fields.L, - guest_area->gs.attrib.fields.db, guest_area->gs.attrib.fields.G); - PrintDebug("\tlimit: %lu\n", guest_area->gs.limit); - tmp_reg.r_reg = guest_area->gs.base; - PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - - PrintDebug("gdtr Selector (at 0x%.8x): \n", &(guest_area->gdtr)); - PrintDebug("\tSelector: %d\n", guest_area->gdtr.selector); - PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", - guest_area->gdtr.attrib.fields.type, guest_area->gdtr.attrib.fields.S, - guest_area->gdtr.attrib.fields.dpl, guest_area->gdtr.attrib.fields.P, - guest_area->gdtr.attrib.fields.avl, guest_area->gdtr.attrib.fields.L, - guest_area->gdtr.attrib.fields.db, guest_area->gdtr.attrib.fields.G); - PrintDebug("\tlimit: %lu\n", guest_area->gdtr.limit); - tmp_reg.r_reg = guest_area->gdtr.base; - PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - - PrintDebug("ldtr Selector (at 0x%.8x): \n", &(guest_area->ldtr)); - PrintDebug("\tSelector: %d\n", guest_area->ldtr.selector); - PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", - guest_area->ldtr.attrib.fields.type, guest_area->ldtr.attrib.fields.S, - guest_area->ldtr.attrib.fields.dpl, guest_area->ldtr.attrib.fields.P, - guest_area->ldtr.attrib.fields.avl, guest_area->ldtr.attrib.fields.L, - guest_area->ldtr.attrib.fields.db, guest_area->ldtr.attrib.fields.G); - PrintDebug("\tlimit: %lu\n", guest_area->ldtr.limit); - tmp_reg.r_reg = guest_area->ldtr.base; - PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - - PrintDebug("idtr Selector (at 0x%.8x): \n", &(guest_area->idtr)); - PrintDebug("\tSelector: %d\n", guest_area->idtr.selector); - PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", - guest_area->idtr.attrib.fields.type, guest_area->idtr.attrib.fields.S, - guest_area->idtr.attrib.fields.dpl, guest_area->idtr.attrib.fields.P, - guest_area->idtr.attrib.fields.avl, guest_area->idtr.attrib.fields.L, - guest_area->idtr.attrib.fields.db, guest_area->idtr.attrib.fields.G); - PrintDebug("\tlimit: %lu\n", guest_area->idtr.limit); - tmp_reg.r_reg = guest_area->idtr.base; - PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - - PrintDebug("tr Selector (at 0x%.8x): \n", &(guest_area->tr)); - PrintDebug("\tSelector: %d\n", guest_area->tr.selector); - PrintDebug("\t(type=%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", - guest_area->tr.attrib.fields.type, guest_area->tr.attrib.fields.S, - guest_area->tr.attrib.fields.dpl, guest_area->tr.attrib.fields.P, - guest_area->tr.attrib.fields.avl, guest_area->tr.attrib.fields.L, - guest_area->tr.attrib.fields.db, guest_area->tr.attrib.fields.G); - PrintDebug("\tlimit: %lu\n", guest_area->tr.limit); - tmp_reg.r_reg = guest_area->tr.base; - PrintDebug("\tBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - - PrintDebug("cpl: %d\n", guest_area->cpl); + PrintDebug(VM_NONE, VCORE_NONE, "Exception Bitmap: 0x%x (at 0x%p)\n", *(uint_t*)&(ctrl_area->exceptions), (void *)&(ctrl_area->exceptions)); + PrintDebug(VM_NONE, VCORE_NONE, " Divide-by-Zero: %d\n", ctrl_area->exceptions.de); + PrintDebug(VM_NONE, VCORE_NONE, " Debug: %d\n", ctrl_area->exceptions.db); + PrintDebug(VM_NONE, VCORE_NONE, " Non-maskable interrupts: %d\n", ctrl_area->exceptions.nmi); + PrintDebug(VM_NONE, VCORE_NONE, " Breakpoint: %d\n", ctrl_area->exceptions.bp); + PrintDebug(VM_NONE, VCORE_NONE, " Overflow: %d\n", ctrl_area->exceptions.of); + PrintDebug(VM_NONE, VCORE_NONE, " Bound-Range: %d\n", ctrl_area->exceptions.br); + PrintDebug(VM_NONE, VCORE_NONE, " Invalid Opcode: %d\n", ctrl_area->exceptions.ud); + PrintDebug(VM_NONE, VCORE_NONE, " Device not available: %d\n", ctrl_area->exceptions.nm); + PrintDebug(VM_NONE, VCORE_NONE, " Double Fault: %d\n", ctrl_area->exceptions.df); + PrintDebug(VM_NONE, VCORE_NONE, " Invalid TSS: %d\n", ctrl_area->exceptions.ts); + PrintDebug(VM_NONE, VCORE_NONE, " Segment not present: %d\n", ctrl_area->exceptions.np); + PrintDebug(VM_NONE, VCORE_NONE, " Stack: %d\n", ctrl_area->exceptions.ss); + PrintDebug(VM_NONE, VCORE_NONE, " GPF: %d\n", ctrl_area->exceptions.gp); + PrintDebug(VM_NONE, VCORE_NONE, " Page Fault: %d\n", ctrl_area->exceptions.pf); + PrintDebug(VM_NONE, VCORE_NONE, " Floating Point: %d\n", ctrl_area->exceptions.mf); + PrintDebug(VM_NONE, VCORE_NONE, " Alignment Check: %d\n", ctrl_area->exceptions.ac); + PrintDebug(VM_NONE, VCORE_NONE, " Machine Check: %d\n", ctrl_area->exceptions.mc); + PrintDebug(VM_NONE, VCORE_NONE, " SIMD floating point: %d\n", ctrl_area->exceptions.xf); + PrintDebug(VM_NONE, VCORE_NONE, " Security: %d\n", ctrl_area->exceptions.sx); + + PrintDebug(VM_NONE, VCORE_NONE, "Instructions bitmap: 0x%.8x (at 0x%p)\n", *(uint_t*)&(ctrl_area->instrs), &(ctrl_area->instrs)); + PrintDebug(VM_NONE, VCORE_NONE, " INTR: %d\n", ctrl_area->instrs.INTR); + PrintDebug(VM_NONE, VCORE_NONE, " NMI: %d\n", ctrl_area->instrs.NMI); + PrintDebug(VM_NONE, VCORE_NONE, " SMI: %d\n", ctrl_area->instrs.SMI); + PrintDebug(VM_NONE, VCORE_NONE, " INIT: %d\n", ctrl_area->instrs.INIT); + PrintDebug(VM_NONE, VCORE_NONE, " VINTR: %d\n", ctrl_area->instrs.VINTR); + PrintDebug(VM_NONE, VCORE_NONE, " CR0: %d\n", ctrl_area->instrs.CR0); + PrintDebug(VM_NONE, VCORE_NONE, " RD_IDTR: %d\n", ctrl_area->instrs.RD_IDTR); + PrintDebug(VM_NONE, VCORE_NONE, " RD_GDTR: %d\n", ctrl_area->instrs.RD_GDTR); + PrintDebug(VM_NONE, VCORE_NONE, " RD_LDTR: %d\n", ctrl_area->instrs.RD_LDTR); + PrintDebug(VM_NONE, VCORE_NONE, " RD_TR: %d\n", ctrl_area->instrs.RD_TR); + PrintDebug(VM_NONE, VCORE_NONE, " WR_IDTR: %d\n", ctrl_area->instrs.WR_IDTR); + PrintDebug(VM_NONE, VCORE_NONE, " WR_GDTR: %d\n", ctrl_area->instrs.WR_GDTR); + PrintDebug(VM_NONE, VCORE_NONE, " WR_LDTR: %d\n", ctrl_area->instrs.WR_LDTR); + PrintDebug(VM_NONE, VCORE_NONE, " WR_TR: %d\n", ctrl_area->instrs.WR_TR); + PrintDebug(VM_NONE, VCORE_NONE, " RDTSC: %d\n", ctrl_area->instrs.RDTSC); + PrintDebug(VM_NONE, VCORE_NONE, " RDPMC: %d\n", ctrl_area->instrs.RDPMC); + PrintDebug(VM_NONE, VCORE_NONE, " PUSHF: %d\n", ctrl_area->instrs.PUSHF); + PrintDebug(VM_NONE, VCORE_NONE, " POPF: %d\n", ctrl_area->instrs.POPF); + PrintDebug(VM_NONE, VCORE_NONE, " CPUID: %d\n", ctrl_area->instrs.CPUID); + PrintDebug(VM_NONE, VCORE_NONE, " RSM: %d\n", ctrl_area->instrs.RSM); + PrintDebug(VM_NONE, VCORE_NONE, " IRET: %d\n", ctrl_area->instrs.IRET); + PrintDebug(VM_NONE, VCORE_NONE, " INTn: %d\n", ctrl_area->instrs.INTn); + PrintDebug(VM_NONE, VCORE_NONE, " INVD: %d\n", ctrl_area->instrs.INVD); + PrintDebug(VM_NONE, VCORE_NONE, " PAUSE: %d\n", ctrl_area->instrs.PAUSE); + PrintDebug(VM_NONE, VCORE_NONE, " HLT: %d\n", ctrl_area->instrs.HLT); + PrintDebug(VM_NONE, VCORE_NONE, " INVLPG: %d\n", ctrl_area->instrs.INVLPG); + PrintDebug(VM_NONE, VCORE_NONE, " INVLPGA: %d\n", ctrl_area->instrs.INVLPGA); + PrintDebug(VM_NONE, VCORE_NONE, " IOIO_PROT: %d\n", ctrl_area->instrs.IOIO_PROT); + PrintDebug(VM_NONE, VCORE_NONE, " MSR_PROT: %d\n", ctrl_area->instrs.MSR_PROT); + PrintDebug(VM_NONE, VCORE_NONE, " task_switch: %d\n", ctrl_area->instrs.task_switch); + PrintDebug(VM_NONE, VCORE_NONE, " FERR_FREEZE: %d\n", ctrl_area->instrs.FERR_FREEZE); + PrintDebug(VM_NONE, VCORE_NONE, " shutdown_evts: %d\n", ctrl_area->instrs.shutdown_evts); + + PrintDebug(VM_NONE, VCORE_NONE, "SVM Instruction Bitmap: %x (at 0x%p)\n", *(uint_t*)&(ctrl_area->svm_instrs), &(ctrl_area->svm_instrs)); + PrintDebug(VM_NONE, VCORE_NONE, " VMRUN: %d\n", ctrl_area->svm_instrs.VMRUN); + PrintDebug(VM_NONE, VCORE_NONE, " VMMCALL: %d\n", ctrl_area->svm_instrs.VMMCALL); + PrintDebug(VM_NONE, VCORE_NONE, " VMLOAD: %d\n", ctrl_area->svm_instrs.VMLOAD); + PrintDebug(VM_NONE, VCORE_NONE, " VMSAVE: %d\n", ctrl_area->svm_instrs.VMSAVE); + PrintDebug(VM_NONE, VCORE_NONE, " STGI: %d\n", ctrl_area->svm_instrs.STGI); + PrintDebug(VM_NONE, VCORE_NONE, " CLGI: %d\n", ctrl_area->svm_instrs.CLGI); + PrintDebug(VM_NONE, VCORE_NONE, " SKINIT: %d\n", ctrl_area->svm_instrs.SKINIT); + PrintDebug(VM_NONE, VCORE_NONE, " RDTSCP: %d\n", ctrl_area->svm_instrs.RDTSCP); + PrintDebug(VM_NONE, VCORE_NONE, " ICEBP: %d\n", ctrl_area->svm_instrs.ICEBP); + PrintDebug(VM_NONE, VCORE_NONE, " WBINVD: %d\n", ctrl_area->svm_instrs.WBINVD); + PrintDebug(VM_NONE, VCORE_NONE, " MONITOR: %d\n", ctrl_area->svm_instrs.MONITOR); + PrintDebug(VM_NONE, VCORE_NONE, " MWAIT_always: %d\n", ctrl_area->svm_instrs.MWAIT_always); + PrintDebug(VM_NONE, VCORE_NONE, " MWAIT_if_armed: %d\n", ctrl_area->svm_instrs.MWAIT_if_armed); + PrintDebug(VM_NONE, VCORE_NONE, " XSETBV: %d\n", ctrl_area->svm_instrs.XSETBV); + PrintDebug(VM_NONE, VCORE_NONE, " Pause Filter Threshold: 0x%x\n", ctrl_area->pause_filter_threshold); + PrintDebug(VM_NONE, VCORE_NONE, " Pause Filter Count: 0x%x\n", ctrl_area->pause_filter_count); + + + tmp_reg.r_reg = ctrl_area->IOPM_BASE_PA; + PrintDebug(VM_NONE, VCORE_NONE, "IOPM_BASE_PA: lo: 0x%x, hi: 0x%x\n", tmp_reg.e_reg.low, tmp_reg.e_reg.high); + tmp_reg.r_reg = ctrl_area->MSRPM_BASE_PA; + PrintDebug(VM_NONE, VCORE_NONE, "MSRPM_BASE_PA: lo: 0x%x, hi: 0x%x\n", tmp_reg.e_reg.low, tmp_reg.e_reg.high); + tmp_reg.r_reg = ctrl_area->TSC_OFFSET; + PrintDebug(VM_NONE, VCORE_NONE, "TSC_OFFSET: lo: 0x%x, hi: 0x%x\n", tmp_reg.e_reg.low, tmp_reg.e_reg.high); + + PrintDebug(VM_NONE, VCORE_NONE, "guest_ASID: 0x%x\n", ctrl_area->guest_ASID); + PrintDebug(VM_NONE, VCORE_NONE, "TLB_CONTROL: 0x%x\n", ctrl_area->TLB_CONTROL); + + PrintDebug(VM_NONE, VCORE_NONE, "Guest Control Bitmap: 0x%x (at %p)\n", *(uint_t*)&(ctrl_area->guest_ctrl), &(ctrl_area->guest_ctrl)); + PrintDebug(VM_NONE, VCORE_NONE, " V_TPR: 0x%x\n", ctrl_area->guest_ctrl.V_TPR); + PrintDebug(VM_NONE, VCORE_NONE, " V_IRQ: %d\n", ctrl_area->guest_ctrl.V_IRQ); + PrintDebug(VM_NONE, VCORE_NONE, " V_INTR_PRIO: 0x%x\n", ctrl_area->guest_ctrl.V_INTR_PRIO); + PrintDebug(VM_NONE, VCORE_NONE, " V_IGN_TPR: %d\n", ctrl_area->guest_ctrl.V_IGN_TPR); + PrintDebug(VM_NONE, VCORE_NONE, " V_INTR_MASKING: %d\n", ctrl_area->guest_ctrl.V_INTR_MASKING); + PrintDebug(VM_NONE, VCORE_NONE, " V_INTR_VECTOR: 0x%x\n", ctrl_area->guest_ctrl.V_INTR_VECTOR); + + PrintDebug(VM_NONE, VCORE_NONE, "Interrupt_shadow: %d\n", ctrl_area->interrupt_shadow); + + + tmp_reg.r_reg = ctrl_area->exit_code; + PrintDebug(VM_NONE, VCORE_NONE, "exit_code: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = ctrl_area->exit_info1; + PrintDebug(VM_NONE, VCORE_NONE, "exit_info1: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = ctrl_area->exit_info2; + PrintDebug(VM_NONE, VCORE_NONE, "exit_info2: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + + PrintDebug(VM_NONE, VCORE_NONE, "Exit Int Info: (at %p)\n", &(ctrl_area->exit_int_info)); + PrintDebug(VM_NONE, VCORE_NONE, " Vector: 0x%x\n", ctrl_area->exit_int_info.vector); + PrintDebug(VM_NONE, VCORE_NONE, " (type=0x%x) (ev=0x%x) (valid=0x%x)\n", ctrl_area->exit_int_info.type, + ctrl_area->exit_int_info.ev, ctrl_area->exit_int_info.valid); + PrintDebug(VM_NONE, VCORE_NONE, " Error Code: 0x%x\n", ctrl_area->exit_int_info.error_code); + + + PrintDebug(VM_NONE, VCORE_NONE, "NP_ENABLE: %d\n",ctrl_area->NP_ENABLE); + + PrintDebug(VM_NONE, VCORE_NONE, "AVIC_APIC_BAR: 0x%llx\n", (uint64_t) ctrl_area->AVIC_APIC_BAR); + + PrintDebug(VM_NONE, VCORE_NONE, "Event Injection: (at %p)\n", &(ctrl_area->EVENTINJ)); + PrintDebug(VM_NONE, VCORE_NONE, " Vector: 0x%x\n", ctrl_area->EVENTINJ.vector); + PrintDebug(VM_NONE, VCORE_NONE, " (type=0x%x) (ev=0x%x) (valid=0x%x)\n", ctrl_area->EVENTINJ.type, + ctrl_area->EVENTINJ.ev, ctrl_area->EVENTINJ.valid); + PrintDebug(VM_NONE, VCORE_NONE, " Error Code: 0x%x\n", ctrl_area->EVENTINJ.error_code); + + + tmp_reg.r_reg = ctrl_area->N_CR3; + PrintDebug(VM_NONE, VCORE_NONE, "N_CR3: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + PrintDebug(VM_NONE, VCORE_NONE, "LBR_VIRTUALIZATION_ENABLE: %d\n", ctrl_area->LBR_VIRTUALIZATION_ENABLE); + + PrintDebug(VM_NONE, VCORE_NONE, "VMCB CLEAN BITS: 0x%x\n", ctrl_area->clean_bits); + + PrintDebug(VM_NONE, VCORE_NONE, "NRIP: 0x%llx\n", ctrl_area->nrip); + + PrintDebug(VM_NONE, VCORE_NONE, "Instruction (at %p)\n", &ctrl_area->num_ifetch_bytes); + + PrintDebug(VM_NONE, VCORE_NONE, " num_ifetch_bytes=0x%x\n",ctrl_area->num_ifetch_bytes); + PrintDebug(VM_NONE,VCORE_NONE, " bytes=0x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x\n", + ctrl_area->ifetch_bytes[0], + ctrl_area->ifetch_bytes[1], + ctrl_area->ifetch_bytes[2], + ctrl_area->ifetch_bytes[3], + ctrl_area->ifetch_bytes[4], + ctrl_area->ifetch_bytes[5], + ctrl_area->ifetch_bytes[6], + ctrl_area->ifetch_bytes[7], + ctrl_area->ifetch_bytes[8], + ctrl_area->ifetch_bytes[9], + ctrl_area->ifetch_bytes[10], + ctrl_area->ifetch_bytes[11], + ctrl_area->ifetch_bytes[12], + ctrl_area->ifetch_bytes[13], + ctrl_area->ifetch_bytes[14]); + + PrintDebug(VM_NONE, VCORE_NONE, "AVIC_APIC_backing_page: 0x%llx\n", (uint64_t) ctrl_area->AVIC_APIC_backing_page); + PrintDebug(VM_NONE, VCORE_NONE, "AVIC_logical_table: 0x%llx\n", (uint64_t)ctrl_area->AVIC_logical_table); + PrintDebug(VM_NONE, VCORE_NONE, "AVIC_PHYSICAL_MAX_INDEX: 0x%x\n", ctrl_area->AVIC_PHYSICAL_MAX_INDEX); + PrintDebug(VM_NONE, VCORE_NONE, "AVIC_PHYSICAL_TABLE_PTR: 0x%llx\n", (uint64_t)ctrl_area->AVIC_PHYSICAL_TABLE_PTR); + + + for (i=0;i<40;i++) { + if (ctrl_area->rsvd1[i]) { + PrintDebug(VM_NONE, VCORE_NONE, "control rsvd1[%d] has value 0x%x\n", i, ctrl_area->rsvd1[i]); + } + } + + for (i=0;i<3;i++) { + if (ctrl_area->rsvd2[i]) { + PrintDebug(VM_NONE, VCORE_NONE, "control rsvd2[%d] has value 0x%x\n", i, ctrl_area->rsvd2[i]); + } + } + + if (ctrl_area->rsvd3) { + PrintDebug(VM_NONE, VCORE_NONE, "control rsvd3 has value 0x%llx\n", (uint64_t) ctrl_area->rsvd3); + } + + if (ctrl_area->rsvd4) { + PrintDebug(VM_NONE, VCORE_NONE, "control rsvd4 has value 0x%llx\n", (uint64_t) ctrl_area->rsvd4); + } + + if (ctrl_area->rsvd5) { + PrintDebug(VM_NONE, VCORE_NONE, "control rsvd5 has value 0x%llx\n", (uint64_t) ctrl_area->rsvd5); + } + + for (i=0;i<8;i++) { + if (ctrl_area->rsvd6[i]) { + PrintDebug(VM_NONE, VCORE_NONE, "control rsvd6[%d] has value 0x%x\n", i, ctrl_area->rsvd6[i]); + } + } + + + if (ctrl_area->rsvd7) { + PrintDebug(VM_NONE, VCORE_NONE, "control rsvd7 has value 0x%llx\n", (uint64_t) ctrl_area->rsvd7); + } + + if (ctrl_area->rsvd8) { + PrintDebug(VM_NONE, VCORE_NONE, "control rsvd8 has value 0x%llx\n", (uint64_t) ctrl_area->rsvd8); + } + + if (ctrl_area->rsvd9) { + PrintDebug(VM_NONE, VCORE_NONE, "control rsvd9 has value 0x%llx\n", (uint64_t) ctrl_area->rsvd9); + } + + if (ctrl_area->rsvd10) { + PrintDebug(VM_NONE, VCORE_NONE, "control rsvd10 has value 0x%llx\n", (uint64_t) ctrl_area->rsvd10); + } + + if (ctrl_area->rsvd11) { + PrintDebug(VM_NONE, VCORE_NONE, "control rsvd11 has value 0x%llx\n", (uint64_t) ctrl_area->rsvd11); + } + + if (ctrl_area->rsvd12) { + PrintDebug(VM_NONE, VCORE_NONE, "control rsvd12 has value 0x%llx\n", (uint64_t) ctrl_area->rsvd12); + } + + if (ctrl_area->rsvd13) { + PrintDebug(VM_NONE, VCORE_NONE, "control rsvd13 has value 0x%llx\n", (uint64_t) ctrl_area->rsvd13); + } + + + for (i=0;irsvd_tail[i]) { + PrintDebug(VM_NONE, VCORE_NONE, "control reserved tail %d has value 0x%x\n", i, ctrl_area->rsvd_tail[i]); + } + } + + + PrintDebug(VM_NONE, VCORE_NONE, "\n--Guest Saved State--\n"); + + PrintDebug(VM_NONE, VCORE_NONE, "es Selector (at %p): \n", &(guest_area->es)); + PrintDebug(VM_NONE, VCORE_NONE, " Selector: 0x%x\n", guest_area->es.selector); + PrintDebug(VM_NONE, VCORE_NONE, " (type=0x%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", + guest_area->es.attrib.fields.type, guest_area->es.attrib.fields.S, + guest_area->es.attrib.fields.dpl, guest_area->es.attrib.fields.P, + guest_area->es.attrib.fields.avl, guest_area->es.attrib.fields.L, + guest_area->es.attrib.fields.db, guest_area->es.attrib.fields.G); + PrintDebug(VM_NONE, VCORE_NONE, " limit: 0x%x\n", guest_area->es.limit); + tmp_reg.r_reg = guest_area->es.base; + PrintDebug(VM_NONE, VCORE_NONE, " Base: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + + PrintDebug(VM_NONE, VCORE_NONE, "cs Selector (at %p): \n", &(guest_area->cs)); + PrintDebug(VM_NONE, VCORE_NONE, " Selector: 0x%x\n", guest_area->cs.selector); + PrintDebug(VM_NONE, VCORE_NONE, " (type=0x%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", + guest_area->cs.attrib.fields.type, guest_area->cs.attrib.fields.S, + guest_area->cs.attrib.fields.dpl, guest_area->cs.attrib.fields.P, + guest_area->cs.attrib.fields.avl, guest_area->cs.attrib.fields.L, + guest_area->cs.attrib.fields.db, guest_area->cs.attrib.fields.G); + PrintDebug(VM_NONE, VCORE_NONE, " limit: 0x%x\n", guest_area->cs.limit); + tmp_reg.r_reg = guest_area->cs.base; + PrintDebug(VM_NONE, VCORE_NONE, " Base: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + + PrintDebug(VM_NONE, VCORE_NONE, "ss Selector (at %p): \n", &(guest_area->ss)); + PrintDebug(VM_NONE, VCORE_NONE, " Selector: 0x%x\n", guest_area->ss.selector); + PrintDebug(VM_NONE, VCORE_NONE, " (type=0x%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", + guest_area->ss.attrib.fields.type, guest_area->ss.attrib.fields.S, + guest_area->ss.attrib.fields.dpl, guest_area->ss.attrib.fields.P, + guest_area->ss.attrib.fields.avl, guest_area->ss.attrib.fields.L, + guest_area->ss.attrib.fields.db, guest_area->ss.attrib.fields.G); + PrintDebug(VM_NONE, VCORE_NONE, " limit: 0x%x\n", guest_area->ss.limit); + tmp_reg.r_reg = guest_area->ss.base; + PrintDebug(VM_NONE, VCORE_NONE, " Base: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + + PrintDebug(VM_NONE, VCORE_NONE, "ds Selector (at %p): \n", &(guest_area->ds)); + PrintDebug(VM_NONE, VCORE_NONE, " Selector: 0x%x\n", guest_area->ds.selector); + PrintDebug(VM_NONE, VCORE_NONE, " (type=0x%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", + guest_area->ds.attrib.fields.type, guest_area->ds.attrib.fields.S, + guest_area->ds.attrib.fields.dpl, guest_area->ds.attrib.fields.P, + guest_area->ds.attrib.fields.avl, guest_area->ds.attrib.fields.L, + guest_area->ds.attrib.fields.db, guest_area->ds.attrib.fields.G); + PrintDebug(VM_NONE, VCORE_NONE, " limit: 0x%x\n", guest_area->ds.limit); + tmp_reg.r_reg = guest_area->ds.base; + PrintDebug(VM_NONE, VCORE_NONE, " Base: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + + PrintDebug(VM_NONE, VCORE_NONE, "fs Selector (at %p): \n", &(guest_area->fs)); + PrintDebug(VM_NONE, VCORE_NONE, " Selector: 0x%x\n", guest_area->fs.selector); + PrintDebug(VM_NONE, VCORE_NONE, " (type=0x%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", + guest_area->fs.attrib.fields.type, guest_area->fs.attrib.fields.S, + guest_area->fs.attrib.fields.dpl, guest_area->fs.attrib.fields.P, + guest_area->fs.attrib.fields.avl, guest_area->fs.attrib.fields.L, + guest_area->fs.attrib.fields.db, guest_area->fs.attrib.fields.G); + PrintDebug(VM_NONE, VCORE_NONE, " limit: 0x%x\n", guest_area->fs.limit); + tmp_reg.r_reg = guest_area->fs.base; + PrintDebug(VM_NONE, VCORE_NONE, " Base: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + + PrintDebug(VM_NONE, VCORE_NONE, "gs Selector (at %p): \n", &(guest_area->gs)); + PrintDebug(VM_NONE, VCORE_NONE, " Selector: 0x%x\n", guest_area->gs.selector); + PrintDebug(VM_NONE, VCORE_NONE, " (type=0x%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", + guest_area->gs.attrib.fields.type, guest_area->gs.attrib.fields.S, + guest_area->gs.attrib.fields.dpl, guest_area->gs.attrib.fields.P, + guest_area->gs.attrib.fields.avl, guest_area->gs.attrib.fields.L, + guest_area->gs.attrib.fields.db, guest_area->gs.attrib.fields.G); + PrintDebug(VM_NONE, VCORE_NONE, " limit: 0x%x\n", guest_area->gs.limit); + tmp_reg.r_reg = guest_area->gs.base; + PrintDebug(VM_NONE, VCORE_NONE, " Base: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + + PrintDebug(VM_NONE, VCORE_NONE, "gdtr Selector (at %p): \n", &(guest_area->gdtr)); + PrintDebug(VM_NONE, VCORE_NONE, " Selector: 0x%x\n", guest_area->gdtr.selector); + PrintDebug(VM_NONE, VCORE_NONE, " (type=0x%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", + guest_area->gdtr.attrib.fields.type, guest_area->gdtr.attrib.fields.S, + guest_area->gdtr.attrib.fields.dpl, guest_area->gdtr.attrib.fields.P, + guest_area->gdtr.attrib.fields.avl, guest_area->gdtr.attrib.fields.L, + guest_area->gdtr.attrib.fields.db, guest_area->gdtr.attrib.fields.G); + PrintDebug(VM_NONE, VCORE_NONE, " limit: 0x%x\n", guest_area->gdtr.limit); + tmp_reg.r_reg = guest_area->gdtr.base; + PrintDebug(VM_NONE, VCORE_NONE, " Base: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + + PrintDebug(VM_NONE, VCORE_NONE, "ldtr Selector (at %p): \n", &(guest_area->ldtr)); + PrintDebug(VM_NONE, VCORE_NONE, " Selector: 0x%x\n", guest_area->ldtr.selector); + PrintDebug(VM_NONE, VCORE_NONE, " (type=0x%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", + guest_area->ldtr.attrib.fields.type, guest_area->ldtr.attrib.fields.S, + guest_area->ldtr.attrib.fields.dpl, guest_area->ldtr.attrib.fields.P, + guest_area->ldtr.attrib.fields.avl, guest_area->ldtr.attrib.fields.L, + guest_area->ldtr.attrib.fields.db, guest_area->ldtr.attrib.fields.G); + PrintDebug(VM_NONE, VCORE_NONE, " limit: 0x%x\n", guest_area->ldtr.limit); + tmp_reg.r_reg = guest_area->ldtr.base; + PrintDebug(VM_NONE, VCORE_NONE, " Base: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + + PrintDebug(VM_NONE, VCORE_NONE, "idtr Selector (at %p): \n", &(guest_area->idtr)); + PrintDebug(VM_NONE, VCORE_NONE, " Selector: 0x%x\n", guest_area->idtr.selector); + PrintDebug(VM_NONE, VCORE_NONE, " (type=0x%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", + guest_area->idtr.attrib.fields.type, guest_area->idtr.attrib.fields.S, + guest_area->idtr.attrib.fields.dpl, guest_area->idtr.attrib.fields.P, + guest_area->idtr.attrib.fields.avl, guest_area->idtr.attrib.fields.L, + guest_area->idtr.attrib.fields.db, guest_area->idtr.attrib.fields.G); + PrintDebug(VM_NONE, VCORE_NONE, " limit: 0x%x\n", guest_area->idtr.limit); + tmp_reg.r_reg = guest_area->idtr.base; + PrintDebug(VM_NONE, VCORE_NONE, " Base: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + + PrintDebug(VM_NONE, VCORE_NONE, "tr Selector (at %p): \n", &(guest_area->tr)); + PrintDebug(VM_NONE, VCORE_NONE, " Selector: 0x%x\n", guest_area->tr.selector); + PrintDebug(VM_NONE, VCORE_NONE, " (type=0x%x), (S=%d), (dpl=%d), (P=%d), (avl=%d), (L=%d), (db=%d), (G=%d)\n", + guest_area->tr.attrib.fields.type, guest_area->tr.attrib.fields.S, + guest_area->tr.attrib.fields.dpl, guest_area->tr.attrib.fields.P, + guest_area->tr.attrib.fields.avl, guest_area->tr.attrib.fields.L, + guest_area->tr.attrib.fields.db, guest_area->tr.attrib.fields.G); + PrintDebug(VM_NONE, VCORE_NONE, " limit: 0x%x\n", guest_area->tr.limit); + tmp_reg.r_reg = guest_area->tr.base; + PrintDebug(VM_NONE, VCORE_NONE, " Base: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + + PrintDebug(VM_NONE, VCORE_NONE, "cpl: %d\n", guest_area->cpl); - tmp_reg.r_reg = guest_area->efer; - PrintDebug("EFER: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - tmp_reg.r_reg = guest_area->cr4; - PrintDebug("CR4: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->cr3; - PrintDebug("CR3: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->cr0; - PrintDebug("CR0: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->dr7; - PrintDebug("DR7: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->dr6; - PrintDebug("DR6: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->rflags; - PrintDebug("RFLAGS: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->rip; - PrintDebug("RIP: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - - tmp_reg.r_reg = guest_area->rsp; - PrintDebug("RSP: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->efer; + PrintDebug(VM_NONE, VCORE_NONE, "EFER: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + tmp_reg.r_reg = guest_area->cr4; + PrintDebug(VM_NONE, VCORE_NONE, "CR4: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->cr3; + PrintDebug(VM_NONE, VCORE_NONE, "CR3: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->cr0; + PrintDebug(VM_NONE, VCORE_NONE, "CR0: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->dr7; + PrintDebug(VM_NONE, VCORE_NONE, "DR7: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->dr6; + PrintDebug(VM_NONE, VCORE_NONE, "DR6: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->rflags; + PrintDebug(VM_NONE, VCORE_NONE, "RFLAGS: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->rip; + PrintDebug(VM_NONE, VCORE_NONE, "RIP: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + + tmp_reg.r_reg = guest_area->rsp; + PrintDebug(VM_NONE, VCORE_NONE, "RSP: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->rax; - PrintDebug("RAX: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->star; - PrintDebug("STAR: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->lstar; - PrintDebug("LSTAR: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->cstar; - PrintDebug("CSTAR: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->sfmask; - PrintDebug("SFMASK: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->KernelGsBase; - PrintDebug("KernelGsBase: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->sysenter_cs; - PrintDebug("sysenter_cs: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->sysenter_esp; - PrintDebug("sysenter_esp: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->sysenter_eip; - PrintDebug("sysenter_eip: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->cr2; - PrintDebug("CR2: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - tmp_reg.r_reg = guest_area->g_pat; - PrintDebug("g_pat: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->dbgctl; - PrintDebug("dbgctl: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->br_from; - PrintDebug("br_from: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->br_to; - PrintDebug("br_to: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->lastexcpfrom; - PrintDebug("lastexcpfrom: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - tmp_reg.r_reg = guest_area->lastexcpto; - PrintDebug("lastexcpto: hi: 0x%.8x, lo: 0x%.8x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); - - - - - + tmp_reg.r_reg = guest_area->rax; + PrintDebug(VM_NONE, VCORE_NONE, "RAX: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->star; + PrintDebug(VM_NONE, VCORE_NONE, "STAR: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->lstar; + PrintDebug(VM_NONE, VCORE_NONE, "LSTAR: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->cstar; + PrintDebug(VM_NONE, VCORE_NONE, "CSTAR: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->sfmask; + PrintDebug(VM_NONE, VCORE_NONE, "SFMASK: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->KernelGsBase; + PrintDebug(VM_NONE, VCORE_NONE, "KernelGsBase: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->sysenter_cs; + PrintDebug(VM_NONE, VCORE_NONE, "sysenter_cs: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->sysenter_esp; + PrintDebug(VM_NONE, VCORE_NONE, "sysenter_esp: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->sysenter_eip; + PrintDebug(VM_NONE, VCORE_NONE, "sysenter_eip: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->cr2; + PrintDebug(VM_NONE, VCORE_NONE, "CR2: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + tmp_reg.r_reg = guest_area->g_pat; + PrintDebug(VM_NONE, VCORE_NONE, "g_pat: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->dbgctl; + PrintDebug(VM_NONE, VCORE_NONE, "dbgctl: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->br_from; + PrintDebug(VM_NONE, VCORE_NONE, "br_from: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->br_to; + PrintDebug(VM_NONE, VCORE_NONE, "br_to: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->lastexcpfrom; + PrintDebug(VM_NONE, VCORE_NONE, "lastexcpfrom: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + tmp_reg.r_reg = guest_area->lastexcpto; + PrintDebug(VM_NONE, VCORE_NONE, "lastexcpto: hi: 0x%x, lo: 0x%x\n", tmp_reg.e_reg.high, tmp_reg.e_reg.low); + + for (i=0;i<43;i++) { + if (guest_area->rsvd1[i]) { + PrintDebug(VM_NONE, VCORE_NONE, "guest rsvd1[%d] has value 0x%x\n", i, guest_area->rsvd1[i]); + } + } + + if (guest_area->rsvd2) { + PrintDebug(VM_NONE, VCORE_NONE, "guest rsvd2 has value 0x%llx\n", (uint64_t) guest_area->rsvd2); + } + + for (i=0;i<112;i++) { + if (guest_area->rsvd3[i]) { + PrintDebug(VM_NONE, VCORE_NONE, "guest rsvd3[%d] has value 0x%x\n", i, guest_area->rsvd3[i]); + } + } + + for (i=0;i<88;i++) { + if (guest_area->rsvd4[i]) { + PrintDebug(VM_NONE, VCORE_NONE, "guest rsvd4[%d] has value 0x%x\n", i, guest_area->rsvd4[i]); + } + } + + for (i=0;i<24;i++) { + if (guest_area->rsvd5[i]) { + PrintDebug(VM_NONE, VCORE_NONE, "guest rsvd5[%d] has value 0x%x\n", i, guest_area->rsvd5[i]); + } + } + + for (i=0;i<32;i++) { + if (guest_area->rsvd6[i]) { + PrintDebug(VM_NONE, VCORE_NONE, "guest rsvd6[%d] has value 0x%x\n", i, guest_area->rsvd6[i]); + } + } + + + for (i=VMCB_END_OFFSET; i