VirtualBox

Changeset 49975 in vbox


Ignore:
Timestamp:
Dec 18, 2013 2:04:47 PM (11 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
91402
Message:

EM: Make sure the RA1 and RAZ bits of DR6 and DR7 are enforced. Fixes netware debug assertion in HM.

File:
1 edited

Legend:

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

    r49481 r49975  
    18211821{
    18221822    Assert(pRegFrame == CPUMGetGuestCtxCore(pVCpu));
    1823     uint64_t val;
     1823    uint64_t uNewDrX;
    18241824    int      rc;
    18251825    NOREF(pVM);
    18261826
    18271827    if (CPUMIsGuestIn64BitCode(pVCpu))
    1828         rc = DISFetchReg64(pRegFrame, SrcRegGen, &val);
     1828        rc = DISFetchReg64(pRegFrame, SrcRegGen, &uNewDrX);
    18291829    else
    18301830    {
    18311831        uint32_t val32;
    18321832        rc = DISFetchReg32(pRegFrame, SrcRegGen, &val32);
    1833         val = val32;
     1833        uNewDrX = val32;
    18341834    }
    18351835
    18361836    if (RT_SUCCESS(rc))
    18371837    {
     1838        if (DestRegDrx == 6)
     1839        {
     1840            uNewDrX |= X86_DR6_RA1_MASK;
     1841            uNewDrX &= ~X86_DR6_RAZ_MASK;
     1842        }
     1843        else if (DestRegDrx == 7)
     1844        {
     1845            uNewDrX |= X86_DR7_RA1_MASK;
     1846            uNewDrX &= ~X86_DR7_RAZ_MASK;
     1847        }
     1848
    18381849        /** @todo we don't fail if illegal bits are set/cleared for e.g. dr7 */
    1839         rc = CPUMSetGuestDRx(pVCpu, DestRegDrx, val);
     1850        rc = CPUMSetGuestDRx(pVCpu, DestRegDrx, uNewDrX);
    18401851        if (RT_SUCCESS(rc))
    18411852            return rc;
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