Changeset 79638 in vbox
- Timestamp:
- Jul 9, 2019 9:09:02 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAllCImplVmxInstr.cpp.h
r79600 r79638 6999 6999 Assert(VMX_ENTRY_INT_INFO_IS_VALID(uEntryIntInfo)); 7000 7000 7001 uint8_t const uType = VMX_ENTRY_INT_INFO_TYPE(uEntryIntInfo); 7002 uint8_t const uVector = VMX_ENTRY_INT_INFO_VECTOR(uEntryIntInfo); 7003 bool const fErrCodeValid = VMX_ENTRY_INT_INFO_IS_ERROR_CODE_VALID(uEntryIntInfo); 7004 7005 TRPMEVENT enmTrapType; 7006 switch (uType) 7007 { 7008 case VMX_ENTRY_INT_INFO_TYPE_EXT_INT: 7009 enmTrapType = TRPM_HARDWARE_INT; 7010 break; 7011 7012 case VMX_ENTRY_INT_INFO_TYPE_NMI: 7013 case VMX_ENTRY_INT_INFO_TYPE_HW_XCPT: 7014 enmTrapType = TRPM_TRAP; 7015 break; 7016 7017 case VMX_ENTRY_INT_INFO_TYPE_SW_INT: 7018 enmTrapType = TRPM_SOFTWARE_INT; 7019 break; 7020 7021 case VMX_ENTRY_INT_INFO_TYPE_SW_XCPT: /* #BP and #OF */ 7022 Assert(uVector == X86_XCPT_BP || uVector == X86_XCPT_OF); 7023 enmTrapType = TRPM_SOFTWARE_INT; 7024 break; 7025 7026 case VMX_ENTRY_INT_INFO_TYPE_PRIV_SW_XCPT: /* #DB (INT1/ICEBP). */ 7027 Assert(uVector == X86_XCPT_DB); 7028 enmTrapType = TRPM_SOFTWARE_INT; 7029 break; 7030 7031 default: 7032 /* Shouldn't really happen. */ 7033 AssertMsgFailedReturn(("Invalid trap type %#x\n", uType), VERR_VMX_IPE_4); 7034 break; 7035 } 7036 7037 int rc = TRPMAssertTrap(pVCpu, uVector, enmTrapType); 7001 uint8_t const uVector = VMX_ENTRY_INT_INFO_VECTOR(uEntryIntInfo); 7002 TRPMEVENT const enmTrpmEvent = HMVmxEventTypeToTrpmEventType(uEntryIntInfo); 7003 7004 int rc = TRPMAssertTrap(pVCpu, uVector, enmTrpmEvent); 7038 7005 if (RT_SUCCESS(rc)) 7039 7006 { 7040 if ( fErrCodeValid)7007 if (VMX_ENTRY_INT_INFO_IS_ERROR_CODE_VALID(uEntryIntInfo)) 7041 7008 TRPMSetErrorCode(pVCpu, uErrCode); 7042 7009 7043 if ( enmTrapType == TRPM_TRAP 7044 && uVector == X86_XCPT_PF) 7010 if (VMX_ENTRY_INT_INFO_IS_XCPT_PF(uEntryIntInfo)) 7045 7011 TRPMSetFaultAddress(pVCpu, GCPtrFaultAddress); 7046 else if ( enmTrapType == TRPM_SOFTWARE_INT)7012 else if (VMX_ENTRY_INT_INFO_TYPE(uEntryIntInfo) == VMX_ENTRY_INT_INFO_TYPE_SW_INT) 7047 7013 TRPMSetInstrLength(pVCpu, cbInstr); 7048 7014 }
Note:
See TracChangeset
for help on using the changeset viewer.

