VirtualBox

Changeset 97642 in vbox for trunk


Ignore:
Timestamp:
Nov 21, 2022 11:03:36 PM (23 months ago)
Author:
vboxsync
Message:

VMM/IEM: Hack to raise more correct #PFs for FXSAVE and friends so bs3-cpu-basic2 passes the #AC test. bugref:9898

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

Legend:

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

    r97641 r97642  
    425425            IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, IEM_ACCESS_INSTRUCTION, IEM_SLAT_FAIL_LINEAR_TO_PHYS_ADDR, 0 /* cbInstr */);
    426426#endif
    427         return iemRaisePageFault(pVCpu, GCPtrPC, IEM_ACCESS_INSTRUCTION, rc);
     427        return iemRaisePageFault(pVCpu, GCPtrPC, 1, IEM_ACCESS_INSTRUCTION, rc);
    428428    }
    429429    if ((Walk.fEffective & X86_PTE_US) || pVCpu->iem.s.uCpl != 3) { /* likely */ }
     
    435435            IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, IEM_ACCESS_INSTRUCTION, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */);
    436436#endif
    437         return iemRaisePageFault(pVCpu, GCPtrPC, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED);
     437        return iemRaisePageFault(pVCpu, GCPtrPC, 1, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED);
    438438    }
    439439    if (!(Walk.fEffective & X86_PTE_PAE_NX) || !(pVCpu->cpum.GstCtx.msrEFER & MSR_K6_EFER_NXE)) { /* likely */ }
     
    445445            IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, IEM_ACCESS_INSTRUCTION, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */);
    446446#endif
    447         return iemRaisePageFault(pVCpu, GCPtrPC, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED);
     447        return iemRaisePageFault(pVCpu, GCPtrPC, 1, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED);
    448448    }
    449449    RTGCPHYS const GCPhys = Walk.GCPhys | (GCPtrPC & GUEST_PAGE_OFFSET_MASK);
     
    810810#endif
    811811                Log(("iemOpcodeFetchMoreBytes: %RGv - rc=%Rrc\n", GCPtrFirst, rc));
    812                 iemRaisePageFaultJmp(pVCpu, GCPtrFirst, IEM_ACCESS_INSTRUCTION, rc);
     812                iemRaisePageFaultJmp(pVCpu, GCPtrFirst, 1, IEM_ACCESS_INSTRUCTION, rc);
    813813            }
    814814
     
    830830            {
    831831                Log(("iemOpcodeFetchBytesJmp: %RGv - supervisor page\n", GCPtrFirst));
    832                 iemRaisePageFaultJmp(pVCpu, GCPtrFirst, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED);
     832                iemRaisePageFaultJmp(pVCpu, GCPtrFirst, 1, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED);
    833833            }
    834834            if ((pTlbe->fFlagsAndPhysRev & IEMTLBE_F_PT_NO_EXEC) && (pVCpu->cpum.GstCtx.msrEFER & MSR_K6_EFER_NXE))
    835835            {
    836836                Log(("iemOpcodeFetchMoreBytes: %RGv - NX\n", GCPtrFirst));
    837                 iemRaisePageFaultJmp(pVCpu, GCPtrFirst, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED);
     837                iemRaisePageFaultJmp(pVCpu, GCPtrFirst, 1, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED);
    838838            }
    839839        }
     
    10391039            IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, IEM_ACCESS_INSTRUCTION, IEM_SLAT_FAIL_LINEAR_TO_PHYS_ADDR, 0 /* cbInstr */);
    10401040#endif
    1041         return iemRaisePageFault(pVCpu, GCPtrNext, IEM_ACCESS_INSTRUCTION, rc);
     1041        return iemRaisePageFault(pVCpu, GCPtrNext, 1, IEM_ACCESS_INSTRUCTION, rc);
    10421042    }
    10431043    if (!(Walk.fEffective & X86_PTE_US) && pVCpu->iem.s.uCpl == 3)
     
    10481048            IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, IEM_ACCESS_INSTRUCTION, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */);
    10491049#endif
    1050         return iemRaisePageFault(pVCpu, GCPtrNext, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED);
     1050        return iemRaisePageFault(pVCpu, GCPtrNext, 1, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED);
    10511051    }
    10521052    if ((Walk.fEffective & X86_PTE_PAE_NX) && (pVCpu->cpum.GstCtx.msrEFER & MSR_K6_EFER_NXE))
     
    10571057            IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, IEM_ACCESS_INSTRUCTION, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */);
    10581058#endif
    1059         return iemRaisePageFault(pVCpu, GCPtrNext, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED);
     1059        return iemRaisePageFault(pVCpu, GCPtrNext, 1, IEM_ACCESS_INSTRUCTION, VERR_ACCESS_DENIED);
    10601060    }
    10611061    RTGCPHYS const GCPhys = Walk.GCPhys | (GCPtrNext & GUEST_PAGE_OFFSET_MASK);
     
    41064106
    41074107/** \#PF(n) - 0e.  */
    4108 VBOXSTRICTRC iemRaisePageFault(PVMCPUCC pVCpu, RTGCPTR GCPtrWhere, uint32_t fAccess, int rc) RT_NOEXCEPT
     4108VBOXSTRICTRC iemRaisePageFault(PVMCPUCC pVCpu, RTGCPTR GCPtrWhere, uint32_t cbAccess, uint32_t fAccess, int rc) RT_NOEXCEPT
    41094109{
    41104110    uint16_t uErr;
     
    41524152#endif
    41534153
     4154    /* For FXSAVE and FRSTOR the #PF is typically reported at the max address
     4155       of the memory operand rather than at the start of it. (Not sure what
     4156       happens if it crosses a page boundrary.)  The current heuristics for
     4157       this is to report the #PF for the last byte if the access is more than
     4158       64 bytes. This is probably not correct, but we can work that out later,
     4159       main objective now is to get FXSAVE to work like for real hardware and
     4160       make bs3-cpu-basic2 work. */
     4161    if (cbAccess <= 64)
     4162    { /* likely*/ }
     4163    else
     4164        GCPtrWhere += cbAccess - 1;
     4165
    41544166    return iemRaiseXcptOrInt(pVCpu, 0, X86_XCPT_PF, IEM_XCPT_FLAGS_T_CPU_XCPT | IEM_XCPT_FLAGS_ERR | IEM_XCPT_FLAGS_CR2,
    41554167                             uErr, GCPtrWhere);
     
    41584170#ifdef IEM_WITH_SETJMP
    41594171/** \#PF(n) - 0e, longjmp.  */
    4160 DECL_NO_RETURN(void) iemRaisePageFaultJmp(PVMCPUCC pVCpu, RTGCPTR GCPtrWhere, uint32_t fAccess, int rc) IEM_NOEXCEPT_MAY_LONGJMP
    4161 {
    4162     IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(iemRaisePageFault(pVCpu, GCPtrWhere, fAccess, rc)));
     4172DECL_NO_RETURN(void) iemRaisePageFaultJmp(PVMCPUCC pVCpu, RTGCPTR GCPtrWhere, uint32_t cbAccess,
     4173                                          uint32_t fAccess, int rc) IEM_NOEXCEPT_MAY_LONGJMP
     4174{
     4175    IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(iemRaisePageFault(pVCpu, GCPtrWhere, cbAccess, fAccess, rc)));
    41634176}
    41644177#endif
     
    53795392 * @param   pVCpu               The cross context virtual CPU structure of the calling thread.
    53805393 * @param   GCPtrMem            The virtual address.
     5394 * @param   cbAccess            The access size, for raising \#PF correctly for
     5395 *                              FXSAVE and such.
    53815396 * @param   fAccess             The intended access.
    53825397 * @param   pGCPhysMem          Where to return the physical address.
    53835398 */
    5384 VBOXSTRICTRC iemMemPageTranslateAndCheckAccess(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint32_t fAccess, PRTGCPHYS pGCPhysMem) RT_NOEXCEPT
     5399VBOXSTRICTRC iemMemPageTranslateAndCheckAccess(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint32_t cbAccess,
     5400                                               uint32_t fAccess, PRTGCPHYS pGCPhysMem) RT_NOEXCEPT
    53855401{
    53865402    /** @todo Need a different PGM interface here.  We're currently using
     
    54015417#endif
    54025418        *pGCPhysMem = NIL_RTGCPHYS;
    5403         return iemRaisePageFault(pVCpu, GCPtrMem, fAccess, rc);
     5419        return iemRaisePageFault(pVCpu, GCPtrMem, cbAccess, fAccess, rc);
    54045420    }
    54055421
     
    54215437                IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, fAccess, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */);
    54225438#endif
    5423             return iemRaisePageFault(pVCpu, GCPtrMem, fAccess & ~IEM_ACCESS_TYPE_READ, VERR_ACCESS_DENIED);
     5439            return iemRaisePageFault(pVCpu, GCPtrMem, cbAccess, fAccess & ~IEM_ACCESS_TYPE_READ, VERR_ACCESS_DENIED);
    54245440        }
    54255441
     
    54355451                IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, fAccess, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */);
    54365452#endif
    5437             return iemRaisePageFault(pVCpu, GCPtrMem, fAccess, VERR_ACCESS_DENIED);
     5453            return iemRaisePageFault(pVCpu, GCPtrMem, cbAccess, fAccess, VERR_ACCESS_DENIED);
    54385454        }
    54395455
     
    54495465                IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, fAccess, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */);
    54505466#endif
    5451             return iemRaisePageFault(pVCpu, GCPtrMem, fAccess & ~(IEM_ACCESS_TYPE_READ | IEM_ACCESS_TYPE_WRITE),
     5467            return iemRaisePageFault(pVCpu, GCPtrMem, cbAccess, fAccess & ~(IEM_ACCESS_TYPE_READ | IEM_ACCESS_TYPE_WRITE),
    54525468                                     VERR_ACCESS_DENIED);
    54535469        }
     
    57365752iemMemBounceBufferMapCrossPage(PVMCPUCC pVCpu, int iMemMap, void **ppvMem, size_t cbMem, RTGCPTR GCPtrFirst, uint32_t fAccess)
    57375753{
     5754    Assert(cbMem <= GUEST_PAGE_SIZE);
     5755
    57385756    /*
    57395757     * Do the address translations.
    57405758     */
     5759    uint32_t const cbFirstPage  = GUEST_PAGE_SIZE - (uint32_t)(GCPtrFirst & GUEST_PAGE_OFFSET_MASK);
    57415760    RTGCPHYS GCPhysFirst;
    5742     VBOXSTRICTRC rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, GCPtrFirst, fAccess, &GCPhysFirst);
     5761    VBOXSTRICTRC rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, GCPtrFirst, cbFirstPage, fAccess, &GCPhysFirst);
    57435762    if (rcStrict != VINF_SUCCESS)
    57445763        return rcStrict;
    5745 
     5764    Assert((GCPhysFirst & GUEST_PAGE_OFFSET_MASK) == (GCPtrFirst & GUEST_PAGE_OFFSET_MASK));
     5765
     5766    uint32_t const cbSecondPage = (uint32_t)cbMem - cbFirstPage;
    57465767    RTGCPHYS GCPhysSecond;
    57475768    rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, (GCPtrFirst + (cbMem - 1)) & ~(RTGCPTR)GUEST_PAGE_OFFSET_MASK,
    5748                                                  fAccess, &GCPhysSecond);
     5769                                                 cbSecondPage, fAccess, &GCPhysSecond);
    57495770    if (rcStrict != VINF_SUCCESS)
    57505771        return rcStrict;
    5751     GCPhysSecond &= ~(RTGCPHYS)GUEST_PAGE_OFFSET_MASK;
     5772    Assert((GCPhysSecond & GUEST_PAGE_OFFSET_MASK) == 0);
     5773    GCPhysSecond &= ~(RTGCPHYS)GUEST_PAGE_OFFSET_MASK; /** @todo why? */
    57525774
    57535775    PVMCC pVM = pVCpu->CTX_SUFF(pVM);
     
    57575779     * write access.
    57585780     */
    5759     uint8_t        *pbBuf        = &pVCpu->iem.s.aBounceBuffers[iMemMap].ab[0];
    5760     uint32_t const  cbFirstPage  = GUEST_PAGE_SIZE - (GCPhysFirst & GUEST_PAGE_OFFSET_MASK);
    5761     uint32_t const  cbSecondPage = (uint32_t)(cbMem - cbFirstPage);
     5781    uint8_t * const pbBuf = &pVCpu->iem.s.aBounceBuffers[iMemMap].ab[0];
    57625782
    57635783    if (fAccess & (IEM_ACCESS_TYPE_READ | IEM_ACCESS_TYPE_EXEC | IEM_ACCESS_PARTIAL_WRITE))
     
    60746094                IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, fAccess, IEM_SLAT_FAIL_LINEAR_TO_PHYS_ADDR, 0 /* cbInstr */);
    60756095# endif
    6076             return iemRaisePageFault(pVCpu, GCPtrMem, fAccess, rc);
     6096            return iemRaisePageFault(pVCpu, GCPtrMem, cbMem, fAccess, rc);
    60776097        }
    60786098
     
    61036123                IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, fAccess, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */);
    61046124# endif
    6105             return iemRaisePageFault(pVCpu, GCPtrMem, fAccess & ~IEM_ACCESS_TYPE_READ, VERR_ACCESS_DENIED);
     6125            return iemRaisePageFault(pVCpu, GCPtrMem, cbMem, fAccess & ~IEM_ACCESS_TYPE_READ, VERR_ACCESS_DENIED);
    61066126        }
    61076127
     
    61166136                IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, fAccess, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */);
    61176137# endif
    6118             return iemRaisePageFault(pVCpu, GCPtrMem, fAccess, VERR_ACCESS_DENIED);
     6138            return iemRaisePageFault(pVCpu, GCPtrMem, cbMem, fAccess, VERR_ACCESS_DENIED);
    61196139        }
    61206140    }
     
    62076227
    62086228    RTGCPHYS GCPhysFirst;
    6209     rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, GCPtrMem, fAccess, &GCPhysFirst);
     6229    rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, GCPtrMem, cbMem, fAccess, &GCPhysFirst);
    62106230    if (rcStrict != VINF_SUCCESS)
    62116231        return rcStrict;
     
    64016421                IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, fAccess, IEM_SLAT_FAIL_LINEAR_TO_PHYS_ADDR, 0 /* cbInstr */);
    64026422# endif
    6403             iemRaisePageFaultJmp(pVCpu, GCPtrMem, fAccess, rc);
     6423            iemRaisePageFaultJmp(pVCpu, GCPtrMem, cbMem, fAccess, rc);
    64046424        }
    64056425
     
    64456465                IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, fAccess, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */);
    64466466# endif
    6447             iemRaisePageFaultJmp(pVCpu, GCPtrMem, fAccess & ~IEM_ACCESS_TYPE_READ, VERR_ACCESS_DENIED);
     6467            iemRaisePageFaultJmp(pVCpu, GCPtrMem, cbMem, fAccess & ~IEM_ACCESS_TYPE_READ, VERR_ACCESS_DENIED);
    64486468        }
    64496469
     
    64566476                IEM_VMX_VMEXIT_EPT_RET(pVCpu, &Walk, fAccess, IEM_SLAT_FAIL_LINEAR_TO_PAGE_TABLE, 0 /* cbInstr */);
    64576477# endif
    6458             iemRaisePageFaultJmp(pVCpu, GCPtrMem, fAccess, VERR_ACCESS_DENIED);
     6478            iemRaisePageFaultJmp(pVCpu, GCPtrMem, cbMem, fAccess, VERR_ACCESS_DENIED);
    64596479        }
    64606480
     
    65446564
    65456565    RTGCPHYS GCPhysFirst;
    6546     rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, GCPtrMem, fAccess, &GCPhysFirst);
     6566    rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, GCPtrMem, cbMem, fAccess, &GCPhysFirst);
    65476567    if (rcStrict == VINF_SUCCESS) { /*likely*/ }
    65486568    else IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict));
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImpl.cpp

    r97630 r97642  
    76637663
    76647664    RTGCPHYS GCPhysMem;
    7665     rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, GCPtrMem, IEM_ACCESS_TYPE_READ | IEM_ACCESS_WHAT_DATA, &GCPhysMem);
     7665    /** @todo access size   */
     7666    rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, GCPtrMem, 1, IEM_ACCESS_TYPE_READ | IEM_ACCESS_WHAT_DATA, &GCPhysMem);
    76667667    if (rcStrict != VINF_SUCCESS)
    76677668        return rcStrict;
     
    84308431    {
    84318432        RTGCPHYS GCPhysMem;
    8432         rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, GCPtrEff, IEM_ACCESS_TYPE_READ | IEM_ACCESS_WHAT_DATA, &GCPhysMem);
     8433        /** @todo access size.   */
     8434        rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, GCPtrEff, 1, IEM_ACCESS_TYPE_READ | IEM_ACCESS_WHAT_DATA, &GCPhysMem);
    84338435        if (rcStrict == VINF_SUCCESS)
    84348436        {
  • trunk/src/VBox/VMM/VMMAll/IEMAllCImplStrInstr.cpp.h

    r97370 r97642  
    195195        {
    196196            RTGCPHYS GCPhysSrc1Mem;
    197             rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtSrc1Addr, IEM_ACCESS_DATA_R, &GCPhysSrc1Mem);
     197            rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtSrc1Addr, OP_SIZE / 8, IEM_ACCESS_DATA_R, &GCPhysSrc1Mem);
    198198            if (rcStrict != VINF_SUCCESS)
    199199                return rcStrict;
    200200
    201201            RTGCPHYS GCPhysSrc2Mem;
    202             rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtSrc2Addr, IEM_ACCESS_DATA_R, &GCPhysSrc2Mem);
     202            rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtSrc2Addr, OP_SIZE / 8, IEM_ACCESS_DATA_R, &GCPhysSrc2Mem);
    203203            if (rcStrict != VINF_SUCCESS)
    204204                return rcStrict;
     
    361361        {
    362362            RTGCPHYS GCPhysSrc1Mem;
    363             rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtSrc1Addr, IEM_ACCESS_DATA_R, &GCPhysSrc1Mem);
     363            rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtSrc1Addr, OP_SIZE / 8, IEM_ACCESS_DATA_R, &GCPhysSrc1Mem);
    364364            if (rcStrict != VINF_SUCCESS)
    365365                return rcStrict;
    366366
    367367            RTGCPHYS GCPhysSrc2Mem;
    368             rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtSrc2Addr, IEM_ACCESS_DATA_R, &GCPhysSrc2Mem);
     368            rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtSrc2Addr, OP_SIZE / 8, IEM_ACCESS_DATA_R, &GCPhysSrc2Mem);
    369369            if (rcStrict != VINF_SUCCESS)
    370370                return rcStrict;
     
    514514        {
    515515            RTGCPHYS GCPhysMem;
    516             rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtAddr, IEM_ACCESS_DATA_R, &GCPhysMem);
     516            rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtAddr, OP_SIZE / 8, IEM_ACCESS_DATA_R, &GCPhysMem);
    517517            if (rcStrict != VINF_SUCCESS)
    518518                return rcStrict;
     
    642642        {
    643643            RTGCPHYS GCPhysMem;
    644             rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtAddr, IEM_ACCESS_DATA_R, &GCPhysMem);
     644            rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtAddr, OP_SIZE / 8, IEM_ACCESS_DATA_R, &GCPhysMem);
    645645            if (rcStrict != VINF_SUCCESS)
    646646                return rcStrict;
     
    792792        {
    793793            RTGCPHYS GCPhysSrcMem;
    794             rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtSrcAddr, IEM_ACCESS_DATA_R, &GCPhysSrcMem);
     794            rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtSrcAddr, OP_SIZE / 8, IEM_ACCESS_DATA_R, &GCPhysSrcMem);
    795795            if (rcStrict != VINF_SUCCESS)
    796796                return rcStrict;
    797797
    798798            RTGCPHYS GCPhysDstMem;
    799             rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtDstAddr, IEM_ACCESS_DATA_W, &GCPhysDstMem);
     799            rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtDstAddr, OP_SIZE / 8, IEM_ACCESS_DATA_W, &GCPhysDstMem);
    800800            if (rcStrict != VINF_SUCCESS)
    801801                return rcStrict;
     
    937937        {
    938938            RTGCPHYS GCPhysMem;
    939             rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtAddr, IEM_ACCESS_DATA_W, &GCPhysMem);
     939            rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtAddr, OP_SIZE / 8, IEM_ACCESS_DATA_W, &GCPhysMem);
    940940            if (rcStrict != VINF_SUCCESS)
    941941                return rcStrict;
     
    10711071        {
    10721072            RTGCPHYS GCPhysMem;
    1073             rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtAddr, IEM_ACCESS_DATA_R, &GCPhysMem);
     1073            rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtAddr, OP_SIZE / 8, IEM_ACCESS_DATA_R, &GCPhysMem);
    10741074            if (rcStrict != VINF_SUCCESS)
    10751075                return rcStrict;
     
    13531353        {
    13541354            RTGCPHYS GCPhysMem;
    1355             rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtAddr, IEM_ACCESS_DATA_W, &GCPhysMem);
     1355            rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtAddr, OP_SIZE / 8, IEM_ACCESS_DATA_W, &GCPhysMem);
    13561356            if (rcStrict != VINF_SUCCESS)
    13571357                return rcStrict;
     
    16431643        {
    16441644            RTGCPHYS GCPhysMem;
    1645             rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtAddr, IEM_ACCESS_DATA_R, &GCPhysMem);
     1645            rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, uVirtAddr, OP_SIZE / 8, IEM_ACCESS_DATA_R, &GCPhysMem);
    16461646            if (rcStrict != VINF_SUCCESS)
    16471647                return rcStrict;
  • trunk/src/VBox/VMM/include/IEMInternal.h

    r97601 r97642  
    37523752DECL_NO_RETURN(void)    iemRaiseSelectorInvalidAccessJmp(PVMCPUCC pVCpu, uint32_t iSegReg, uint32_t fAccess) IEM_NOEXCEPT_MAY_LONGJMP;
    37533753#endif
    3754 VBOXSTRICTRC            iemRaisePageFault(PVMCPUCC pVCpu, RTGCPTR GCPtrWhere, uint32_t fAccess, int rc) RT_NOEXCEPT;
     3754VBOXSTRICTRC            iemRaisePageFault(PVMCPUCC pVCpu, RTGCPTR GCPtrWhere, uint32_t cbAccess, uint32_t fAccess, int rc) RT_NOEXCEPT;
    37553755#ifdef IEM_WITH_SETJMP
    3756 DECL_NO_RETURN(void)    iemRaisePageFaultJmp(PVMCPUCC pVCpu, RTGCPTR GCPtrWhere, uint32_t fAccess, int rc) IEM_NOEXCEPT_MAY_LONGJMP;
     3756DECL_NO_RETURN(void)    iemRaisePageFaultJmp(PVMCPUCC pVCpu, RTGCPTR GCPtrWhere, uint32_t cbAccess, uint32_t fAccess, int rc) IEM_NOEXCEPT_MAY_LONGJMP;
    37573757#endif
    37583758VBOXSTRICTRC            iemRaiseMathFault(PVMCPUCC pVCpu) RT_NOEXCEPT;
     
    38653865VBOXSTRICTRC    iemMemApplySegment(PVMCPUCC pVCpu, uint32_t fAccess, uint8_t iSegReg, size_t cbMem, PRTGCPTR pGCPtrMem) RT_NOEXCEPT;
    38663866VBOXSTRICTRC    iemMemMarkSelDescAccessed(PVMCPUCC pVCpu, uint16_t uSel) RT_NOEXCEPT;
    3867 VBOXSTRICTRC    iemMemPageTranslateAndCheckAccess(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint32_t fAccess, PRTGCPHYS pGCPhysMem) RT_NOEXCEPT;
     3867VBOXSTRICTRC    iemMemPageTranslateAndCheckAccess(PVMCPUCC pVCpu, RTGCPTR GCPtrMem, uint32_t cbAccess, uint32_t fAccess, PRTGCPHYS pGCPhysMem) RT_NOEXCEPT;
    38683868
    38693869#ifdef IEM_WITH_CODE_TLB
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