VirtualBox

Changeset 52363 in vbox for trunk/src/VBox/VMM/VMMAll


Ignore:
Timestamp:
Aug 12, 2014 8:03:48 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
95495
Message:

SELM: More effective address calculation width fixes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/SELMAll.cpp

    r50141 r52363  
    108108        ||  CPUMIsGuestInRealMode(pVCpu))
    109109    {
    110         RTGCUINTPTR uFlat = (RTGCUINTPTR)Addr & 0xffff;
     110        uint32_t uFlat = (uint32_t)Addr & 0xffff;
    111111        if (CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, pSReg))
    112             uFlat += pSReg->u64Base;
     112            uFlat += (uint32_t)pSReg->u64Base;
    113113        else
    114             uFlat += (RTGCUINTPTR)pSReg->Sel << 4;
     114            uFlat += (uint32_t)pSReg->Sel << 4;
    115115        return (RTGCPTR)uFlat;
    116116    }
     
    145145    /* AMD64 manual: compatibility mode ignores the high 32 bits when calculating an effective address. */
    146146    Assert(pSReg->u64Base <= 0xffffffff);
    147     return ((pSReg->u64Base + (RTGCUINTPTR)Addr) & 0xffffffff);
     147    return (uint32_t)pSReg->u64Base + (uint32_t)Addr;
    148148}
    149149
     
    178178        ||  CPUMIsGuestInRealMode(pVCpu))
    179179    {
    180         RTGCUINTPTR uFlat = (RTGCUINTPTR)Addr & 0xffff;
    181180        if (ppvGC)
    182181        {
     182            uint32_t uFlat = (uint32_t)Addr & 0xffff;
    183183            if (CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, pSReg))
    184                 *ppvGC = pSReg->u64Base + uFlat;
     184                *ppvGC = (uint32_t)pSReg->u64Base + uFlat;
    185185            else
    186                 *ppvGC = ((RTGCUINTPTR)pSReg->Sel << 4) + uFlat;
     186                *ppvGC = ((uint32_t)pSReg->Sel << 4) + uFlat;
    187187        }
    188188        return VINF_SUCCESS;
     
    223223        /* AMD64 manual: compatibility mode ignores the high 32 bits when calculating an effective address. */
    224224        Assert(pSReg->u64Base <= UINT32_C(0xffffffff));
    225         pvFlat  = pSReg->u64Base + Addr;
    226         pvFlat &= UINT32_C(0xffffffff);
     225        pvFlat  = (uint32_t)pSReg->u64Base + (uint32_t)Addr;
     226        Assert(pvFlat <= UINT32_MAX);
    227227    }
    228228
     
    610610{
    611611    NOREF(pVCpu);
    612     RTGCUINTPTR uFlat = Addr & 0xffff;
     612    uint32_t uFlat = Addr & 0xffff;
    613613    if (!pSReg || !CPUMSELREG_ARE_HIDDEN_PARTS_VALID(pVCpu, pSReg))
    614         uFlat += (RTGCUINTPTR)SelCS << 4;
     614        uFlat += (uint32_t)SelCS << 4;
    615615    else
    616         uFlat += pSReg->u64Base;
     616        uFlat += (uint32_t)pSReg->u64Base;
    617617    *ppvFlat = uFlat;
    618618    return VINF_SUCCESS;
     
    740740             */
    741741            uint32_t u32Limit = pSRegCS->u32Limit;
    742             if ((RTGCUINTPTR)Addr <= u32Limit)
     742            if ((uint32_t)Addr <= u32Limit)
    743743            {
    744                 *ppvFlat = Addr + pSRegCS->u64Base;
     744                *ppvFlat = (uint32_t)Addr + (uint32_t)pSRegCS->u64Base;
    745745                return VINF_SUCCESS;
    746746            }
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