VirtualBox

Ignore:
Timestamp:
Oct 18, 2022 11:09:55 AM (2 years ago)
Author:
vboxsync
Message:

VMM/PGM,IEM,EM: Changed FNPGMRZPHYSPFHANDLER, PGMTrap0eHandler and PGMR0Trap0eHandlerNPMisconfig to take PCPUMCTX instead of PCPUMCTXCORE parameters; dropped PCPUMCTXCORE parameters from IEMExecOneBypassEx, PGMInterpretInstruction and EMInterpretInstruction together with some associated cleanups.

File:
1 edited

Legend:

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

    r97193 r97197  
    958958 *
    959959 * @param   pVCpu       The cross context virtual CPU structure.
    960  * @param   pRegFrame   The register frame.
    961  *                      Updates the EIP if an instruction was executed successfully.
    962  * @param   pvFault     The fault address (CR2).
    963  *
    964  * @remark  Invalid opcode exceptions have a higher priority than GP (see Intel
    965  *          Architecture System Developers Manual, Vol 3, 5.5) so we don't need
    966  *          to worry about e.g. invalid modrm combinations (!)
    967  */
    968 VMM_INT_DECL(VBOXSTRICTRC) EMInterpretInstruction(PVMCPUCC pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault)
    969 {
    970     Assert(pRegFrame == CPUMGetGuestCtxCore(pVCpu));
    971     LogFlow(("EMInterpretInstruction %RGv fault %RGv\n", (RTGCPTR)pRegFrame->rip, pvFault));
    972     NOREF(pvFault);
    973 
    974     VBOXSTRICTRC rc = IEMExecOneBypassEx(pVCpu, pRegFrame, NULL);
     960 *
     961 * @remark  Invalid opcode exceptions have a higher priority than \#GP (see
     962 *          Intel Architecture System Developers Manual, Vol 3, 5.5) so we don't
     963 *          need to worry about e.g. invalid modrm combinations (!)
     964 */
     965VMM_INT_DECL(VBOXSTRICTRC) EMInterpretInstruction(PVMCPUCC pVCpu)
     966{
     967    LogFlow(("EMInterpretInstruction %RGv\n", (RTGCPTR)CPUMGetGuestRIP(pVCpu)));
     968
     969    VBOXSTRICTRC rc = IEMExecOneBypassEx(pVCpu, NULL /*pcbWritten*/);
    975970    if (RT_UNLIKELY(   rc == VERR_IEM_ASPECT_NOT_IMPLEMENTED
    976971                    || rc == VERR_IEM_INSTR_NOT_IMPLEMENTED))
     
    978973    if (rc != VINF_SUCCESS)
    979974        Log(("EMInterpretInstruction: returns %Rrc\n", VBOXSTRICTRC_VAL(rc)));
    980 
    981     return rc;
    982 }
    983 
    984 
    985 /**
    986  * Interprets the current instruction.
    987  *
    988  * @returns VBox status code.
    989  * @retval  VINF_*                  Scheduling instructions.
    990  * @retval  VERR_EM_INTERPRETER     Something we can't cope with.
    991  * @retval  VERR_*                  Fatal errors.
    992  *
    993  * @param   pVCpu       The cross context virtual CPU structure of the calling EMT.
    994  * @param   pRegFrame   The register frame.
    995  *                      Updates the EIP if an instruction was executed successfully.
    996  * @param   pvFault     The fault address (CR2).
    997  * @param   pcbWritten  Size of the write (if applicable).
    998  *
    999  * @remark  Invalid opcode exceptions have a higher priority than GP (see Intel
    1000  *          Architecture System Developers Manual, Vol 3, 5.5) so we don't need
    1001  *          to worry about e.g. invalid modrm combinations (!)
    1002  */
    1003 VMM_INT_DECL(VBOXSTRICTRC) EMInterpretInstructionEx(PVMCPUCC pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbWritten)
    1004 {
    1005     LogFlow(("EMInterpretInstructionEx %RGv fault %RGv\n", (RTGCPTR)pRegFrame->rip, pvFault));
    1006     Assert(pRegFrame == CPUMGetGuestCtxCore(pVCpu));
    1007     NOREF(pvFault);
    1008 
    1009     VBOXSTRICTRC rc = IEMExecOneBypassEx(pVCpu, pRegFrame, pcbWritten);
    1010     if (RT_UNLIKELY(   rc == VERR_IEM_ASPECT_NOT_IMPLEMENTED
    1011                     || rc == VERR_IEM_INSTR_NOT_IMPLEMENTED))
    1012         rc = VERR_EM_INTERPRETER;
    1013     if (rc != VINF_SUCCESS)
    1014         Log(("EMInterpretInstructionEx: returns %Rrc\n", VBOXSTRICTRC_VAL(rc)));
    1015975
    1016976    return rc;
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