Changeset 97197 in vbox for trunk/src/VBox/VMM/VMMAll/EMAll.cpp
- Timestamp:
- Oct 18, 2022 11:09:55 AM (2 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/EMAll.cpp
r97193 r97197 958 958 * 959 959 * @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 */ 965 VMM_INT_DECL(VBOXSTRICTRC) EMInterpretInstruction(PVMCPUCC pVCpu) 966 { 967 LogFlow(("EMInterpretInstruction %RGv\n", (RTGCPTR)CPUMGetGuestRIP(pVCpu))); 968 969 VBOXSTRICTRC rc = IEMExecOneBypassEx(pVCpu, NULL /*pcbWritten*/); 975 970 if (RT_UNLIKELY( rc == VERR_IEM_ASPECT_NOT_IMPLEMENTED 976 971 || rc == VERR_IEM_INSTR_NOT_IMPLEMENTED)) … … 978 973 if (rc != VINF_SUCCESS) 979 974 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 Intel1000 * Architecture System Developers Manual, Vol 3, 5.5) so we don't need1001 * 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_IMPLEMENTED1011 || 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)));1015 975 1016 976 return rc;
Note:
See TracChangeset
for help on using the changeset viewer.