VirtualBox

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


Ignore:
Timestamp:
Aug 3, 2023 9:03:30 AM (18 months ago)
Author:
vboxsync
Message:

IEM: 32-bit SYSENTER/SYSEXIT always transitions to 32-bit protected mode, not just 32-bit mode. Plus logging fixes.

File:
1 edited

Legend:

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

    r100624 r100783  
    45364536    if ((uNewCs & X86_SEL_MASK_OFF_RPL) == 0)
    45374537    {
    4538         Log(("sysenter: SYSENTER_CS = %#x -> #GP(0)\n", uNewCs));
     4538        LogRel(("sysenter: SYSENTER_CS = %#x -> #GP(0)\n", uNewCs));
    45394539        return iemRaiseGeneralProtectionFault0(pVCpu);
    45404540    }
     
    45604560    if (fIsLongMode)
    45614561    {
    4562         Log(("sysenter: %04x:%016RX64 [efl=%#llx] -> %04x:%016RX64\n", pVCpu->cpum.GstCtx.cs, pVCpu->cpum.GstCtx.rip,
     4562        Log(("sysenter: %04x:%016RX64 [efl=%#llx] -> %04x:%016RX64\n", pVCpu->cpum.GstCtx.cs.Sel, pVCpu->cpum.GstCtx.rip,
    45634563             pVCpu->cpum.GstCtx.rflags.u, uNewCs & X86_SEL_MASK_OFF_RPL, pVCpu->cpum.GstCtx.SysEnter.eip));
    45644564        pVCpu->cpum.GstCtx.rip          = pVCpu->cpum.GstCtx.SysEnter.eip;
     
    45714571    else
    45724572    {
    4573         Log(("sysenter: %04x:%08RX32 [efl=%#llx] -> %04x:%08RX32\n", pVCpu->cpum.GstCtx.cs, (uint32_t)pVCpu->cpum.GstCtx.rip,
     4573        Log(("sysenter: %04x:%08RX32 [efl=%#llx] -> %04x:%08RX32\n", pVCpu->cpum.GstCtx.cs.Sel, (uint32_t)pVCpu->cpum.GstCtx.rip,
    45744574             pVCpu->cpum.GstCtx.rflags.u, uNewCs & X86_SEL_MASK_OFF_RPL, (uint32_t)pVCpu->cpum.GstCtx.SysEnter.eip));
    45754575        pVCpu->cpum.GstCtx.rip          = (uint32_t)pVCpu->cpum.GstCtx.SysEnter.eip;
     
    45784578                                        | X86DESCATTR_LIMIT_HIGH | X86_SEL_TYPE_ER_ACC;
    45794579        pVCpu->iem.s.fExec = (pVCpu->iem.s.fExec & ~(IEM_F_MODE_MASK | IEM_F_X86_CPL_MASK))
    4580                            | IEM_F_MODE_X86_32BIT
     4580                           | IEM_F_MODE_X86_32BIT_PROT
    45814581                           | iemCalc32BitFlatIndicatorEsDs(pVCpu);
    45824582    }
     
    46574657    if (enmEffOpSize == IEMMODE_64BIT)
    46584658    {
    4659         Log(("sysexit: %04x:%016RX64 [efl=%#llx] -> %04x:%016RX64\n", pVCpu->cpum.GstCtx.cs, pVCpu->cpum.GstCtx.rip,
     4659        Log(("sysexit: %04x:%016RX64 [efl=%#llx] -> %04x:%016RX64\n", pVCpu->cpum.GstCtx.cs.Sel, pVCpu->cpum.GstCtx.rip,
    46604660             pVCpu->cpum.GstCtx.rflags.u, (uNewCs | 3) + 32, pVCpu->cpum.GstCtx.rcx));
    46614661        pVCpu->cpum.GstCtx.rip          = pVCpu->cpum.GstCtx.rdx;
     
    46744674    else
    46754675    {
    4676         Log(("sysexit: %04x:%08RX64 [efl=%#llx] -> %04x:%08RX32\n", pVCpu->cpum.GstCtx.cs, pVCpu->cpum.GstCtx.rip,
     4676        Log(("sysexit: %04x:%08RX64 [efl=%#llx] -> %04x:%08RX32\n", pVCpu->cpum.GstCtx.cs.Sel, pVCpu->cpum.GstCtx.rip,
    46774677             pVCpu->cpum.GstCtx.rflags.u, (uNewCs | 3) + 16, (uint32_t)pVCpu->cpum.GstCtx.edx));
    46784678        pVCpu->cpum.GstCtx.rip          = pVCpu->cpum.GstCtx.edx;
     
    46874687        pVCpu->iem.s.fExec = (pVCpu->iem.s.fExec & ~(IEM_F_MODE_MASK | IEM_F_X86_CPL_MASK))
    46884688                           | (3 << IEM_F_X86_CPL_SHIFT)
    4689                            | IEM_F_MODE_X86_32BIT
     4689                           | IEM_F_MODE_X86_32BIT_PROT
    46904690                           | iemCalc32BitFlatIndicatorEsDs(pVCpu);
    46914691    }
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