VirtualBox

Changeset 14581 in vbox


Ignore:
Timestamp:
Nov 25, 2008 4:14:14 PM (16 years ago)
Author:
vboxsync
Message:

Explicit VMCS field width.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/hwacc_vmx.h

    r14580 r14581  
    644644 * @{
    645645 */
    646 #define VMX_VMCS_GUEST_FIELD_VPID                               0x0
    647 #define VMX_VMCS_GUEST_FIELD_ES                                 0x800
    648 #define VMX_VMCS_GUEST_FIELD_CS                                 0x802
    649 #define VMX_VMCS_GUEST_FIELD_SS                                 0x804
    650 #define VMX_VMCS_GUEST_FIELD_DS                                 0x806
    651 #define VMX_VMCS_GUEST_FIELD_FS                                 0x808
    652 #define VMX_VMCS_GUEST_FIELD_GS                                 0x80A
    653 #define VMX_VMCS_GUEST_FIELD_LDTR                               0x80C
    654 #define VMX_VMCS_GUEST_FIELD_TR                                 0x80E
     646#define VMX_VMCS16_GUEST_FIELD_VPID                               0x0
     647#define VMX_VMCS16_GUEST_FIELD_ES                                 0x800
     648#define VMX_VMCS16_GUEST_FIELD_CS                                 0x802
     649#define VMX_VMCS16_GUEST_FIELD_SS                                 0x804
     650#define VMX_VMCS16_GUEST_FIELD_DS                                 0x806
     651#define VMX_VMCS16_GUEST_FIELD_FS                                 0x808
     652#define VMX_VMCS16_GUEST_FIELD_GS                                 0x80A
     653#define VMX_VMCS16_GUEST_FIELD_LDTR                               0x80C
     654#define VMX_VMCS16_GUEST_FIELD_TR                                 0x80E
    655655/** @} */
    656656
     
    658658 * @{
    659659 */
    660 #define VMX_VMCS_HOST_FIELD_ES                                  0xC00
    661 #define VMX_VMCS_HOST_FIELD_CS                                  0xC02
    662 #define VMX_VMCS_HOST_FIELD_SS                                  0xC04
    663 #define VMX_VMCS_HOST_FIELD_DS                                  0xC06
    664 #define VMX_VMCS_HOST_FIELD_FS                                  0xC08
    665 #define VMX_VMCS_HOST_FIELD_GS                                  0xC0A
    666 #define VMX_VMCS_HOST_FIELD_TR                                  0xC0C
     660#define VMX_VMCS16_HOST_FIELD_ES                                  0xC00
     661#define VMX_VMCS16_HOST_FIELD_CS                                  0xC02
     662#define VMX_VMCS16_HOST_FIELD_SS                                  0xC04
     663#define VMX_VMCS16_HOST_FIELD_DS                                  0xC06
     664#define VMX_VMCS16_HOST_FIELD_FS                                  0xC08
     665#define VMX_VMCS16_HOST_FIELD_GS                                  0xC0A
     666#define VMX_VMCS16_HOST_FIELD_TR                                  0xC0C
    667667/** @}          */
    668668
     
    925925 * @{
    926926 */
    927 #define VMX_VMCS_GUEST_ES_LIMIT                                 0x4800
    928 #define VMX_VMCS_GUEST_CS_LIMIT                                 0x4802
    929 #define VMX_VMCS_GUEST_SS_LIMIT                                 0x4804
    930 #define VMX_VMCS_GUEST_DS_LIMIT                                 0x4806
    931 #define VMX_VMCS_GUEST_FS_LIMIT                                 0x4808
    932 #define VMX_VMCS_GUEST_GS_LIMIT                                 0x480A
    933 #define VMX_VMCS_GUEST_LDTR_LIMIT                               0x480C
    934 #define VMX_VMCS_GUEST_TR_LIMIT                                 0x480E
    935 #define VMX_VMCS_GUEST_GDTR_LIMIT                               0x4810
    936 #define VMX_VMCS_GUEST_IDTR_LIMIT                               0x4812
    937 #define VMX_VMCS_GUEST_ES_ACCESS_RIGHTS                         0x4814
    938 #define VMX_VMCS_GUEST_CS_ACCESS_RIGHTS                         0x4816
    939 #define VMX_VMCS_GUEST_SS_ACCESS_RIGHTS                         0x4818
    940 #define VMX_VMCS_GUEST_DS_ACCESS_RIGHTS                         0x481A
    941 #define VMX_VMCS_GUEST_FS_ACCESS_RIGHTS                         0x481C
    942 #define VMX_VMCS_GUEST_GS_ACCESS_RIGHTS                         0x481E
    943 #define VMX_VMCS_GUEST_LDTR_ACCESS_RIGHTS                       0x4820
    944 #define VMX_VMCS_GUEST_TR_ACCESS_RIGHTS                         0x4822
    945 #define VMX_VMCS_GUEST_INTERRUPTIBILITY_STATE                   0x4824
    946 #define VMX_VMCS_GUEST_ACTIVITY_STATE                           0x4826
    947 #define VMX_VMCS_GUEST_SYSENTER_CS                              0x482A  /**< MSR IA32_SYSENTER_CS */
    948 #define VMX_VMCS_GUEST_PREEMPTION_TIMER_VALUE                   0x482E
     927#define VMX_VMCS32_GUEST_ES_LIMIT                                 0x4800
     928#define VMX_VMCS32_GUEST_CS_LIMIT                                 0x4802
     929#define VMX_VMCS32_GUEST_SS_LIMIT                                 0x4804
     930#define VMX_VMCS32_GUEST_DS_LIMIT                                 0x4806
     931#define VMX_VMCS32_GUEST_FS_LIMIT                                 0x4808
     932#define VMX_VMCS32_GUEST_GS_LIMIT                                 0x480A
     933#define VMX_VMCS32_GUEST_LDTR_LIMIT                               0x480C
     934#define VMX_VMCS32_GUEST_TR_LIMIT                                 0x480E
     935#define VMX_VMCS32_GUEST_GDTR_LIMIT                               0x4810
     936#define VMX_VMCS32_GUEST_IDTR_LIMIT                               0x4812
     937#define VMX_VMCS32_GUEST_ES_ACCESS_RIGHTS                         0x4814
     938#define VMX_VMCS32_GUEST_CS_ACCESS_RIGHTS                         0x4816
     939#define VMX_VMCS32_GUEST_SS_ACCESS_RIGHTS                         0x4818
     940#define VMX_VMCS32_GUEST_DS_ACCESS_RIGHTS                         0x481A
     941#define VMX_VMCS32_GUEST_FS_ACCESS_RIGHTS                         0x481C
     942#define VMX_VMCS32_GUEST_GS_ACCESS_RIGHTS                         0x481E
     943#define VMX_VMCS32_GUEST_LDTR_ACCESS_RIGHTS                       0x4820
     944#define VMX_VMCS32_GUEST_TR_ACCESS_RIGHTS                         0x4822
     945#define VMX_VMCS32_GUEST_INTERRUPTIBILITY_STATE                   0x4824
     946#define VMX_VMCS32_GUEST_ACTIVITY_STATE                           0x4826
     947#define VMX_VMCS32_GUEST_SYSENTER_CS                              0x482A  /**< MSR IA32_SYSENTER_CS */
     948#define VMX_VMCS32_GUEST_PREEMPTION_TIMER_VALUE                   0x482E
    949949/** @} */
    950950
     
    977977 * @{
    978978 */
    979 #define VMX_VMCS_HOST_SYSENTER_CS                               0x4C00
     979#define VMX_VMCS32_HOST_SYSENTER_CS                             0x4C00
    980980/** @} */
    981981
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r14580 r14581  
    816816
    817817        /* Selector registers. */
    818         rc  = VMXWriteVMCS(VMX_VMCS_HOST_FIELD_CS,          ASMGetCS());
     818        rc  = VMXWriteVMCS(VMX_VMCS16_HOST_FIELD_CS,          ASMGetCS());
    819819        /* Note: VMX is (again) very picky about the RPL of the selectors here; we'll restore them manually. */
    820         rc |= VMXWriteVMCS(VMX_VMCS_HOST_FIELD_DS,          0);
    821         rc |= VMXWriteVMCS(VMX_VMCS_HOST_FIELD_ES,          0);
     820        rc |= VMXWriteVMCS(VMX_VMCS16_HOST_FIELD_DS,          0);
     821        rc |= VMXWriteVMCS(VMX_VMCS16_HOST_FIELD_ES,          0);
    822822#if HC_ARCH_BITS == 32
    823         rc |= VMXWriteVMCS(VMX_VMCS_HOST_FIELD_FS,          0);
    824         rc |= VMXWriteVMCS(VMX_VMCS_HOST_FIELD_GS,          0);
    825 #endif
    826         rc |= VMXWriteVMCS(VMX_VMCS_HOST_FIELD_SS,          ASMGetSS());
     823        rc |= VMXWriteVMCS(VMX_VMCS16_HOST_FIELD_FS,          0);
     824        rc |= VMXWriteVMCS(VMX_VMCS16_HOST_FIELD_GS,          0);
     825#endif
     826        rc |= VMXWriteVMCS(VMX_VMCS16_HOST_FIELD_SS,          ASMGetSS());
    827827        SelTR = ASMGetTR();
    828         rc |= VMXWriteVMCS(VMX_VMCS_HOST_FIELD_TR,          SelTR);
     828        rc |= VMXWriteVMCS(VMX_VMCS16_HOST_FIELD_TR,          SelTR);
    829829        AssertRC(rc);
    830830        Log2(("VMX_VMCS_HOST_FIELD_CS %08x\n", ASMGetCS()));
     
    873873        /* Sysenter MSRs. */
    874874        /** @todo expensive!! */
    875         rc  = VMXWriteVMCS(VMX_VMCS_HOST_SYSENTER_CS,       ASMRdMsr_Low(MSR_IA32_SYSENTER_CS));
     875        rc  = VMXWriteVMCS(VMX_VMCS32_HOST_SYSENTER_CS,       ASMRdMsr_Low(MSR_IA32_SYSENTER_CS));
    876876        Log2(("VMX_VMCS_HOST_SYSENTER_CS  %08x\n", ASMRdMsr_Low(MSR_IA32_SYSENTER_CS)));
    877877#if HC_ARCH_BITS == 32
     
    10571057        if (pCtx->ldtr == 0)
    10581058        {
    1059             rc =  VMXWriteVMCS(VMX_VMCS_GUEST_FIELD_LDTR,         0);
    1060             rc |= VMXWriteVMCS(VMX_VMCS_GUEST_LDTR_LIMIT,         0);
    1061             rc |= VMXWriteVMCS(VMX_VMCS_GUEST_LDTR_BASE,          0);
     1059            rc =  VMXWriteVMCS(VMX_VMCS16_GUEST_FIELD_LDTR,         0);
     1060            rc |= VMXWriteVMCS(VMX_VMCS32_GUEST_LDTR_LIMIT,         0);
     1061            rc |= VMXWriteVMCS(VMX_VMCS_GUEST_LDTR_BASE,            0);
    10621062            /* Note: vmlaunch will fail with 0 or just 0x02. No idea why. */
    1063             rc |= VMXWriteVMCS(VMX_VMCS_GUEST_LDTR_ACCESS_RIGHTS, 0x82 /* present, LDT */);
     1063            rc |= VMXWriteVMCS(VMX_VMCS32_GUEST_LDTR_ACCESS_RIGHTS, 0x82 /* present, LDT */);
    10641064        }
    10651065        else
    10661066        {
    1067             rc =  VMXWriteVMCS(VMX_VMCS_GUEST_FIELD_LDTR,         pCtx->ldtr);
    1068             rc |= VMXWriteVMCS(VMX_VMCS_GUEST_LDTR_LIMIT,         pCtx->ldtrHid.u32Limit);
    1069             rc |= VMXWriteVMCS(VMX_VMCS_GUEST_LDTR_BASE,          pCtx->ldtrHid.u64Base);
    1070             rc |= VMXWriteVMCS(VMX_VMCS_GUEST_LDTR_ACCESS_RIGHTS, pCtx->ldtrHid.Attr.u);
     1067            rc =  VMXWriteVMCS(VMX_VMCS16_GUEST_FIELD_LDTR,         pCtx->ldtr);
     1068            rc |= VMXWriteVMCS(VMX_VMCS32_GUEST_LDTR_LIMIT,         pCtx->ldtrHid.u32Limit);
     1069            rc |= VMXWriteVMCS(VMX_VMCS_GUEST_LDTR_BASE,            pCtx->ldtrHid.u64Base);
     1070            rc |= VMXWriteVMCS(VMX_VMCS32_GUEST_LDTR_ACCESS_RIGHTS, pCtx->ldtrHid.Attr.u);
    10711071        }
    10721072        AssertRC(rc);
     
    10851085            AssertRC(rc);
    10861086
    1087             rc =  VMXWriteVMCS(VMX_VMCS_GUEST_FIELD_TR,         0);
    1088             rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_LIMIT,         HWACCM_VTX_TSS_SIZE);
    1089             rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_BASE,          GCPhys /* phys = virt in this mode */);
     1087            rc =  VMXWriteVMCS(VMX_VMCS16_GUEST_FIELD_TR,         0);
     1088            rc |= VMXWriteVMCS(VMX_VMCS32_GUEST_TR_LIMIT,         HWACCM_VTX_TSS_SIZE);
     1089            rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_BASE,            GCPhys /* phys = virt in this mode */);
    10901090
    10911091            X86DESCATTR attr;
     
    10991099#endif /* HWACCM_VMX_EMULATE_REALMODE */
    11001100        {
    1101             rc =  VMXWriteVMCS(VMX_VMCS_GUEST_FIELD_TR,         pCtx->tr);
    1102             rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_LIMIT,         pCtx->trHid.u32Limit);
    1103             rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_BASE,          pCtx->trHid.u64Base);
     1101            rc =  VMXWriteVMCS(VMX_VMCS16_GUEST_FIELD_TR,         pCtx->tr);
     1102            rc |= VMXWriteVMCS(VMX_VMCS32_GUEST_TR_LIMIT,         pCtx->trHid.u32Limit);
     1103            rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_BASE,            pCtx->trHid.u64Base);
    11041104
    11051105            val = pCtx->trHid.Attr.u;
     
    11131113
    11141114        }
    1115         rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_ACCESS_RIGHTS, val);
     1115        rc |= VMXWriteVMCS(VMX_VMCS32_GUEST_TR_ACCESS_RIGHTS, val);
    11161116        AssertRC(rc);
    11171117    }
     
    11191119    if (pVCpu->hwaccm.s.fContextUseFlags & HWACCM_CHANGED_GUEST_GDTR)
    11201120    {
    1121         rc  = VMXWriteVMCS(VMX_VMCS_GUEST_GDTR_LIMIT,       pCtx->gdtr.cbGdt);
    1122         rc |= VMXWriteVMCS(VMX_VMCS_GUEST_GDTR_BASE,        pCtx->gdtr.pGdt);
     1121        rc  = VMXWriteVMCS(VMX_VMCS32_GUEST_GDTR_LIMIT,       pCtx->gdtr.cbGdt);
     1122        rc |= VMXWriteVMCS(VMX_VMCS_GUEST_GDTR_BASE,          pCtx->gdtr.pGdt);
    11231123        AssertRC(rc);
    11241124    }
     
    11261126    if (pVCpu->hwaccm.s.fContextUseFlags & HWACCM_CHANGED_GUEST_IDTR)
    11271127    {
    1128         rc  = VMXWriteVMCS(VMX_VMCS_GUEST_IDTR_LIMIT,       pCtx->idtr.cbIdt);
    1129         rc |= VMXWriteVMCS(VMX_VMCS_GUEST_IDTR_BASE,        pCtx->idtr.pIdt);
     1128        rc  = VMXWriteVMCS(VMX_VMCS32_GUEST_IDTR_LIMIT,       pCtx->idtr.cbIdt);
     1129        rc |= VMXWriteVMCS(VMX_VMCS_GUEST_IDTR_BASE,          pCtx->idtr.pIdt);
    11301130        AssertRC(rc);
    11311131    }
     
    11341134     * Sysenter MSRs (unconditional)
    11351135     */
    1136     rc  = VMXWriteVMCS(VMX_VMCS_GUEST_SYSENTER_CS,      pCtx->SysEnter.cs);
     1136    rc  = VMXWriteVMCS(VMX_VMCS32_GUEST_SYSENTER_CS,    pCtx->SysEnter.cs);
    11371137    rc |= VMXWriteVMCS(VMX_VMCS_GUEST_SYSENTER_EIP,     pCtx->SysEnter.eip);
    11381138    rc |= VMXWriteVMCS(VMX_VMCS_GUEST_SYSENTER_ESP,     pCtx->SysEnter.esp);
     
    14861486
    14871487    /* Take care of instruction fusing (sti, mov ss) */
    1488     rc |= VMXReadVMCS(VMX_VMCS_GUEST_INTERRUPTIBILITY_STATE, &val);
     1488    rc |= VMXReadVMCS(VMX_VMCS32_GUEST_INTERRUPTIBILITY_STATE, &val);
    14891489    uInterruptState = val;
    14901490    if (uInterruptState != 0)
     
    15421542     * System MSRs
    15431543     */
    1544     VMXReadVMCS(VMX_VMCS_GUEST_SYSENTER_CS,      &val);
     1544    VMXReadVMCS(VMX_VMCS32_GUEST_SYSENTER_CS,    &val);
    15451545    pCtx->SysEnter.cs       = val;
    15461546    VMXReadVMCS(VMX_VMCS_GUEST_SYSENTER_EIP,     &val);
     
    15521552    VMX_READ_SELREG(LDTR, ldtr);
    15531553
    1554     VMXReadVMCS(VMX_VMCS_GUEST_GDTR_LIMIT,       &val);
     1554    VMXReadVMCS(VMX_VMCS32_GUEST_GDTR_LIMIT,     &val);
    15551555    pCtx->gdtr.cbGdt        = val;
    15561556    VMXReadVMCS(VMX_VMCS_GUEST_GDTR_BASE,        &val);
    15571557    pCtx->gdtr.pGdt         = val;
    15581558
    1559     VMXReadVMCS(VMX_VMCS_GUEST_IDTR_LIMIT,       &val);
     1559    VMXReadVMCS(VMX_VMCS32_GUEST_IDTR_LIMIT,     &val);
    15601560    pCtx->idtr.cbIdt        = val;
    15611561    VMXReadVMCS(VMX_VMCS_GUEST_IDTR_BASE,        &val);
     
    16981698    AssertMsg(pVCpu->hwaccm.s.uCurrentASID >= 1 && pVCpu->hwaccm.s.uCurrentASID < pVM->hwaccm.s.uMaxASID, ("cpu%d VM uCurrentASID = %x\n", pCpu->idCpu, pVCpu->hwaccm.s.uCurrentASID));
    16991699
    1700     int rc  = VMXWriteVMCS(VMX_VMCS_GUEST_FIELD_VPID, pVCpu->hwaccm.s.uCurrentASID);
     1700    int rc  = VMXWriteVMCS(VMX_VMCS16_GUEST_FIELD_VPID, pVCpu->hwaccm.s.uCurrentASID);
    17011701    AssertRC(rc);
    17021702
     
    18251825            VM_FF_CLEAR(pVM, VM_FF_INHIBIT_INTERRUPTS);
    18261826            /* Irq inhibition is no longer active; clear the corresponding VMX state. */
    1827             rc = VMXWriteVMCS(VMX_VMCS_GUEST_INTERRUPTIBILITY_STATE,   0);
     1827            rc = VMXWriteVMCS(VMX_VMCS32_GUEST_INTERRUPTIBILITY_STATE,   0);
    18281828            AssertRC(rc);
    18291829        }
     
    18321832    {
    18331833        /* Irq inhibition is no longer active; clear the corresponding VMX state. */
    1834         rc = VMXWriteVMCS(VMX_VMCS_GUEST_INTERRUPTIBILITY_STATE,   0);
     1834        rc = VMXWriteVMCS(VMX_VMCS32_GUEST_INTERRUPTIBILITY_STATE,   0);
    18351835        AssertRC(rc);
    18361836    }
     
    19461946    /* Non-register state Guest Context */
    19471947    /** @todo change me according to cpu state */
    1948     rc = VMXWriteVMCS(VMX_VMCS_GUEST_ACTIVITY_STATE,           VMX_CMS_GUEST_ACTIVITY_ACTIVE);
     1948    rc = VMXWriteVMCS(VMX_VMCS32_GUEST_ACTIVITY_STATE,           VMX_CMS_GUEST_ACTIVITY_ACTIVE);
    19491949    AssertRC(rc);
    19501950
     
    32523252            Log(("VMX_VMCS_HOST_CR4 %08x\n", val));
    32533253
    3254             VMXReadVMCS(VMX_VMCS_HOST_FIELD_CS, &val);
     3254            VMXReadVMCS(VMX_VMCS16_HOST_FIELD_CS, &val);
    32553255            Log(("VMX_VMCS_HOST_FIELD_CS %08x\n", val));
    32563256
     
    32643264            }
    32653265
    3266             VMXReadVMCS(VMX_VMCS_HOST_FIELD_DS, &val);
     3266            VMXReadVMCS(VMX_VMCS16_HOST_FIELD_DS, &val);
    32673267            Log(("VMX_VMCS_HOST_FIELD_DS %08x\n", val));
    32683268            if (val < gdtr.cbGdt)
     
    32723272            }
    32733273
    3274             VMXReadVMCS(VMX_VMCS_HOST_FIELD_ES, &val);
     3274            VMXReadVMCS(VMX_VMCS16_HOST_FIELD_ES, &val);
    32753275            Log(("VMX_VMCS_HOST_FIELD_ES %08x\n", val));
    32763276            if (val < gdtr.cbGdt)
     
    32803280            }
    32813281
    3282             VMXReadVMCS(VMX_VMCS_HOST_FIELD_FS, &val);
    3283             Log(("VMX_VMCS_HOST_FIELD_FS %08x\n", val));
     3282            VMXReadVMCS(VMX_VMCS16_HOST_FIELD_FS, &val);
     3283            Log(("VMX_VMCS16_HOST_FIELD_FS %08x\n", val));
    32843284            if (val < gdtr.cbGdt)
    32853285            {
     
    32883288            }
    32893289
    3290             VMXReadVMCS(VMX_VMCS_HOST_FIELD_GS, &val);
    3291             Log(("VMX_VMCS_HOST_FIELD_GS %08x\n", val));
     3290            VMXReadVMCS(VMX_VMCS16_HOST_FIELD_GS, &val);
     3291            Log(("VMX_VMCS16_HOST_FIELD_GS %08x\n", val));
    32923292            if (val < gdtr.cbGdt)
    32933293            {
     
    32963296            }
    32973297
    3298             VMXReadVMCS(VMX_VMCS_HOST_FIELD_SS, &val);
    3299             Log(("VMX_VMCS_HOST_FIELD_SS %08x\n", val));
     3298            VMXReadVMCS(VMX_VMCS16_HOST_FIELD_SS, &val);
     3299            Log(("VMX_VMCS16_HOST_FIELD_SS %08x\n", val));
    33003300            if (val < gdtr.cbGdt)
    33013301            {
     
    33043304            }
    33053305
    3306             VMXReadVMCS(VMX_VMCS_HOST_FIELD_TR, &val);
    3307             Log(("VMX_VMCS_HOST_FIELD_TR %08x\n", val));
     3306            VMXReadVMCS(VMX_VMCS16_HOST_FIELD_TR, &val);
     3307            Log(("VMX_VMCS16_HOST_FIELD_TR %08x\n", val));
    33083308            if (val < gdtr.cbGdt)
    33093309            {
     
    33203320            Log(("VMX_VMCS_HOST_IDTR_BASE %RHv\n", val));
    33213321
    3322             VMXReadVMCS(VMX_VMCS_HOST_SYSENTER_CS, &val);
     3322            VMXReadVMCS(VMX_VMCS32_HOST_SYSENTER_CS, &val);
    33233323            Log(("VMX_VMCS_HOST_SYSENTER_CS  %08x\n", val));
    33243324
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.h

    r14366 r14581  
    142142#define VMX_WRITE_SELREG(REG, reg) \
    143143{                                                                                               \
    144         rc  = VMXWriteVMCS(VMX_VMCS_GUEST_FIELD_##REG,      pCtx->reg);                         \
    145         rc |= VMXWriteVMCS(VMX_VMCS_GUEST_##REG##_LIMIT,    pCtx->reg##Hid.u32Limit);           \
     144        rc  = VMXWriteVMCS(VMX_VMCS16_GUEST_FIELD_##REG,      pCtx->reg);                         \
     145        rc |= VMXWriteVMCS(VMX_VMCS32_GUEST_##REG##_LIMIT,    pCtx->reg##Hid.u32Limit);           \
    146146        rc |= VMXWriteVMCS(VMX_VMCS_GUEST_##REG##_BASE,     pCtx->reg##Hid.u64Base);            \
    147147        if ((pCtx->eflags.u32 & X86_EFL_VM))                                                    \
     
    161161            val = 0x10000;  /* Invalid guest state error otherwise. (BIT(16) = Unusable) */     \
    162162                                                                                                \
    163         rc |= VMXWriteVMCS(VMX_VMCS_GUEST_##REG##_ACCESS_RIGHTS, val);                          \
     163        rc |= VMXWriteVMCS(VMX_VMCS32_GUEST_##REG##_ACCESS_RIGHTS, val);                          \
    164164}
    165165
    166166#define VMX_READ_SELREG(REG, reg) \
    167167{                                                                    \
    168         VMXReadVMCS(VMX_VMCS_GUEST_FIELD_##REG,           &val);     \
     168        VMXReadVMCS(VMX_VMCS16_GUEST_FIELD_##REG,           &val);   \
    169169        pCtx->reg                = val;                              \
    170         VMXReadVMCS(VMX_VMCS_GUEST_##REG##_LIMIT,         &val);     \
     170        VMXReadVMCS(VMX_VMCS32_GUEST_##REG##_LIMIT,         &val);   \
    171171        pCtx->reg##Hid.u32Limit    = val;                            \
    172172        VMXReadVMCS(VMX_VMCS_GUEST_##REG##_BASE,          &val);     \
    173173        pCtx->reg##Hid.u64Base     = val;                            \
    174         VMXReadVMCS(VMX_VMCS_GUEST_##REG##_ACCESS_RIGHTS, &val);     \
     174        VMXReadVMCS(VMX_VMCS32_GUEST_##REG##_ACCESS_RIGHTS, &val);   \
    175175        pCtx->reg##Hid.Attr.u    = val;                              \
    176176}
     
    178178#define VMX_LOG_SELREG(REG, szSelReg) \
    179179{                                                                    \
    180         VMXReadVMCS(VMX_VMCS_GUEST_FIELD_##REG,           &val);     \
     180        VMXReadVMCS(VMX_VMCS16_GUEST_FIELD_##REG,           &val);   \
    181181        Log(("%s Selector     %x\n", szSelReg, val));                \
    182         VMXReadVMCS(VMX_VMCS_GUEST_##REG##_LIMIT,         &val);     \
     182        VMXReadVMCS(VMX_VMCS32_GUEST_##REG##_LIMIT,         &val);   \
    183183        Log(("%s Limit        %x\n", szSelReg, val));                \
    184184        VMXReadVMCS(VMX_VMCS_GUEST_##REG##_BASE,          &val);     \
    185185        Log(("%s Base         %RX64\n", szSelReg, val));             \
    186         VMXReadVMCS(VMX_VMCS_GUEST_##REG##_ACCESS_RIGHTS, &val);     \
     186        VMXReadVMCS(VMX_VMCS32_GUEST_##REG##_ACCESS_RIGHTS, &val);   \
    187187        Log(("%s Attributes   %x\n", szSelReg, val));                \
    188188}
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette