VirtualBox

Changeset 97630 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Nov 21, 2022 2:13:56 PM (2 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
154676
Message:

VMM/IEM: Corrected the default operand size for retf; Correected ESP handling with o64 retf to 32-bit or 16-bit code. bugref:9898

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

Legend:

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

    r97620 r97630  
    25462546        else
    25472547            pVCpu->cpum.GstCtx.ss.u64Base    = X86DESC_BASE(&DescSs.Legacy);
    2548         if (!pVCpu->cpum.GstCtx.ss.Attr.n.u1DefBig && pVCpu->iem.s.enmCpuMode != IEMMODE_64BIT)
     2548        if (pVCpu->iem.s.enmCpuMode == IEMMODE_64BIT)
     2549            pVCpu->cpum.GstCtx.rsp           = uNewOuterRsp;
     2550        else if (pVCpu->cpum.GstCtx.ss.Attr.n.u1DefBig)
     2551            pVCpu->cpum.GstCtx.rsp           = (uint32_t)uNewOuterRsp;
     2552        else
    25492553            pVCpu->cpum.GstCtx.sp            = (uint16_t)uNewOuterRsp;
    2550         else
    2551             pVCpu->cpum.GstCtx.rsp           = uNewOuterRsp;
    25522554
    25532555        pVCpu->iem.s.uCpl           = (uNewCs & X86_SEL_RPL);
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h

    r97584 r97630  
    65186518    uint16_t u16Imm; IEM_OPCODE_GET_NEXT_U16(&u16Imm);
    65196519    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6520     IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    65216520    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retf, pVCpu->iem.s.enmEffOpSize, u16Imm);
    65226521}
     
    65306529    IEMOP_MNEMONIC(retf, "retf");
    65316530    IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    6532     IEMOP_HLP_DEFAULT_64BIT_OP_SIZE();
    65336531    return IEM_MC_DEFER_TO_CIMPL_2(iemCImpl_retf, pVCpu->iem.s.enmEffOpSize, 0);
    65346532}
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