VirtualBox

Changeset 105035 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Jun 26, 2024 7:48:07 PM (8 months ago)
Author:
vboxsync
Message:

VMM/IEM,bs3-cpu-weird-1: Made bs3CpuWeird1_PcWrapping run w/o asserting in the recompiler. bugref:10715

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompFuncs.h

    r104984 r105035  
    414414         */
    415415        if (   IEM_F_MODE_X86_IS_FLAT(pReNative->fExec)
    416             || !(pTbOrg->fFlags & IEMTB_F_CS_LIM_CHECKS) )
     416# if 0 /** @todo breaks on IP/EIP/RIP wraparound tests in bs3-cpu-weird-1. See also iemNativeHlpReturnBreakViaLookup. */
     417            || !(pTbOrg->fFlags & IEMTB_F_CS_LIM_CHECKS)
     418# endif
     419           )
    417420        {
    418421            RTGCPHYS const GCPhysPcCurrent = iemNativeCallEntryToGCPhysPc(pTbOrg, pCallEntry);
  • trunk/src/VBox/VMM/VMMAll/IEMAllN8veRecompiler.cpp

    r104956 r105035  
    182182            if (pVCpu->cpum.GstCtx.rflags.uBoth & CPUMCTX_INHIBIT_NMI)
    183183                fAssertFlags |= IEMTB_F_INHIBIT_NMI;
     184#  if 1 /** @todo breaks on IP/EIP/RIP wraparound tests in bs3-cpu-weird-1. */
     185            Assert(IEM_F_MODE_X86_IS_FLAT(fFlags));
     186#  else
    184187            if (!IEM_F_MODE_X86_IS_FLAT(fFlags))
    185188            {
     
    188191                    fAssertFlags |= IEMTB_F_CS_LIM_CHECKS;
    189192            }
     193#  endif
    190194            Assert(!(fFlags & ~(IEMTB_F_KEY_MASK | IEMTB_F_TYPE_MASK)));
    191195            AssertMsg(fFlags == fAssertFlags, ("fFlags=%#RX32 fAssertFlags=%#RX32 cs:rip=%04x:%#010RX64\n",
  • trunk/src/VBox/VMM/include/IEMMc.h

    r104419 r105035  
    26592659 */
    26602660#ifdef VBOX_STRICT
    2661 #define IEM_MC_CALL_CIMPL_HLP_RET(a_fFlags, a_CallExpr) \
     2661# define IEM_MC_CALL_CIMPL_HLP_RET(a_fFlags, a_CallExpr) \
    26622662    do { \
    26632663        uint8_t      const cbInstr     = IEM_GET_INSTR_LEN(pVCpu); /* may be flushed */ \
     
    26692669        if (rcStrictHlp == VINF_SUCCESS) \
    26702670        { \
     2671            uint64_t const fRipMask = (pVCpu->iem.s.fExec & IEM_F_MODE_CPUMODE_MASK) == IEMMODE_64BIT ? UINT64_MAX : UINT32_MAX; \
    26712672            AssertMsg(   ((a_fFlags) & IEM_CIMPL_F_BRANCH_ANY) \
    2672                       || (   uRipBefore + cbInstr == pVCpu->cpum.GstCtx.rip \
    2673                           && uCsBefore            == pVCpu->cpum.GstCtx.cs.Sel) \
     2673                      || (   ((uRipBefore + cbInstr) & fRipMask) == pVCpu->cpum.GstCtx.rip \
     2674                          && uCsBefore  == pVCpu->cpum.GstCtx.cs.Sel) \
    26742675                      || (   ((a_fFlags) & IEM_CIMPL_F_REP) \
    26752676                          && uRipBefore == pVCpu->cpum.GstCtx.rip \
    26762677                          && uCsBefore  == pVCpu->cpum.GstCtx.cs.Sel), \
    26772678                      ("CS:RIP=%04x:%08RX64 + %x -> %04x:%08RX64, expected %04x:%08RX64\n", uCsBefore, uRipBefore, cbInstr, \
    2678                        pVCpu->cpum.GstCtx.cs.Sel, pVCpu->cpum.GstCtx.rip, uCsBefore, uRipBefore + cbInstr)); \
     2679                       pVCpu->cpum.GstCtx.cs.Sel, pVCpu->cpum.GstCtx.rip, uCsBefore, (uRipBefore + cbInstr) & fRipMask)); \
    26792680            if ((a_fFlags) & IEM_CIMPL_F_RFLAGS) \
    26802681            { /* No need to check fEflBefore */ Assert(!((a_fFlags) & IEM_CIMPL_F_STATUS_FLAGS)); } \
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