- Timestamp:
- Feb 1, 2020 2:26:43 AM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 135953
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HMVMXR0.cpp
r82919 r82949 8079 8079 if (VMX_IDT_VECTORING_INFO_IS_XCPT_PF(u32IntInfo)) 8080 8080 TRPMSetFaultAddress(pVCpu, pVCpu->hm.s.Event.GCPtrFaultAddress); 8081 else if (VMX_IDT_VECTORING_INFO_TYPE(u32IntInfo) == VMX_IDT_VECTORING_INFO_TYPE_SW_INT) 8082 TRPMSetInstrLength(pVCpu, pVCpu->hm.s.Event.cbInstr); 8083 8084 if (VMX_IDT_VECTORING_INFO_TYPE(u32IntInfo) == VMX_IDT_VECTORING_INFO_TYPE_PRIV_SW_XCPT) 8085 TRPMSetTrapDueToIcebp(pVCpu); 8081 else 8082 { 8083 uint8_t const uVectorType = VMX_IDT_VECTORING_INFO_TYPE(u32IntInfo); 8084 switch (uVectorType) 8085 { 8086 case VMX_IDT_VECTORING_INFO_TYPE_PRIV_SW_XCPT: 8087 TRPMSetTrapDueToIcebp(pVCpu); 8088 RT_FALL_THRU(); 8089 case VMX_IDT_VECTORING_INFO_TYPE_SW_INT: 8090 case VMX_IDT_VECTORING_INFO_TYPE_SW_XCPT: 8091 { 8092 AssertMsg( uVectorType == VMX_IDT_VECTORING_INFO_TYPE_SW_INT 8093 || ( uVector == X86_XCPT_BP /* INT3 */ 8094 || uVector == X86_XCPT_OF /* INTO */ 8095 || uVector == X86_XCPT_DB /* INT1 (ICEBP) */), 8096 ("Invalid vector: uVector=%#x uVectorType=%#x\n", uVector, uVectorType)); 8097 TRPMSetInstrLength(pVCpu, pVCpu->hm.s.Event.cbInstr); 8098 break; 8099 } 8100 } 8101 } 8086 8102 8087 8103 /* We're now done converting the pending event. */ … … 8391 8407 } 8392 8408 #ifdef VBOX_STRICT 8393 else 8409 /* 8410 * We check for rcExit here since for errors like VERR_VMX_UNABLE_TO_START_VM (which are 8411 * fatal), we don't care about verifying duplicate injection of events. Errors like 8412 * VERR_EM_INTERPRET are converted to their VINF_* counterparts -prior- to calling this 8413 * function so those should and will be checked below. 8414 */ 8415 else if (RT_SUCCESS(rcExit)) 8394 8416 { 8395 8417 /*
Note:
See TracChangeset
for help on using the changeset viewer.