VirtualBox

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


Ignore:
Timestamp:
Aug 5, 2023 1:24:42 AM (18 months ago)
Author:
vboxsync
Message:

VMM/IEM: Don't end TBs on mode change. Corrected BltIn_CheckMode to only check flags part of IEMTB_F_KEY_MASK. bugref:10369

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

Legend:

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

    r100803 r100806  
    136136{
    137137    uint32_t const fExpectedExec = (uint32_t)uParam0;
    138     if (pVCpu->iem.s.fExec == fExpectedExec)
     138    if ((pVCpu->iem.s.fExec & IEMTB_F_KEY_MASK) == (fExpectedExec & IEMTB_F_KEY_MASK))
    139139        return VINF_SUCCESS;
    140     LogFlow(("Mode changed at %04x:%08RX64: %#x -> %#x (xor: %#x)\n", pVCpu->cpum.GstCtx.cs.Sel, pVCpu->cpum.GstCtx.rip,
    141              fExpectedExec, pVCpu->iem.s.fExec, fExpectedExec ^ pVCpu->iem.s.fExec));
     140    LogFlow(("Mode changed at %04x:%08RX64: %#x -> %#x (xor: %#x, xor-key: %#x)\n",
     141             pVCpu->cpum.GstCtx.cs.Sel, pVCpu->cpum.GstCtx.rip, fExpectedExec,
     142             pVCpu->iem.s.fExec, fExpectedExec ^ pVCpu->iem.s.fExec, (fExpectedExec ^ pVCpu->iem.s.fExec) & IEMTB_F_KEY_MASK));
    142143    RT_NOREF(uParam1, uParam2);
    143144    STAM_REL_COUNTER_INC(&pVCpu->iem.s.StatCheckModeBreaks);
  • trunk/src/VBox/VMM/VMMAll/IEMAllThrdPython.py

    r100804 r100806  
    202202    ## @note iemThreadedRecompilerMcDeferToCImpl0 duplicates info found here.
    203203    kdCImplFlags = {
    204         'IEM_CIMPL_F_MODE':                 True,
     204        'IEM_CIMPL_F_MODE':                 False,
    205205        'IEM_CIMPL_F_BRANCH_DIRECT':        False,
    206206        'IEM_CIMPL_F_BRANCH_INDIRECT':      False,
  • trunk/src/VBox/VMM/VMMAll/IEMAllThrdTables.h

    r100803 r100806  
    312312    AssertCompile(IEM_CIMPL_F_BRANCH_FAR         == IEMBRANCHED_F_FAR);
    313313
    314     if (fFlags & (IEM_CIMPL_F_END_TB | IEM_CIMPL_F_MODE | IEM_CIMPL_F_BRANCH_FAR | IEM_CIMPL_F_REP))
     314    if (fFlags & (IEM_CIMPL_F_END_TB | IEM_CIMPL_F_BRANCH_FAR))
    315315        pVCpu->iem.s.fEndTb = true;
    316316    else if (fFlags & IEM_CIMPL_F_BRANCH_ANY)
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