VirtualBox

Changeset 42807 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Aug 14, 2012 1:34:34 PM (12 years ago)
Author:
vboxsync
Message:

VMM: Don't try to be clever; there is no guarantee that memory just under 4GB is also identically mapped at just under 1MB.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/HWACCM.cpp

    r42671 r42807  
    23352335            if (CPUMIsGuestInRealModeEx(pCtx))
    23362336            {
    2337                 /* VT-x will not allow high selector bases in v86 mode; fall
    2338                    back to the recompiler in that case.
    2339                    The base must also be equal to (sel << 4). */
    2340                 if (   (   pCtx->cs.Sel != (pCtx->cs.u64Base >> 4)
    2341                         && pCtx->cs.u64Base != 0xffff0000 /* we can deal with the BIOS code as it's also mapped into the lower region. */)
     2337                /* In V86 mode (VT-x or not), the CPU enforces real-mode compatible selector
     2338                 * bases and limits, i.e. limit must be 64K and base must be selector * 16.
     2339                 * If this is not true, we cannot execute real mode as V86 and have to fall
     2340                 * back to emulation.
     2341                 */
     2342                if (   pCtx->cs.Sel != (pCtx->cs.u64Base >> 4)
     2343                    || pCtx->ds.Sel != (pCtx->ds.u64Base >> 4)
     2344                    || pCtx->es.Sel != (pCtx->es.u64Base >> 4)
     2345                    || pCtx->ss.Sel != (pCtx->ss.u64Base >> 4)
     2346                    || pCtx->fs.Sel != (pCtx->fs.u64Base >> 4)
     2347                    || pCtx->gs.Sel != (pCtx->gs.u64Base >> 4)
    23422348                    || (pCtx->cs.u32Limit != 0xffff)
    23432349                    || (pCtx->ds.u32Limit != 0xffff)
     
    23452351                    || (pCtx->ss.u32Limit != 0xffff)
    23462352                    || (pCtx->fs.u32Limit != 0xffff)
    2347                     || (pCtx->gs.u32Limit != 0xffff)
    2348                     || pCtx->ds.Sel != (pCtx->ds.u64Base >> 4)
    2349                     || pCtx->es.Sel != (pCtx->es.u64Base >> 4)
    2350                     || pCtx->fs.Sel != (pCtx->fs.u64Base >> 4)
    2351                     || pCtx->gs.Sel != (pCtx->gs.u64Base >> 4)
    2352                     || pCtx->ss.Sel != (pCtx->ss.u64Base >> 4))
     2353                    || (pCtx->gs.u32Limit != 0xffff))
    23532354                {
    23542355                    return false;
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