VirtualBox

Changeset 9421 in vbox


Ignore:
Timestamp:
Jun 5, 2008 1:17:00 PM (17 years ago)
Author:
vboxsync
Message:

64 bits hidden selector base.

Location:
trunk
Files:
13 edited

Legend:

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

    r9411 r9421  
    4848{
    4949    /** Base register. */
    50     uint32_t    u32Base;
     50    uint64_t    u64Base;
    5151    /** Limit (expanded). */
    5252    uint32_t    u32Limit;
  • trunk/include/VBox/cpum.mac

    r9411 r9421  
    7171    .r15            resq    1
    7272
    73     .esHid.u32Base      resd    1
     73    .esHid.u64Base      resq    1
    7474    .esHid.u32Limit     resd    1
    7575    .esHid.Attr         resd    1
    7676
    77     .csHid.u32Base      resd    1
     77    .csHid.u64Base      resq    1
    7878    .csHid.u32Limit     resd    1
    7979    .csHid.Attr         resd    1
    8080
    81     .ssHid.u32Base      resd    1
     81    .ssHid.u64Base      resq    1
    8282    .ssHid.u32Limit     resd    1
    8383    .ssHid.Attr         resd    1
    8484
    85     .dsHid.u32Base      resd    1
     85    .dsHid.u64Base      resq    1
    8686    .dsHid.u32Limit     resd    1
    8787    .dsHid.Attr         resd    1
    8888
    89     .fsHid.u32Base      resd    1
     89    .fsHid.u64Base      resq    1
    9090    .fsHid.u32Limit     resd    1
    9191    .fsHid.Attr         resd    1
    9292
    93     .gsHid.u32Base      resd    1
     93    .gsHid.u64Base      resq    1
    9494    .gsHid.u32Limit     resd    1
    9595    .gsHid.Attr         resd    1
     
    134134    .r15            resq    1
    135135
    136     .esHid.u32Base      resd    1
     136    .esHid.u64Base      resq    1
    137137    .esHid.u32Limit     resd    1
    138138    .esHid.Attr         resd    1
    139139
    140     .csHid.u32Base      resd    1
     140    .csHid.u64Base      resq    1
    141141    .csHid.u32Limit     resd    1
    142142    .csHid.Attr         resd    1
    143143
    144     .ssHid.u32Base      resd    1
     144    .ssHid.u64Base      resq    1
    145145    .ssHid.u32Limit     resd    1
    146146    .ssHid.Attr         resd    1
    147147
    148     .dsHid.u32Base      resd    1
     148    .dsHid.u64Base      resq    1
    149149    .dsHid.u32Limit     resd    1
    150150    .dsHid.Attr         resd    1
    151151
    152     .fsHid.u32Base      resd    1
     152    .fsHid.u64Base      resq    1
    153153    .fsHid.u32Limit     resd    1
    154154    .fsHid.Attr         resd    1
    155155
    156     .gsHid.u32Base      resd    1
     156    .gsHid.u64Base      resq    1
    157157    .gsHid.u32Limit     resd    1
    158158    .gsHid.Attr         resd    1
     
    199199    .msrKERNELGSBASE    resb    8
    200200
    201     .ldtrHid.u32Base    resd    1
     201    .ldtrHid.u64Base    resq    1
    202202    .ldtrHid.u32Limit   resd    1
    203203    .ldtrHid.Attr       resd    1
    204204
    205     .trHid.u32Base      resd    1
     205    .trHid.u64Base      resq    1
    206206    .trHid.u32Limit     resd    1
    207207    .trHid.Attr         resd    1
  • trunk/src/VBox/VMM/CPUM.cpp

    r9380 r9421  
    538538
    539539    pCtx->cs                        = 0xf000;
    540     pCtx->csHid.u32Base             = UINT32_C(0xffff0000);
     540    pCtx->csHid.u64Base             = UINT64_C(0xffff0000);
    541541    pCtx->csHid.u32Limit            = 0x0000ffff;
    542542    pCtx->csHid.Attr.n.u1DescType   = 1; /* code/data segment */
     
    831831                pszPrefix, pCtxCore->eax, pszPrefix, pCtxCore->ebx, pszPrefix, pCtxCore->ecx, pszPrefix, pCtxCore->edx, pszPrefix, pCtxCore->esi, pszPrefix, pCtxCore->edi,
    832832                pszPrefix, pCtxCore->eip, pszPrefix, pCtxCore->esp, pszPrefix, pCtxCore->ebp, pszPrefix, X86_EFL_GET_IOPL(efl), *pszPrefix ? 33 : 31, szEFlags,
    833                 pszPrefix, (RTSEL)pCtxCore->cs, pCtx->csHid.u32Base, pCtx->csHid.u32Limit, pCtx->csHid.Attr.u, pszPrefix, pCtx->dr0,  pszPrefix, pCtx->dr1,
    834                 pszPrefix, (RTSEL)pCtxCore->ds, pCtx->dsHid.u32Base, pCtx->dsHid.u32Limit, pCtx->dsHid.Attr.u, pszPrefix, pCtx->dr2,  pszPrefix, pCtx->dr3,
    835                 pszPrefix, (RTSEL)pCtxCore->es, pCtx->esHid.u32Base, pCtx->esHid.u32Limit, pCtx->esHid.Attr.u, pszPrefix, pCtx->dr4,  pszPrefix, pCtx->dr5,
    836                 pszPrefix, (RTSEL)pCtxCore->fs, pCtx->fsHid.u32Base, pCtx->fsHid.u32Limit, pCtx->fsHid.Attr.u, pszPrefix, pCtx->dr6,  pszPrefix, pCtx->dr7,
    837                 pszPrefix, (RTSEL)pCtxCore->gs, pCtx->gsHid.u32Base, pCtx->gsHid.u32Limit, pCtx->gsHid.Attr.u, pszPrefix, pCtx->cr0,  pszPrefix, pCtx->cr2,
    838                 pszPrefix, (RTSEL)pCtxCore->ss, pCtx->ssHid.u32Base, pCtx->ssHid.u32Limit, pCtx->ssHid.Attr.u, pszPrefix, pCtx->cr3,  pszPrefix, pCtx->cr4,
     833                pszPrefix, (RTSEL)pCtxCore->cs, pCtx->csHid.u64Base, pCtx->csHid.u32Limit, pCtx->csHid.Attr.u, pszPrefix, pCtx->dr0,  pszPrefix, pCtx->dr1,
     834                pszPrefix, (RTSEL)pCtxCore->ds, pCtx->dsHid.u64Base, pCtx->dsHid.u32Limit, pCtx->dsHid.Attr.u, pszPrefix, pCtx->dr2,  pszPrefix, pCtx->dr3,
     835                pszPrefix, (RTSEL)pCtxCore->es, pCtx->esHid.u64Base, pCtx->esHid.u32Limit, pCtx->esHid.Attr.u, pszPrefix, pCtx->dr4,  pszPrefix, pCtx->dr5,
     836                pszPrefix, (RTSEL)pCtxCore->fs, pCtx->fsHid.u64Base, pCtx->fsHid.u32Limit, pCtx->fsHid.Attr.u, pszPrefix, pCtx->dr6,  pszPrefix, pCtx->dr7,
     837                pszPrefix, (RTSEL)pCtxCore->gs, pCtx->gsHid.u64Base, pCtx->gsHid.u32Limit, pCtx->gsHid.Attr.u, pszPrefix, pCtx->cr0,  pszPrefix, pCtx->cr2,
     838                pszPrefix, (RTSEL)pCtxCore->ss, pCtx->ssHid.u64Base, pCtx->ssHid.u32Limit, pCtx->ssHid.Attr.u, pszPrefix, pCtx->cr3,  pszPrefix, pCtx->cr4,
    839839                pszPrefix, pCtx->gdtr.pGdt, pCtx->gdtr.cbGdt, pszPrefix, pCtx->idtr.pIdt, pCtx->idtr.cbIdt, pszPrefix, efl,
    840                 pszPrefix, (RTSEL)pCtx->ldtr, pCtx->ldtrHid.u32Base, pCtx->ldtrHid.u32Limit, pCtx->ldtrHid.Attr.u,
    841                 pszPrefix, (RTSEL)pCtx->tr, pCtx->trHid.u32Base, pCtx->trHid.u32Limit, pCtx->trHid.Attr.u,
     840                pszPrefix, (RTSEL)pCtx->ldtr, pCtx->ldtrHid.u64Base, pCtx->ldtrHid.u32Limit, pCtx->ldtrHid.Attr.u,
     841                pszPrefix, (RTSEL)pCtx->tr, pCtx->trHid.u64Base, pCtx->trHid.u32Limit, pCtx->trHid.Attr.u,
    842842                pszPrefix, pCtx->SysEnter.cs, pCtx->SysEnter.eip, pCtx->SysEnter.esp);
    843843
     
    18031803        if (CPUMAreHiddenSelRegsValid(pVM))
    18041804        {
    1805             State.GCPtrSegBase    = pCtx->csHid.u32Base;
    1806             State.GCPtrSegEnd     = pCtx->csHid.u32Limit + 1 + (RTGCUINTPTR)pCtx->csHid.u32Base;
     1805            State.GCPtrSegBase    = pCtx->csHid.u64Base;
     1806            State.GCPtrSegEnd     = pCtx->csHid.u32Limit + 1 + (RTGCUINTPTR)pCtx->csHid.u64Base;
    18071807            State.cbSegLimit      = pCtx->csHid.u32Limit;
    18081808            pCpu->mode            = pCtx->csHid.Attr.n.u1DefBig ? CPUMODE_32BIT : CPUMODE_16BIT;
  • trunk/src/VBox/VMM/CPUMInternal.mac

    r9411 r9421  
    206206    .Hyper.r15            resq    1
    207207
    208     .Hyper.esHid.u32Base      resd    1
     208    .Hyper.esHid.u64Base      resq    1
    209209    .Hyper.esHid.u32Limit     resd    1
    210210    .Hyper.esHid.Attr         resd    1
    211211
    212     .Hyper.csHid.u32Base      resd    1
     212    .Hyper.csHid.u64Base      resq    1
    213213    .Hyper.csHid.u32Limit     resd    1
    214214    .Hyper.csHid.Attr         resd    1
    215215
    216     .Hyper.ssHid.u32Base      resd    1
     216    .Hyper.ssHid.u64Base      resq    1
    217217    .Hyper.ssHid.u32Limit     resd    1
    218218    .Hyper.ssHid.Attr         resd    1
    219219
    220     .Hyper.dsHid.u32Base      resd    1
     220    .Hyper.dsHid.u64Base      resq    1
    221221    .Hyper.dsHid.u32Limit     resd    1
    222222    .Hyper.dsHid.Attr         resd    1
    223223
    224     .Hyper.fsHid.u32Base      resd    1
     224    .Hyper.fsHid.u64Base      resq    1
    225225    .Hyper.fsHid.u32Limit     resd    1
    226226    .Hyper.fsHid.Attr         resd    1
    227227
    228     .Hyper.gsHid.u32Base      resd    1
     228    .Hyper.gsHid.u64Base      resq    1
    229229    .Hyper.gsHid.u32Limit     resd    1
    230230    .Hyper.gsHid.Attr         resd    1
     
    270270    .Hyper.msrKERNELGSBASE    resb    8
    271271
    272     .Hyper.ldtrHid.u32Base    resd    1
     272    .Hyper.ldtrHid.u64Base    resq    1
    273273    .Hyper.ldtrHid.u32Limit   resd    1
    274274    .Hyper.ldtrHid.Attr       resd    1
    275275
    276     .Hyper.trHid.u32Base      resd    1
     276    .Hyper.trHid.u64Base      resq    1
    277277    .Hyper.trHid.u32Limit     resd    1
    278278    .Hyper.trHid.Attr         resd    1
     
    322322    .Guest.r15            resq    1
    323323
    324     .Guest.esHid.u32Base      resd    1
     324    .Guest.esHid.u64Base      resq    1
    325325    .Guest.esHid.u32Limit     resd    1
    326326    .Guest.esHid.Attr         resd    1
    327327
    328     .Guest.csHid.u32Base      resd    1
     328    .Guest.csHid.u64Base      resq    1
    329329    .Guest.csHid.u32Limit     resd    1
    330330    .Guest.csHid.Attr         resd    1
    331331
    332     .Guest.ssHid.u32Base      resd    1
     332    .Guest.ssHid.u64Base      resq    1
    333333    .Guest.ssHid.u32Limit     resd    1
    334334    .Guest.ssHid.Attr         resd    1
    335335
    336     .Guest.dsHid.u32Base      resd    1
     336    .Guest.dsHid.u64Base      resq    1
    337337    .Guest.dsHid.u32Limit     resd    1
    338338    .Guest.dsHid.Attr         resd    1
    339339
    340     .Guest.fsHid.u32Base      resd    1
     340    .Guest.fsHid.u64Base      resq    1
    341341    .Guest.fsHid.u32Limit     resd    1
    342342    .Guest.fsHid.Attr         resd    1
    343343
    344     .Guest.gsHid.u32Base      resd    1
     344    .Guest.gsHid.u64Base      resq    1
    345345    .Guest.gsHid.u32Limit     resd    1
    346346    .Guest.gsHid.Attr         resd    1
     
    386386    .Guest.msrKERNELGSBASE    resb    8
    387387
    388     .Guest.ldtrHid.u32Base    resd    1
     388    .Guest.ldtrHid.u64Base    resq    1
    389389    .Guest.ldtrHid.u32Limit   resd    1
    390390    .Guest.ldtrHid.Attr       resd    1
    391391
    392     .Guest.trHid.u32Base      resd    1
     392    .Guest.trHid.u64Base      resq    1
    393393    .Guest.trHid.u32Limit     resd    1
    394394    .Guest.trHid.Attr         resd    1
     
    436436
    437437    ; CPUMCTX debug stuff...
    438     .GuestEntry           resb   1024
     438    .GuestEntry           resb   1056
    439439
    440440endstruc
  • trunk/src/VBox/VMM/DBGF.cpp

    r8823 r9421  
    560560        PCPUMCTX pCtx;
    561561        CPUMQueryGuestCtxPtr(pVM, &pCtx);
    562         uint32_t eip = pCtx->eip + pCtx->csHid.u32Base;
     562        RTGCPTR eip = pCtx->rip + pCtx->csHid.u64Base;
    563563#endif
    564564        for (iBp = 0; iBp < ELEMENTS(pVM->dbgf.s.aBreakpoints); iBp++)
  • trunk/src/VBox/VMM/DBGFDisas.cpp

    r9292 r9421  
    323323        &&  CPUMAreHiddenSelRegsValid(pVM))
    324324    {
    325         SelInfo.GCPtrBase           = pHiddenSel->u32Base;
     325        SelInfo.GCPtrBase           = pHiddenSel->u64Base;
    326326        SelInfo.cbLimit             = pHiddenSel->u32Limit;
    327327        SelInfo.fHyper              = false;
  • trunk/src/VBox/VMM/VMMAll/SELMAll.cpp

    r9412 r9421  
    9999
    100100        if (CPUMAreHiddenSelRegsValid(pVM))
    101             uFlat += pHiddenSel->u32Base;
     101            uFlat += pHiddenSel->u64Base;
    102102        else
    103103            uFlat += ((RTGCUINTPTR)Sel << 4);
     
    108108    if (!CPUMAreHiddenSelRegsValid(pVM))
    109109        return selmToFlat(pVM, Sel, Addr);
    110     return (RTGCPTR)(pHiddenSel->u32Base + (RTGCUINTPTR)Addr);
     110    return (RTGCPTR)(pHiddenSel->u64Base + (RTGCUINTPTR)Addr);
    111111}
    112112
     
    142142            if (    pHiddenSel
    143143                &&  CPUMAreHiddenSelRegsValid(pVM))
    144                 *ppvGC = (RTGCPTR)(pHiddenSel->u32Base + uFlat);
     144                *ppvGC = (RTGCPTR)(pHiddenSel->u64Base + uFlat);
    145145            else
    146146                *ppvGC = (RTGCPTR)(((RTGCUINTPTR)Sel << 4) + uFlat);
     
    166166
    167167        u32Limit      = pHiddenSel->u32Limit;
    168         pvFlat        = (RTGCPTR)(pHiddenSel->u32Base + (RTGCUINTPTR)Addr);
     168        pvFlat        = (RTGCPTR)(pHiddenSel->u64Base + (RTGCUINTPTR)Addr);
    169169    }
    170170    else
     
    334334        uFlat += ((RTGCUINTPTR)SelCS << 4);
    335335    else
    336         uFlat += pHidCS->u32Base;
     336        uFlat += pHidCS->u64Base;
    337337    *ppvFlat = (RTGCPTR)uFlat;
    338338    return VINF_SUCCESS;
     
    457457                if ((RTGCUINTPTR)Addr <= u32Limit)
    458458                {
    459                     *ppvFlat = (RTGCPTR)(  (RTGCUINTPTR)Addr + pHidCS->u32Base );
     459                    *ppvFlat = (RTGCPTR)(  (RTGCUINTPTR)Addr + pHidCS->u64Base );
    460460                    return VINF_SUCCESS;
    461461                }
     
    850850        pHiddenTRReg = CPUMGetGuestTRHid(pVM);
    851851
    852         *pGCPtrTss = pHiddenTRReg->u32Base;
     852        *pGCPtrTss = pHiddenTRReg->u64Base;
    853853        *pcbTss    = pHiddenTRReg->u32Limit;
    854854
  • trunk/src/VBox/VMM/VMMR0/HWACCMR0.cpp

    r9414 r9421  
    981981    Log(("eax=%08x ebx=%08x ecx=%08x edx=%08x esi=%08x edi=%08x\n"
    982982         "eip=%08x esp=%08x ebp=%08x iopl=%d %*s\n"
    983          "cs={%04x base=%08x limit=%08x flags=%08x} dr0=%08RX64 dr1=%08RX64\n"
    984          "ds={%04x base=%08x limit=%08x flags=%08x} dr2=%08RX64 dr3=%08RX64\n"
    985          "es={%04x base=%08x limit=%08x flags=%08x} dr4=%08RX64 dr5=%08RX64\n"
    986          "fs={%04x base=%08x limit=%08x flags=%08x} dr6=%08RX64 dr7=%08RX64\n"
     983         "cs={%04x base=%VGv limit=%08x flags=%08x} dr0=%08RX64 dr1=%08RX64\n"
     984         "ds={%04x base=%VGv limit=%08x flags=%08x} dr2=%08RX64 dr3=%08RX64\n"
     985         "es={%04x base=%VGv limit=%08x flags=%08x} dr4=%08RX64 dr5=%08RX64\n"
     986         "fs={%04x base=%VGv limit=%08x flags=%08x} dr6=%08RX64 dr7=%08RX64\n"
    987987         ,
    988988         pCtx->eax, pCtx->ebx, pCtx->ecx, pCtx->edx, pCtx->esi, pCtx->edi,
    989989         pCtx->eip, pCtx->esp, pCtx->ebp, X86_EFL_GET_IOPL(efl), 31, szEFlags,
    990          (RTSEL)pCtx->cs, pCtx->csHid.u32Base, pCtx->csHid.u32Limit, pCtx->csHid.Attr.u, pCtx->dr0,  pCtx->dr1,
    991          (RTSEL)pCtx->ds, pCtx->dsHid.u32Base, pCtx->dsHid.u32Limit, pCtx->dsHid.Attr.u, pCtx->dr2,  pCtx->dr3,
    992          (RTSEL)pCtx->es, pCtx->esHid.u32Base, pCtx->esHid.u32Limit, pCtx->esHid.Attr.u, pCtx->dr4,  pCtx->dr5,
    993          (RTSEL)pCtx->fs, pCtx->fsHid.u32Base, pCtx->fsHid.u32Limit, pCtx->fsHid.Attr.u, pCtx->dr6,  pCtx->dr7));
    994 
    995     Log(("gs={%04x base=%08x limit=%08x flags=%08x} cr0=%08RX64 cr2=%08RX64\n"
    996          "ss={%04x base=%08x limit=%08x flags=%08x} cr3=%08RX64 cr4=%08RX64\n"
     990         (RTSEL)pCtx->cs, pCtx->csHid.u64Base, pCtx->csHid.u32Limit, pCtx->csHid.Attr.u, pCtx->dr0,  pCtx->dr1,
     991         (RTSEL)pCtx->ds, pCtx->dsHid.u64Base, pCtx->dsHid.u32Limit, pCtx->dsHid.Attr.u, pCtx->dr2,  pCtx->dr3,
     992         (RTSEL)pCtx->es, pCtx->esHid.u64Base, pCtx->esHid.u32Limit, pCtx->esHid.Attr.u, pCtx->dr4,  pCtx->dr5,
     993         (RTSEL)pCtx->fs, pCtx->fsHid.u64Base, pCtx->fsHid.u32Limit, pCtx->fsHid.Attr.u, pCtx->dr6,  pCtx->dr7));
     994
     995    Log(("gs={%04x base=%VGv limit=%08x flags=%08x} cr0=%08RX64 cr2=%08RX64\n"
     996         "ss={%04x base=%VGv limit=%08x flags=%08x} cr3=%08RX64 cr4=%08RX64\n"
    997997         "gdtr=%08x:%04x  idtr=%08x:%04x  eflags=%08x\n"
    998          "ldtr={%04x base=%08x limit=%08x flags=%08x}\n"
    999          "tr  ={%04x base=%08x limit=%08x flags=%08x}\n"
     998         "ldtr={%04x base=%VGv limit=%08x flags=%08x}\n"
     999         "tr  ={%04x base=%VGv limit=%08x flags=%08x}\n"
    10001000         "SysEnter={cs=%04llx eip=%08llx esp=%08llx}\n"
    10011001         "FCW=%04x FSW=%04x FTW=%04x\n",
    1002          (RTSEL)pCtx->gs, pCtx->gsHid.u32Base, pCtx->gsHid.u32Limit, pCtx->gsHid.Attr.u, pCtx->cr0,  pCtx->cr2,
    1003          (RTSEL)pCtx->ss, pCtx->ssHid.u32Base, pCtx->ssHid.u32Limit, pCtx->ssHid.Attr.u, pCtx->cr3,  pCtx->cr4,
     1002         (RTSEL)pCtx->gs, pCtx->gsHid.u64Base, pCtx->gsHid.u32Limit, pCtx->gsHid.Attr.u, pCtx->cr0,  pCtx->cr2,
     1003         (RTSEL)pCtx->ss, pCtx->ssHid.u64Base, pCtx->ssHid.u32Limit, pCtx->ssHid.Attr.u, pCtx->cr3,  pCtx->cr4,
    10041004         pCtx->gdtr.pGdt, pCtx->gdtr.cbGdt, pCtx->idtr.pIdt, pCtx->idtr.cbIdt, efl,
    1005          (RTSEL)pCtx->ldtr, pCtx->ldtrHid.u32Base, pCtx->ldtrHid.u32Limit, pCtx->ldtrHid.Attr.u,
    1006          (RTSEL)pCtx->tr, pCtx->trHid.u32Base, pCtx->trHid.u32Limit, pCtx->trHid.Attr.u,
     1005         (RTSEL)pCtx->ldtr, pCtx->ldtrHid.u64Base, pCtx->ldtrHid.u32Limit, pCtx->ldtrHid.Attr.u,
     1006         (RTSEL)pCtx->tr, pCtx->trHid.u64Base, pCtx->trHid.u32Limit, pCtx->trHid.Attr.u,
    10071007         pCtx->SysEnter.cs, pCtx->SysEnter.eip, pCtx->SysEnter.esp,
    10081008         pCtx->fpu.FCW, pCtx->fpu.FSW, pCtx->fpu.FTW));
  • trunk/src/VBox/VMM/VMMR0/HWSVMR0.h

    r9407 r9421  
    143143        pVMCB->guest.REG.u16Sel   = pCtx->reg;                          \
    144144        pVMCB->guest.REG.u32Limit = pCtx->reg##Hid.u32Limit;            \
    145         pVMCB->guest.REG.u64Base  = pCtx->reg##Hid.u32Base;             \
     145        pVMCB->guest.REG.u64Base  = pCtx->reg##Hid.u64Base;             \
    146146        pVMCB->guest.REG.u16Attr  = SVM_HIDSEGATTR_VMX2SVM(pCtx->reg##Hid.Attr.u);
    147147
     
    149149        pCtx->reg                = pVMCB->guest.REG.u16Sel;             \
    150150        pCtx->reg##Hid.u32Limit  = pVMCB->guest.REG.u32Limit;           \
    151         pCtx->reg##Hid.u32Base   = pVMCB->guest.REG.u64Base;            \
     151        pCtx->reg##Hid.u64Base   = pVMCB->guest.REG.u64Base;            \
    152152        pCtx->reg##Hid.Attr.u    = SVM_HIDSEGATTR_SVM2VMX(pVMCB->guest.REG.u16Attr);
    153153
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r9412 r9421  
    703703            rc =  VMXWriteVMCS(VMX_VMCS_GUEST_FIELD_LDTR,         pCtx->ldtr);
    704704            rc |= VMXWriteVMCS(VMX_VMCS_GUEST_LDTR_LIMIT,         pCtx->ldtrHid.u32Limit);
    705             rc |= VMXWriteVMCS(VMX_VMCS_GUEST_LDTR_BASE,          pCtx->ldtrHid.u32Base);
     705            rc |= VMXWriteVMCS(VMX_VMCS_GUEST_LDTR_BASE,          pCtx->ldtrHid.u64Base);
    706706            rc |= VMXWriteVMCS(VMX_VMCS_GUEST_LDTR_ACCESS_RIGHTS, pCtx->ldtrHid.Attr.u);
    707707        }
     
    722722        {
    723723            rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_LIMIT,         pCtx->trHid.u32Limit);
    724             rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_BASE,          pCtx->trHid.u32Base);
     724            rc |= VMXWriteVMCS(VMX_VMCS_GUEST_TR_BASE,          pCtx->trHid.u64Base);
    725725        }
    726726        val = pCtx->trHid.Attr.u;
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.h

    r9407 r9421  
    140140        rc  = VMXWriteVMCS(VMX_VMCS_GUEST_FIELD_##REG,      pCtx->reg);                         \
    141141        rc |= VMXWriteVMCS(VMX_VMCS_GUEST_##REG##_LIMIT,    pCtx->reg##Hid.u32Limit);           \
    142         rc |= VMXWriteVMCS(VMX_VMCS_GUEST_##REG##_BASE,     pCtx->reg##Hid.u32Base);            \
     142        rc |= VMXWriteVMCS(VMX_VMCS_GUEST_##REG##_BASE,     pCtx->reg##Hid.u64Base);            \
    143143        if (pCtx->eflags.u32 & X86_EFL_VM)                                                      \
    144144            val = pCtx->reg##Hid.Attr.u;                                                        \
     
    157157        pCtx->reg##Hid.u32Limit    = val;                            \
    158158        VMXReadVMCS(VMX_VMCS_GUEST_##REG##_BASE,          &val);     \
    159         pCtx->reg##Hid.u32Base     = val;                            \
     159        pCtx->reg##Hid.u64Base     = val;                            \
    160160        VMXReadVMCS(VMX_VMCS_GUEST_##REG##_ACCESS_RIGHTS, &val);     \
    161161        pCtx->reg##Hid.Attr.u    = val;
  • trunk/src/VBox/VMM/VMMTests.cpp

    r9221 r9421  
    437437            AssertRC(rc);                                                               \
    438438                                                                                        \
    439             pHyperCtx->reg##Hid.u32Base              = selInfo.GCPtrBase;               \
     439            pHyperCtx->reg##Hid.u64Base              = selInfo.GCPtrBase;               \
    440440            pHyperCtx->reg##Hid.u32Limit             = selInfo.cbLimit;                 \
    441441            pHyperCtx->reg##Hid.Attr.n.u1Present     = selInfo.Raw.Gen.u1Present;       \
  • trunk/src/recompiler/VBoxRecompiler.c

    r9415 r9421  
    11091109
    11101110        Ctx.tr             = env->tr.selector;
    1111         Ctx.trHid.u32Base  = (uint32_t)env->tr.base;
     1111        Ctx.trHid.u64Base  = env->tr.base;
    11121112        Ctx.trHid.u32Limit = env->tr.limit;
    11131113        Ctx.trHid.Attr.u   = (env->tr.flags >> 8) & 0xF0FF;
    11141114
    11151115        Ctx.idtr.cbIdt     = env->idt.limit;
    1116         Ctx.idtr.pIdt      = (uint32_t)env->idt.base;
     1116        Ctx.idtr.pIdt      = env->idt.base;
    11171117
    11181118        Ctx.eflags.u32     = env->eflags;
    11191119
    11201120        Ctx.cs             = env->segs[R_CS].selector;
    1121         Ctx.csHid.u32Base  = (uint32_t)env->segs[R_CS].base;
     1121        Ctx.csHid.u64Base  = env->segs[R_CS].base;
    11221122        Ctx.csHid.u32Limit = env->segs[R_CS].limit;
    11231123        Ctx.csHid.Attr.u   = (env->segs[R_CS].flags >> 8) & 0xF0FF;
    11241124
    11251125        Ctx.ss             = env->segs[R_SS].selector;
    1126         Ctx.ssHid.u32Base  = (uint32_t)env->segs[R_SS].base;
     1126        Ctx.ssHid.u64Base  = env->segs[R_SS].base;
    11271127        Ctx.ssHid.u32Limit = env->segs[R_SS].limit;
    11281128        Ctx.ssHid.Attr.u   = (env->segs[R_SS].flags >> 8) & 0xF0FF;
     
    17531753            {
    17541754                pVM->rem.s.Env.ldt.selector = pCtx->ldtr;
    1755                 pVM->rem.s.Env.ldt.base     = pCtx->ldtrHid.u32Base;
     1755                pVM->rem.s.Env.ldt.base     = pCtx->ldtrHid.u64Base;
    17561756                pVM->rem.s.Env.ldt.limit    = pCtx->ldtrHid.u32Limit;
    17571757                pVM->rem.s.Env.ldt.flags    = (pCtx->ldtrHid.Attr.u << 8) & 0xFFFFFF;;
     
    17661766            {
    17671767                pVM->rem.s.Env.tr.selector = pCtx->tr;
    1768                 pVM->rem.s.Env.tr.base     = pCtx->trHid.u32Base;
     1768                pVM->rem.s.Env.tr.base     = pCtx->trHid.u64Base;
    17691769                pVM->rem.s.Env.tr.limit    = pCtx->trHid.u32Limit;
    17701770                pVM->rem.s.Env.tr.flags    = (pCtx->trHid.Attr.u << 8) & 0xFFFFFF;;
     
    18081808        cpu_x86_set_cpl(&pVM->rem.s.Env, CPUMGetGuestCPL(pVM, CPUMCTX2CORE(pCtx)));
    18091809
    1810         cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_CS, pCtx->cs, pCtx->csHid.u32Base, pCtx->csHid.u32Limit, (pCtx->csHid.Attr.u << 8) & 0xFFFFFF);
    1811         cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_SS, pCtx->ss, pCtx->ssHid.u32Base, pCtx->ssHid.u32Limit, (pCtx->ssHid.Attr.u << 8) & 0xFFFFFF);
    1812         cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_DS, pCtx->ds, pCtx->dsHid.u32Base, pCtx->dsHid.u32Limit, (pCtx->dsHid.Attr.u << 8) & 0xFFFFFF);
    1813         cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_ES, pCtx->es, pCtx->esHid.u32Base, pCtx->esHid.u32Limit, (pCtx->esHid.Attr.u << 8) & 0xFFFFFF);
    1814         cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_FS, pCtx->fs, pCtx->fsHid.u32Base, pCtx->fsHid.u32Limit, (pCtx->fsHid.Attr.u << 8) & 0xFFFFFF);
    1815         cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_GS, pCtx->gs, pCtx->gsHid.u32Base, pCtx->gsHid.u32Limit, (pCtx->gsHid.Attr.u << 8) & 0xFFFFFF);
     1810        cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_CS, pCtx->cs, pCtx->csHid.u64Base, pCtx->csHid.u32Limit, (pCtx->csHid.Attr.u << 8) & 0xFFFFFF);
     1811        cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_SS, pCtx->ss, pCtx->ssHid.u64Base, pCtx->ssHid.u32Limit, (pCtx->ssHid.Attr.u << 8) & 0xFFFFFF);
     1812        cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_DS, pCtx->ds, pCtx->dsHid.u64Base, pCtx->dsHid.u32Limit, (pCtx->dsHid.Attr.u << 8) & 0xFFFFFF);
     1813        cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_ES, pCtx->es, pCtx->esHid.u64Base, pCtx->esHid.u32Limit, (pCtx->esHid.Attr.u << 8) & 0xFFFFFF);
     1814        cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_FS, pCtx->fs, pCtx->fsHid.u64Base, pCtx->fsHid.u32Limit, (pCtx->fsHid.Attr.u << 8) & 0xFFFFFF);
     1815        cpu_x86_load_seg_cache(&pVM->rem.s.Env, R_GS, pCtx->gs, pCtx->gsHid.u64Base, pCtx->gsHid.u32Limit, (pCtx->gsHid.Attr.u << 8) & 0xFFFFFF);
    18161816    }
    18171817    else
     
    21652165
    21662166    /** @todo These values could still be out of sync! */
    2167     pCtx->csHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_CS].base;
     2167    pCtx->csHid.u64Base    = pVM->rem.s.Env.segs[R_CS].base;
    21682168    pCtx->csHid.u32Limit   = pVM->rem.s.Env.segs[R_CS].limit;
    21692169    /** @note QEmu saves the 2nd dword of the descriptor; we should store the attribute word only! */
    21702170    pCtx->csHid.Attr.u     = (pVM->rem.s.Env.segs[R_CS].flags >> 8) & 0xF0FF;
    21712171
    2172     pCtx->dsHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_DS].base;
     2172    pCtx->dsHid.u64Base    = pVM->rem.s.Env.segs[R_DS].base;
    21732173    pCtx->dsHid.u32Limit   = pVM->rem.s.Env.segs[R_DS].limit;
    21742174    pCtx->dsHid.Attr.u     = (pVM->rem.s.Env.segs[R_DS].flags >> 8) & 0xF0FF;
    21752175
    2176     pCtx->esHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_ES].base;
     2176    pCtx->esHid.u64Base    = pVM->rem.s.Env.segs[R_ES].base;
    21772177    pCtx->esHid.u32Limit   = pVM->rem.s.Env.segs[R_ES].limit;
    21782178    pCtx->esHid.Attr.u     = (pVM->rem.s.Env.segs[R_ES].flags >> 8) & 0xF0FF;
    21792179
    2180     pCtx->fsHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_FS].base;
     2180    pCtx->fsHid.u64Base    = pVM->rem.s.Env.segs[R_FS].base;
    21812181    pCtx->fsHid.u32Limit   = pVM->rem.s.Env.segs[R_FS].limit;
    21822182    pCtx->fsHid.Attr.u     = (pVM->rem.s.Env.segs[R_FS].flags >> 8) & 0xF0FF;
    21832183
    2184     pCtx->gsHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_GS].base;
     2184    pCtx->gsHid.u64Base    = pVM->rem.s.Env.segs[R_GS].base;
    21852185    pCtx->gsHid.u32Limit   = pVM->rem.s.Env.segs[R_GS].limit;
    21862186    pCtx->gsHid.Attr.u     = (pVM->rem.s.Env.segs[R_GS].flags >> 8) & 0xF0FF;
    21872187
    2188     pCtx->ssHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_SS].base;
     2188    pCtx->ssHid.u64Base    = pVM->rem.s.Env.segs[R_SS].base;
    21892189    pCtx->ssHid.u32Limit   = pVM->rem.s.Env.segs[R_SS].limit;
    21902190    pCtx->ssHid.Attr.u     = (pVM->rem.s.Env.segs[R_SS].flags >> 8) & 0xF0FF;
    21912191
    2192     pCtx->ldtrHid.u32Base  = (uint32_t)pVM->rem.s.Env.ldt.base;
     2192    pCtx->ldtrHid.u64Base  = pVM->rem.s.Env.ldt.base;
    21932193    pCtx->ldtrHid.u32Limit = pVM->rem.s.Env.ldt.limit;
    21942194    pCtx->ldtrHid.Attr.u   = (pVM->rem.s.Env.ldt.flags >> 8) & 0xF0FF;
    21952195
    2196     pCtx->trHid.u32Base    = (uint32_t)pVM->rem.s.Env.tr.base;
     2196    pCtx->trHid.u64Base    = pVM->rem.s.Env.tr.base;
    21972197    pCtx->trHid.u32Limit   = pVM->rem.s.Env.tr.limit;
    21982198    pCtx->trHid.Attr.u     = (pVM->rem.s.Env.tr.flags >> 8) & 0xF0FF;
     
    23672367
    23682368    /** @todo These values could still be out of sync! */
    2369     pCtx->csHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_CS].base;
     2369    pCtx->csHid.u64Base    = pVM->rem.s.Env.segs[R_CS].base;
    23702370    pCtx->csHid.u32Limit   = pVM->rem.s.Env.segs[R_CS].limit;
    23712371    /** @note QEmu saves the 2nd dword of the descriptor; we should store the attribute word only! */
    23722372    pCtx->csHid.Attr.u     = (pVM->rem.s.Env.segs[R_CS].flags >> 8) & 0xFFFF;
    23732373
    2374     pCtx->dsHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_DS].base;
     2374    pCtx->dsHid.u64Base    = pVM->rem.s.Env.segs[R_DS].base;
    23752375    pCtx->dsHid.u32Limit   = pVM->rem.s.Env.segs[R_DS].limit;
    23762376    pCtx->dsHid.Attr.u     = (pVM->rem.s.Env.segs[R_DS].flags >> 8) & 0xFFFF;
    23772377
    2378     pCtx->esHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_ES].base;
     2378    pCtx->esHid.u64Base    = pVM->rem.s.Env.segs[R_ES].base;
    23792379    pCtx->esHid.u32Limit   = pVM->rem.s.Env.segs[R_ES].limit;
    23802380    pCtx->esHid.Attr.u     = (pVM->rem.s.Env.segs[R_ES].flags >> 8) & 0xFFFF;
    23812381
    2382     pCtx->fsHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_FS].base;
     2382    pCtx->fsHid.u64Base    = pVM->rem.s.Env.segs[R_FS].base;
    23832383    pCtx->fsHid.u32Limit   = pVM->rem.s.Env.segs[R_FS].limit;
    23842384    pCtx->fsHid.Attr.u     = (pVM->rem.s.Env.segs[R_FS].flags >> 8) & 0xFFFF;
    23852385
    2386     pCtx->gsHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_GS].base;
     2386    pCtx->gsHid.u64Base    = pVM->rem.s.Env.segs[R_GS].base;
    23872387    pCtx->gsHid.u32Limit   = pVM->rem.s.Env.segs[R_GS].limit;
    23882388    pCtx->gsHid.Attr.u     = (pVM->rem.s.Env.segs[R_GS].flags >> 8) & 0xFFFF;
    23892389
    2390     pCtx->ssHid.u32Base    = (uint32_t)pVM->rem.s.Env.segs[R_SS].base;
     2390    pCtx->ssHid.u64Base    = pVM->rem.s.Env.segs[R_SS].base;
    23912391    pCtx->ssHid.u32Limit   = pVM->rem.s.Env.segs[R_SS].limit;
    23922392    pCtx->ssHid.Attr.u     = (pVM->rem.s.Env.segs[R_SS].flags >> 8) & 0xFFFF;
    23932393
    2394     pCtx->ldtrHid.u32Base  = (uint32_t)pVM->rem.s.Env.ldt.base;
     2394    pCtx->ldtrHid.u64Base  = pVM->rem.s.Env.ldt.base;
    23952395    pCtx->ldtrHid.u32Limit = pVM->rem.s.Env.ldt.limit;
    23962396    pCtx->ldtrHid.Attr.u   = (pVM->rem.s.Env.ldt.flags >> 8) & 0xFFFF;
    23972397
    2398     pCtx->trHid.u32Base    = (uint32_t)pVM->rem.s.Env.tr.base;
     2398    pCtx->trHid.u64Base    = pVM->rem.s.Env.tr.base;
    23992399    pCtx->trHid.u32Limit   = pVM->rem.s.Env.tr.limit;
    24002400    pCtx->trHid.Attr.u     = (pVM->rem.s.Env.tr.flags >> 8) & 0xFFFF;
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