VirtualBox

Changeset 9412 in vbox for trunk/src


Ignore:
Timestamp:
Jun 5, 2008 11:56:28 AM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
31650
Message:

use macros to access base, limit of a descriptor and offset of an IDT entry

Location:
trunk/src/VBox/VMM
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PATM/CSAM.cpp

    r9350 r9412  
    23742374            fakeflags.u32 = 0;
    23752375
    2376             pHandler = (pGuestIdte->Gen.u16OffsetHigh << 16) | pGuestIdte->Gen.u16OffsetLow;
     2376            pHandler = VBOXIDTE_OFFSET(*pGuestIdte);
    23772377            pHandler = SELMToFlat(pVM, fakeflags, pGuestIdte->Gen.u16SegSel, 0, pHandler);
    23782378
     
    23912391            if (pGuestIdte->Gen.u5Type2 == VBOX_IDTE_TYPE2_TRAP_32)
    23922392            {
    2393                 Log(("CSAMCheckGates: check trap gate %d at %04X:%08X (flat %VRv)\n", iGate, pGuestIdte->Gen.u16SegSel, (pGuestIdte->Gen.u16OffsetHigh << 16) | pGuestIdte->Gen.u16OffsetLow, pHandler));
     2393                Log(("CSAMCheckGates: check trap gate %d at %04X:%08X (flat %VRv)\n", iGate, pGuestIdte->Gen.u16SegSel, VBOXIDTE_OFFSET(*pGuestIdte), pHandler));
    23942394            }
    23952395            else
    23962396            {
    2397                 Log(("CSAMCheckGates: check interrupt gate %d at %04X:%08X (flat %VRv)\n", iGate, pGuestIdte->Gen.u16SegSel, (pGuestIdte->Gen.u16OffsetHigh << 16) | pGuestIdte->Gen.u16OffsetLow, pHandler));
     2397                Log(("CSAMCheckGates: check interrupt gate %d at %04X:%08X (flat %VRv)\n", iGate, pGuestIdte->Gen.u16SegSel, VBOXIDTE_OFFSET(*pGuestIdte), pHandler));
    23982398            }
    23992399
  • trunk/src/VBox/VMM/SELM.cpp

    r9395 r9412  
    10831083         */
    10841084        PVBOXDESC   pDesc = &pVM->selm.s.paGdtHC[SelLdt >> X86_SEL_SHIFT];
    1085         RTGCPTR     GCPtrLdt = pDesc->Gen.u16BaseLow | (pDesc->Gen.u8BaseHigh1 << 16) | ((RTGCPTR)pDesc->Gen.u8BaseHigh2 << 24);
    1086         unsigned    cbLdt = pDesc->Gen.u16LimitLow | (pDesc->Gen.u4LimitHigh << 16);
     1085        RTGCPTR     GCPtrLdt = X86DESC_BASE(*pDesc);
     1086        unsigned    cbLdt = X86DESC_LIMIT(*pDesc);
    10871087        if (pDesc->Gen.u1Granularity)
    10881088            cbLdt = (cbLdt << PAGE_SHIFT) | PAGE_OFFSET_MASK;
     
    14201420         */
    14211421        PVBOXDESC   pDesc = &pVM->selm.s.paGdtHC[SelTss >> X86_SEL_SHIFT];
    1422         RTGCPTR     GCPtrTss = pDesc->Gen.u16BaseLow | (pDesc->Gen.u8BaseHigh1 << 16) | ((RTGCPTR)pDesc->Gen.u8BaseHigh2 << 24);
    1423         unsigned    cbTss = pDesc->Gen.u16LimitLow | (pDesc->Gen.u4LimitHigh << 16);
     1422        RTGCPTR     GCPtrTss = X86DESC_BASE(*pDesc);
     1423        unsigned    cbTss = X86DESC_LIMIT(*pDesc);
    14241424        if (pDesc->Gen.u1Granularity)
    14251425            cbTss = (cbTss << PAGE_SHIFT) | PAGE_OFFSET_MASK;
     
    16251625        return rc;
    16261626    }
    1627     RTGCPTR     GCPtrLDTEGuest = LDTDesc.Gen.u16BaseLow | (LDTDesc.Gen.u8BaseHigh1 << 16) | ((RTGCPTR)LDTDesc.Gen.u8BaseHigh2 << 24);
    1628     unsigned    cbLdt = LDTDesc.Gen.u16LimitLow | (LDTDesc.Gen.u4LimitHigh << 16);
     1627    RTGCPTR     GCPtrLDTEGuest = X86DESC_BASE(LDTDesc);
     1628    unsigned    cbLdt = X86DESC_LIMIT(LDTDesc);
    16291629    if (LDTDesc.Gen.u1Granularity)
    16301630        cbLdt = (cbLdt << PAGE_SHIFT) | PAGE_OFFSET_MASK;
     
    17041704         */
    17051705        PVBOXDESC   pDesc = &pVM->selm.s.paGdtHC[SelTss >> X86_SEL_SHIFT];
    1706         RTGCPTR     GCPtrTss = pDesc->Gen.u16BaseLow | (pDesc->Gen.u8BaseHigh1 << 16) | ((RTGCPTR)pDesc->Gen.u8BaseHigh2 << 24);
    1707         unsigned    cbTss = pDesc->Gen.u16LimitLow | (pDesc->Gen.u4LimitHigh << 16);
     1706        RTGCPTR     GCPtrTss = X86DESC_BASE(*pDesc);
     1707        unsigned    cbTss = X86DESC_LIMIT(*pDesc);
    17081708        if (pDesc->Gen.u1Granularity)
    17091709            cbTss = (cbTss << PAGE_SHIFT) | PAGE_OFFSET_MASK;
     
    18161816    if (ppvLdt)
    18171817    {
    1818         *ppvLdt = (RTGCPTR)(    ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24)
    1819                               |  (Desc.Gen.u8BaseHigh1 << 16)
    1820                               |   Desc.Gen.u16BaseLow);
    1821         *pcbLimit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow;
     1818        *ppvLdt = (RTGCPTR)X86DESC_BASE(Desc);
     1819        *pcbLimit = X86DESC_LIMIT(Desc);
    18221820    }
    18231821    return VINF_SUCCESS;
     
    19011899                return VERR_INVALID_SELECTOR;
    19021900
    1903             unsigned cbLimit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow;
     1901            unsigned cbLimit = X86DESC_LIMIT(Desc);
    19041902            if (Desc.Gen.u1Granularity)
    19051903                cbLimit = (cbLimit << PAGE_SHIFT) | PAGE_OFFSET_MASK;
     
    19081906
    19091907            /* calc the descriptor location. */
    1910             GCPtrDesc =    ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24)
    1911                         |  (Desc.Gen.u8BaseHigh1 << 16)
    1912                         |   Desc.Gen.u16BaseLow;
     1908            GCPtrDesc = X86DESC_BASE(Desc);
    19131909            GCPtrDesc += (Sel & X86_SEL_MASK);
    19141910        }
     
    19381934    pSelInfo->Sel = Sel;
    19391935    pSelInfo->Raw = Desc;
    1940     pSelInfo->cbLimit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow;
     1936    pSelInfo->cbLimit = X86DESC_LIMIT(Desc);
    19411937    if (Desc.Gen.u1Granularity)
    19421938        pSelInfo->cbLimit = (pSelInfo->cbLimit << PAGE_SHIFT) | PAGE_OFFSET_MASK;
    1943     pSelInfo->GCPtrBase =   ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24)
    1944                           | (Desc.Gen.u8BaseHigh1 << 16)
    1945                           |  Desc.Gen.u16BaseLow;
     1939    pSelInfo->GCPtrBase = X86DESC_BASE(Desc);
    19461940    pSelInfo->fRealMode = false;
    19471941
     
    20051999    pSelInfo->Sel = Sel;
    20062000    pSelInfo->Raw = Desc;
    2007     pSelInfo->cbLimit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow;
     2001    pSelInfo->cbLimit = X86DESC_LIMIT(Desc);
    20082002    if (Desc.Gen.u1Granularity)
    20092003        pSelInfo->cbLimit = (pSelInfo->cbLimit << PAGE_SHIFT) | PAGE_OFFSET_MASK;
    2010     pSelInfo->GCPtrBase =   ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24)
    2011                           | (Desc.Gen.u8BaseHigh1 << 16)
    2012                           |  Desc.Gen.u16BaseLow;
     2004    pSelInfo->GCPtrBase = X86DESC_BASE(Desc);
    20132005    pSelInfo->fRealMode = false;
    20142006
     
    20962088     * Limit and Base and format the output.
    20972089     */
    2098     uint32_t    u32Limit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow;
     2090    uint32_t    u32Limit = X86DESC_LIMIT(Desc);
    20992091    if (Desc.Gen.u1Granularity)
    21002092        u32Limit = u32Limit << PAGE_SHIFT | PAGE_OFFSET_MASK;
    2101     uint32_t    u32Base =  Desc.Gen.u8BaseHigh2 << 24 | Desc.Gen.u8BaseHigh1 << 16 | Desc.Gen.u16BaseLow;
     2093    uint32_t    u32Base =  X86DESC_BASE(Desc);
    21022094
    21032095    RTStrPrintf(pszOutput, cchOutput, "%04x - %08x %08x - base=%08x limit=%08x dpl=%d %s",
  • trunk/src/VBox/VMM/TRPM.cpp

    r9289 r9412  
    642642        {
    643643            PVBOXIDTE   pIdte = &pVM->trpm.s.aIdt[iTrap];
    644             RTGCPTR     pHandler = (pIdte->Gen.u16OffsetHigh << 16) | pIdte->Gen.u16OffsetLow;
     644            RTGCPTR     pHandler = VBOXIDTE_OFFSET(*pIdte);
    645645
    646646            Log(("TRPMR3Relocate: *iGate=%2X Handler %VGv -> %VGv\n", iTrap, pHandler, pHandler + offDelta));
     
    11181118        {
    11191119            PVBOXIDTE   pIdte = &pVM->trpm.s.aIdt[iTrap];
    1120             RTGCPTR     pHandler = (pIdte->Gen.u16OffsetHigh << 16) | pIdte->Gen.u16OffsetLow;
     1120            RTGCPTR     pHandler = VBOXIDTE_OFFSET(*pIdte);
    11211121
    11221122            if (pHandler == GCPtr)
     
    13021302                if (pIDTE->Gen.u1Present)
    13031303                {
    1304                     RTRCPTR GCPtrHandler = (pIDTE->Gen.u16OffsetHigh << 16) | pIDTE->Gen.u16OffsetLow;
     1304                    RTRCPTR GCPtrHandler = VBOXIDTE_OFFSET(*pIDTE);
    13051305                    if (GCPtr == GCPtrHandler)
    13061306                        return true;
  • trunk/src/VBox/VMM/VMMAll/SELMAll.cpp

    r9395 r9412  
    6969    }
    7070
    71     return (RTGCPTR)( (RTGCUINTPTR)Addr
    72                        + (   ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24)
    73                           |  (Desc.Gen.u8BaseHigh1 << 16)
    74                           |   Desc.Gen.u16BaseLow));
     71    return (RTGCPTR)((RTGCUINTPTR)Addr + X86DESC_BASE(Desc));
    7572}
    7673
     
    197194
    198195        /* calc limit. */
    199         u32Limit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow;
     196        u32Limit = X86DESC_LIMIT(Desc);
    200197        if (Desc.Gen.u1Granularity)
    201198            u32Limit = (u32Limit << PAGE_SHIFT) | PAGE_OFFSET_MASK;
    202199
    203200        /* calc address assuming straight stuff. */
    204         pvFlat = (RTGCPTR)(  (RTGCUINTPTR)Addr
    205                            + (   ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24)
    206                               |  (Desc.Gen.u8BaseHigh1 << 16)
    207                               |   Desc.Gen.u16BaseLow )
    208                              );
     201        pvFlat = (RTGCPTR)((RTGCUINTPTR)Addr + X86DESC_BASE(Desc));
    209202
    210203        u1Present     = Desc.Gen.u1Present;
     
    402395                 * Limit check.
    403396                 */
    404                 uint32_t    u32Limit = Desc.Gen.u4LimitHigh << 16 | Desc.Gen.u16LimitLow;
     397                uint32_t    u32Limit = X86DESC_LIMIT(Desc);
    405398                if (Desc.Gen.u1Granularity)
    406399                    u32Limit = (u32Limit << PAGE_SHIFT) | PAGE_OFFSET_MASK;
    407400                if ((RTGCUINTPTR)Addr <= u32Limit)
    408401                {
    409                     *ppvFlat = (RTGCPTR)(  (RTGCUINTPTR)Addr
    410                                            + (   ((RTGCPTR)Desc.Gen.u8BaseHigh2 << 24)
    411                                               |  (Desc.Gen.u8BaseHigh1 << 16)
    412                                               |   Desc.Gen.u16BaseLow)
    413                                              );
     402                    *ppvFlat = (RTGCPTR)((RTGCUINTPTR)Addr + X86DESC_BASE(Desc));
    414403                    if (pcBits)
    415404                        *pcBits = Desc.Gen.u1DefBig ? 32 : 16; /** @todo GUEST64 */
  • trunk/src/VBox/VMM/VMMAll/TRPMAll.cpp

    r9341 r9412  
    480480            RTGCPTR pTrapStackGC;
    481481
    482             pHandler = (RTGCPTR)((GuestIdte.Gen.u16OffsetHigh << 16) | GuestIdte.Gen.u16OffsetLow);
     482            pHandler = (RTGCPTR)VBOXIDTE_OFFSET(GuestIdte);
    483483
    484484            /* Note: SELMValidateAndConvertCSAddr checks for code type, memory type, selector validity. */
  • trunk/src/VBox/VMM/VMMGC/SELMGC.cpp

    r9288 r9412  
    129129        Desc.Gen.u1Present = 0;
    130130    }
    131     //Log(("O: base=%08X limit=%08X attr=%04X\n", pShadowDescr->Gen.u16BaseLow | (pShadowDescr->Gen.u8BaseHigh1 << 16) | (pShadowDescr->Gen.u8BaseHigh2 << 24), pShadowDescr->Gen.u16LimitLow | (pShadowDescr->Gen.u4LimitHigh << 16), (pShadowDescr->au32[1] >> 8) & 0xFFFF ));
    132     //Log(("N: base=%08X limit=%08X attr=%04X\n", Desc.Gen.u16BaseLow | (Desc.Gen.u8BaseHigh1 << 16) | (Desc.Gen.u8BaseHigh2 << 24), Desc.Gen.u16LimitLow | (Desc.Gen.u4LimitHigh << 16), (Desc.au32[1] >> 8) & 0xFFFF ));
     131    //Log(("O: base=%08X limit=%08X attr=%04X\n", X86DESC_BASE(*pShadowDescr)), X86DESC_LIMIT(*pShadowDescr), (pShadowDescr->au32[1] >> 8) & 0xFFFF ));
     132    //Log(("N: base=%08X limit=%08X attr=%04X\n", X86DESC_BASE(Desc)), X86DESC_LIMIT(Desc), (Desc.au32[1] >> 8) & 0xFFFF ));
    133133    *pShadowDescr = Desc;
    134134
  • trunk/src/VBox/VMM/VMMR0/HWACCMR0.cpp

    r9411 r9412  
    917917
    918918#if HC_ARCH_BITS == 64
    919     uint64_t    u32Base =  ((uintptr_t)Desc->Gen.u32BaseHigh3 << 32ULL) | Desc->Gen.u8BaseHigh2 << 24ULL | Desc->Gen.u8BaseHigh1 << 16ULL | Desc->Gen.u16BaseLow;
     919    uint64_t    u32Base =  X86DESC64_BASE(Desc);
    920920
    921921    Log(("%s %04x - %VX64 %VX64 - base=%VX64 limit=%08x dpl=%d %s\n", pszMsg,
    922922         Sel, Desc->au64[0], Desc->au64[1], u32Base, u32Limit, Desc->Gen.u2Dpl, szMsg));
    923923#else
    924     uint32_t    u32Base =  Desc->Gen.u8BaseHigh2 << 24 | Desc->Gen.u8BaseHigh1 << 16 | Desc->Gen.u16BaseLow;
     924    uint32_t    u32Base =  X86DESC_BASE(Desc);
    925925
    926926    Log(("%s %04x - %08x %08x - base=%08x limit=%08x dpl=%d %s\n", pszMsg,
  • trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp

    r9411 r9412  
    613613        pDesc  = &((PX86DESCHC)gdtr.pGdt)[SelTR >> X86_SEL_SHIFT_HC];
    614614#if HC_ARCH_BITS == 64
    615         trBase = pDesc->Gen.u16BaseLow | (pDesc->Gen.u8BaseHigh1 << 16ULL) | (pDesc->Gen.u8BaseHigh2 << 24ULL) | ((uintptr_t)pDesc->Gen.u32BaseHigh3 << 32ULL);
     615        trBase = X86DESC64_BASE(*pDesc);
    616616#else
    617         trBase = pDesc->Gen.u16BaseLow | (pDesc->Gen.u8BaseHigh1 << 16) | (pDesc->Gen.u8BaseHigh2 << 24);
     617        trBase = X86DESC_BASE(*pDesc);
    618618#endif
    619619        rc = VMXWriteVMCS(VMX_VMCS_HOST_TR_BASE, trBase);
  • trunk/src/VBox/VMM/VMMR0/TRPMR0.cpp

    r8155 r9412  
    7575#if HC_ARCH_BITS == 32
    7676    RTFAR32   pfnHandler;
    77     pfnHandler.off = (pIdte->Gen.u16OffsetHigh << 16) | pIdte->Gen.u16OffsetLow;
     77    pfnHandler.off = VBOXIDTE_OFFSET(*pIdte);
    7878    pfnHandler.sel = pIdte->Gen.u16SegSel;
    7979
     
    8282#else /* 64-bit: */
    8383    RTFAR64   pfnHandler;
    84     pfnHandler.off = (pIdte->Gen.u16OffsetHigh << 16) | pIdte->Gen.u16OffsetLow;
     84    pfnHandler.off = VBOXIDTE_OFFSET(*pIdte);
    8585    pfnHandler.off |= (uint64_t)(*(uint32_t *)(pIdte + 1)) << 32; //cleanup!
    8686    pfnHandler.sel = pIdte->Gen.u16SegSel;
     
    135135
    136136    RTFAR32   pfnHandler;
    137     pfnHandler.off = (pIdte->Gen.u16OffsetHigh << 16) | pIdte->Gen.u16OffsetLow;
     137    pfnHandler.off = VBOXIDTE_OFFSET(*pIdte);
    138138    pfnHandler.sel = pIdte->Gen.u16SegSel;
    139139
     
    178178
    179179    RTFAR64   pfnHandler;
    180     pfnHandler.off = (pIdte->Gen.u16OffsetHigh << 16) | pIdte->Gen.u16OffsetLow;
     180    pfnHandler.off = VBOXIDTE_OFFSET(*pIdte);
    181181    pfnHandler.off |= (uint64_t)(*(uint32_t *)(pIdte + 1)) << 32; //cleanup!
    182182    pfnHandler.sel = pIdte->Gen.u16SegSel;
Note: See TracChangeset for help on using the changeset viewer.

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