VirtualBox

Changeset 101802 in vbox


Ignore:
Timestamp:
Nov 5, 2023 3:17:44 AM (15 months ago)
Author:
vboxsync
Message:

VMM/IEM: Improved the tstIEMCheckMc to better ensure all promissed arguments are used in IEM_MC_CALL_XXXX macros. bugref:10371

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

Legend:

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

    r101732 r101802  
    26932693         * XMM128, XMM64.
    26942694         */
    2695         IEM_MC_BEGIN(1, 0, 0, 0);
     2695        IEM_MC_BEGIN(0, 1, 0, 0);
    26962696        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fSse3);
    2697         IEM_MC_ARG(uint64_t,                    uSrc, 0);
     2697        IEM_MC_LOCAL(uint64_t,                  uSrc);
    26982698
    26992699        IEM_MC_MAYBE_RAISE_SSE_RELATED_XCPT();
     
    27122712         * XMM128, [mem64].
    27132713         */
    2714         IEM_MC_BEGIN(1, 1, 0, 0);
     2714        IEM_MC_BEGIN(0, 2, 0, 0);
    27152715        IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    2716         IEM_MC_ARG(uint64_t,                    uSrc, 0);
     2716        IEM_MC_LOCAL(uint64_t,                  uSrc);
    27172717
    27182718        IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
     
    1002210022    if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT)
    1002310023    {
    10024         IEM_MC_BEGIN(1, 0, IEM_MC_F_64BIT, 0);
     10024        IEM_MC_BEGIN(0, 1, IEM_MC_F_64BIT, 0);
    1002510025        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    1002610026        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    10027         IEM_MC_ARG(uint64_t, u64Dst, 0);
     10027        IEM_MC_LOCAL(uint64_t, u64Dst);
    1002810028        IEM_MC_FETCH_SREG_BASE_U64(u64Dst, X86_SREG_FS);
    1002910029        IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm), u64Dst);
     
    1003310033    else
    1003410034    {
    10035         IEM_MC_BEGIN(1, 0, IEM_MC_F_NOT_286_OR_OLDER, 0);
     10035        IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER, 0);
    1003610036        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    1003710037        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    10038         IEM_MC_ARG(uint32_t, u32Dst, 0);
     10038        IEM_MC_LOCAL(uint32_t, u32Dst);
    1003910039        IEM_MC_FETCH_SREG_BASE_U32(u32Dst, X86_SREG_FS);
    1004010040        IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), u32Dst);
     
    1005110051    if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT)
    1005210052    {
    10053         IEM_MC_BEGIN(1, 0, IEM_MC_F_64BIT, 0);
     10053        IEM_MC_BEGIN(0, 1, IEM_MC_F_64BIT, 0);
    1005410054        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    1005510055        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    10056         IEM_MC_ARG(uint64_t, u64Dst, 0);
     10056        IEM_MC_LOCAL(uint64_t, u64Dst);
    1005710057        IEM_MC_FETCH_SREG_BASE_U64(u64Dst, X86_SREG_GS);
    1005810058        IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_RM(pVCpu, bRm), u64Dst);
     
    1006210062    else
    1006310063    {
    10064         IEM_MC_BEGIN(1, 0, IEM_MC_F_NOT_286_OR_OLDER, 0);
     10064        IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER, 0);
    1006510065        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    1006610066        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    10067         IEM_MC_ARG(uint32_t, u32Dst, 0);
     10067        IEM_MC_LOCAL(uint32_t, u32Dst);
    1006810068        IEM_MC_FETCH_SREG_BASE_U32(u32Dst, X86_SREG_GS);
    1006910069        IEM_MC_STORE_GREG_U32(IEM_GET_MODRM_RM(pVCpu, bRm), u32Dst);
     
    1008010080    if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT)
    1008110081    {
    10082         IEM_MC_BEGIN(1, 0, IEM_MC_F_64BIT, 0);
     10082        IEM_MC_BEGIN(0, 1, IEM_MC_F_64BIT, 0);
    1008310083        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    1008410084        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    10085         IEM_MC_ARG(uint64_t, u64Dst, 0);
     10085        IEM_MC_LOCAL(uint64_t, u64Dst);
    1008610086        IEM_MC_FETCH_GREG_U64(u64Dst, IEM_GET_MODRM_RM(pVCpu, bRm));
    1008710087        IEM_MC_MAYBE_RAISE_NON_CANONICAL_ADDR_GP0(u64Dst);
     
    1009210092    else
    1009310093    {
    10094         IEM_MC_BEGIN(1, 0, IEM_MC_F_NOT_286_OR_OLDER, 0);
     10094        IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER, 0);
    1009510095        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    1009610096        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    10097         IEM_MC_ARG(uint32_t, u32Dst, 0);
     10097        IEM_MC_LOCAL(uint32_t, u32Dst);
    1009810098        IEM_MC_FETCH_GREG_U32(u32Dst, IEM_GET_MODRM_RM(pVCpu, bRm));
    1009910099        IEM_MC_STORE_SREG_BASE_U64(X86_SREG_FS, u32Dst);
     
    1011010110    if (pVCpu->iem.s.enmEffOpSize == IEMMODE_64BIT)
    1011110111    {
    10112         IEM_MC_BEGIN(1, 0, IEM_MC_F_64BIT, 0);
     10112        IEM_MC_BEGIN(0, 1, IEM_MC_F_64BIT, 0);
    1011310113        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    1011410114        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    10115         IEM_MC_ARG(uint64_t, u64Dst, 0);
     10115        IEM_MC_LOCAL(uint64_t, u64Dst);
    1011610116        IEM_MC_FETCH_GREG_U64(u64Dst, IEM_GET_MODRM_RM(pVCpu, bRm));
    1011710117        IEM_MC_MAYBE_RAISE_NON_CANONICAL_ADDR_GP0(u64Dst);
     
    1012210122    else
    1012310123    {
    10124         IEM_MC_BEGIN(1, 0, IEM_MC_F_NOT_286_OR_OLDER, 0);
     10124        IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER, 0);
    1012510125        IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX_EX(fFsGsBase);
    1012610126        IEM_MC_MAYBE_RAISE_FSGSBASE_XCPT();
    10127         IEM_MC_ARG(uint32_t, u32Dst, 0);
     10127        IEM_MC_LOCAL(uint32_t, u32Dst);
    1012810128        IEM_MC_FETCH_GREG_U32(u32Dst, IEM_GET_MODRM_RM(pVCpu, bRm));
    1012910129        IEM_MC_STORE_SREG_BASE_U64(X86_SREG_GS, u32Dst);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstVexMap1.cpp.h

    r101387 r101802  
    12171217        if (pVCpu->iem.s.uVexLength == 0)
    12181218        {
    1219             IEM_MC_BEGIN(1, 0, IEM_MC_F_NOT_286_OR_OLDER, 0);
     1219            IEM_MC_BEGIN(0, 1, IEM_MC_F_NOT_286_OR_OLDER, 0);
    12201220            IEMOP_HLP_DONE_VEX_DECODING_NO_VVVV_EX(fAvx);
    1221             IEM_MC_ARG(uint64_t,                    uSrc, 0);
     1221            IEM_MC_LOCAL(uint64_t,                  uSrc);
    12221222
    12231223            IEM_MC_MAYBE_RAISE_AVX_RELATED_XCPT();
     
    12551255        if (pVCpu->iem.s.uVexLength == 0)
    12561256        {
    1257             IEM_MC_BEGIN(1, 1, IEM_MC_F_NOT_286_OR_OLDER, 0);
     1257            IEM_MC_BEGIN(0, 2, IEM_MC_F_NOT_286_OR_OLDER, 0);
    12581258            IEM_MC_LOCAL(RTGCPTR,                   GCPtrEffSrc);
    1259             IEM_MC_ARG(uint64_t,                    uSrc, 0);
     1259            IEM_MC_LOCAL(uint64_t,                  uSrc);
    12601260
    12611261            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffSrc, bRm, 0);
  • trunk/src/VBox/VMM/testcase/tstIEMCheckMc.cpp

    r101707 r101802  
    100100
    101101#define CHK_CALL_ARG(a_Name, a_iArg) \
    102     do { RT_CONCAT3(iArgCheck_,a_iArg,a_Name) = 1; } while (0)
     102    do { RT_CONCAT3(iArgCheck_,a_iArg,a_Name) = 1; RT_NOREF(RT_CONCAT3(iArgCheck_,a_iArg,a_Name)); } while (0)
    103103
    104104
     
    600600#define IEM_MC_ARG(a_Type, a_Name, a_iArg) (void)fMcBegin; \
    601601    RT_CONCAT(iArgCheck_,a_iArg) = 1; NOREF(RT_CONCAT(iArgCheck_,a_iArg)); \
    602     int RT_CONCAT3(iArgCheck_,a_iArg,a_Name); NOREF(RT_CONCAT3(iArgCheck_,a_iArg,a_Name)); \
     602    int RT_CONCAT3(iArgCheck_,a_iArg,a_Name); \
    603603    AssertCompile((a_iArg) < cArgs); \
    604604    a_Type a_Name; \
     
    606606#define IEM_MC_ARG_CONST(a_Type, a_Name, a_Value, a_iArg) (void)fMcBegin; \
    607607    RT_CONCAT(iArgCheck_, a_iArg) = 1; NOREF(RT_CONCAT(iArgCheck_,a_iArg)); \
    608     int RT_CONCAT3(iArgCheck_,a_iArg,a_Name); NOREF(RT_CONCAT3(iArgCheck_,a_iArg,a_Name)); \
     608    int RT_CONCAT3(iArgCheck_,a_iArg,a_Name); \
    609609    AssertCompile((a_iArg) < cArgs); \
    610610    a_Type const a_Name = (a_Value); \
     
    615615#define IEM_MC_ARG_LOCAL_REF(a_Type, a_Name, a_Local, a_iArg) (void)fMcBegin; \
    616616    RT_CONCAT(iArgCheck_, a_iArg) = 1; NOREF(RT_CONCAT(iArgCheck_,a_iArg)); \
    617     int RT_CONCAT3(iArgCheck_,a_iArg,a_Name); NOREF(RT_CONCAT3(iArgCheck_,a_iArg,a_Name)); \
     617    int RT_CONCAT3(iArgCheck_,a_iArg,a_Name); \
    618618    AssertCompile((a_iArg) < cArgs); \
    619619    a_Type const a_Name = &(a_Local); \
     
    621621#define IEM_MC_ARG_LOCAL_EFLAGS(a_pName, a_Name, a_iArg) (void)fMcBegin; \
    622622    RT_CONCAT(iArgCheck_, a_iArg) = 1; NOREF(RT_CONCAT(iArgCheck_,a_iArg)); \
    623     int RT_CONCAT3(iArgCheck_,a_iArg,a_pName); NOREF(RT_CONCAT3(iArgCheck_,a_iArg,a_pName)); \
     623    int RT_CONCAT3(iArgCheck_,a_iArg,a_pName); \
    624624    AssertCompile((a_iArg) < cArgs); \
    625625    uint32_t a_Name; \
     
    999999#define IEM_MC_CALL_SSE_AIMPL_3(a_pfnAImpl, a0, a1, a2) \
    10001000    do { (void)fSseHost; (void)fSseWrite; CHK_CALL_ARG(a0, 0); CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); (void)fMcBegin; } while (0)
    1001 #define IEM_MC_IMPLICIT_AVX_AIMPL_ARGS() do { IEM_MC_ARG_CONST(PX86XSAVEAREA, pXState, &pVCpu->cpum.GstCtx.XState, 0); (void)fMcBegin; } while (0)
     1001#define IEM_MC_IMPLICIT_AVX_AIMPL_ARGS() IEM_MC_ARG_CONST(PX86XSAVEAREA, pXState, &pVCpu->cpum.GstCtx.XState, 0); do { (void)fMcBegin; } while (0)
    10021002#define IEM_MC_CALL_AVX_AIMPL_2(a_pfnAImpl, a1, a2) \
    1003     do { (void)fAvxHost; (void)fAvxWrite; CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); (void)fMcBegin; } while (0)
     1003    do { (void)fAvxHost; (void)fAvxWrite; CHK_CALL_ARG(pXState, 0); CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); (void)fMcBegin; } while (0)
    10041004#define IEM_MC_CALL_AVX_AIMPL_3(a_pfnAImpl, a1, a2, a3) \
    1005     do { (void)fAvxHost; (void)fAvxWrite; CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); CHK_CALL_ARG(a3, 3); (void)fMcBegin; } while (0)
     1005    do { (void)fAvxHost; (void)fAvxWrite; CHK_CALL_ARG(pXState, 0); CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); CHK_CALL_ARG(a3, 3); (void)fMcBegin; } while (0)
    10061006#define IEM_MC_CALL_AVX_AIMPL_4(a_pfnAImpl, a1, a2, a3, a4) \
    1007     do { (void)fAvxHost; (void)fAvxWrite; CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); CHK_CALL_ARG(a3, 3); CHK_CALL_ARG(a4, 4); (void)fMcBegin; } while (0)
     1007    do { (void)fAvxHost; (void)fAvxWrite; CHK_CALL_ARG(pXState, 0); CHK_CALL_ARG(a1, 1); CHK_CALL_ARG(a2, 2); CHK_CALL_ARG(a3, 3); CHK_CALL_ARG(a4, 4); (void)fMcBegin; } while (0)
    10081008
    10091009#define IEM_MC_IF_EFL_BIT_SET(a_fBit)                                   (void)fMcBegin; if (g_fRandom) {
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