Changeset 97005 in vbox
- Timestamp:
- Oct 5, 2022 2:37:41 PM (2 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/hm_vmx.h
r96711 r97005 3844 3844 typedef const VMXVEXITINFO *PCVMXVEXITINFO; 3845 3845 AssertCompileMemberAlignment(VMXVEXITINFO, u64Qual, 8); 3846 3847 /** Initialize a VMXVEXITINFO structure from exit reason, exit qualifier, 3848 * instruction info and length. */ 3849 #define VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO(a_uReason, a_uQualifier, a_uInstrInfo, a_cbInstr) \ 3850 { (a_uReason), (a_cbInstr), { a_uInstrInfo }, VMXINSTRID_NONE, (a_uQualifier), 0, 0, 0, 0 } 3851 3852 /** Initialize a VMXVEXITINFO structure from exit reason, exit qualifier, 3853 * instruction info and length all copied from a VMXTRANSIENT structure. */ 3854 #define VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_FROM_TRANSIENT(a_pVmxTransient) \ 3855 VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO((a_pVmxTransient)->uExitReason, \ 3856 (a_pVmxTransient)->uExitQual, \ 3857 (a_pVmxTransient)->ExitInstrInfo.u, \ 3858 (a_pVmxTransient)->cbExitInstr) 3859 3860 /** Initialize a VMXVEXITINFO structure from exit reason, exit qualifier, 3861 * instruction length (no info). */ 3862 #define VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN(a_uReason, a_uQualifier, a_cbInstr) \ 3863 { (a_uReason), (a_cbInstr), { 0 }, VMXINSTRID_NONE, (a_uQualifier), 0, 0, 0, 0 } 3864 3865 /** Initialize a VMXVEXITINFO structure from exit reason, exit qualifier and 3866 * instruction length (no info) all copied from a VMXTRANSIENT structure. */ 3867 #define VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN_FROM_TRANSIENT(a_pVmxTransient) \ 3868 VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN((a_pVmxTransient)->uExitReason, \ 3869 (a_pVmxTransient)->uExitQual, \ 3870 (a_pVmxTransient)->cbExitInstr) 3871 3872 /** Initialize a VMXVEXITINFO structure from exit reason, exit qualifier, 3873 * instruction info, instruction length and guest linear address. */ 3874 #define VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_AND_LIN_ADDR(a_uReason, a_uQualifier, a_uInstrInfo, \ 3875 a_cbInstr, a_uGstLinAddr) \ 3876 { (a_uReason), (a_cbInstr), { (a_uInstrInfo) }, VMXINSTRID_NONE, (a_uQualifier), (a_uGstLinAddr), 0, 0, 0 } 3877 3878 /** Initialize a VMXVEXITINFO structure from exit reason, exit qualifier, 3879 * instruction info, instruction length and guest linear address all copied 3880 * from a VMXTRANSIENT structure. */ 3881 #define VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_AND_LIN_ADDR_FROM_TRANSIENT(a_pVmxTransient) \ 3882 VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_AND_LIN_ADDR((a_pVmxTransient)->uExitReason, \ 3883 (a_pVmxTransient)->uExitQual, \ 3884 (a_pVmxTransient)->ExitInstrInfo.u, \ 3885 (a_pVmxTransient)->cbExitInstr, \ 3886 (a_pVmxTransient)->uGuestLinearAddr) 3887 3888 /** Initialize a VMXVEXITINFO structure from exit reason and pending debug 3889 * exceptions. */ 3890 #define VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_DBG_XCPTS(a_uReason, a_uPendingDbgXcpts) \ 3891 { (a_uReason), 0, { 0 }, VMXINSTRID_NONE, 0, 0, 0, (a_uPendingDbgXcpts), 0 } 3892 3893 /** Initialize a VMXVEXITINFO structure from exit reason and pending debug 3894 * exceptions both copied from a VMXTRANSIENT structure. */ 3895 #define VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_DBG_XCPTS_FROM_TRANSIENT(a_pVmxTransient) \ 3896 VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_DBG_XCPTS((a_pVmxTransient)->uExitReason, (a_pVmxTransient)->uGuestPendingDbgXcpts) 3897 3898 3899 /** Initialize a VMXVEXITINFO structure from exit reason, exit qualifier, 3900 * instruction length, guest linear address and guest physical address. */ 3901 #define VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN_AND_GST_ADDRESSES(a_uReason, a_uQualifier, a_cbInstr, \ 3902 a_uGstLinAddr, a_uGstPhysAddr) \ 3903 { (a_uReason), (a_cbInstr), { 0 }, VMXINSTRID_NONE, (a_uQualifier), (a_uGstLinAddr), (a_uGstPhysAddr), 0, 0 } 3904 3846 3905 3847 3906 /** -
trunk/src/VBox/VMM/VMMAll/VMXAllTemplate.cpp.h
r97004 r97005 8972 8972 } 8973 8973 8974 8975 8974 #ifdef VBOX_WITH_NESTED_HWVIRT_VMX 8975 8976 8976 /** 8977 8977 * VM-exit handler for VMCLEAR (VMX_EXIT_VMCLEAR). Unconditional VM-exit. … … 8991 8991 HMVMX_CHECK_EXIT_DUE_TO_VMX_INSTR(pVCpu, pVmxTransient->uExitReason); 8992 8992 8993 VMXVEXITINFO ExitInfo; 8994 RT_ZERO(ExitInfo); 8995 ExitInfo.uReason = pVmxTransient->uExitReason; 8996 ExitInfo.u64Qual = pVmxTransient->uExitQual; 8997 ExitInfo.InstrInfo.u = pVmxTransient->ExitInstrInfo.u; 8998 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 8993 VMXVEXITINFO ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_FROM_TRANSIENT(pVmxTransient); 8999 8994 HMVMX_DECODE_MEM_OPERAND(pVCpu, ExitInfo.InstrInfo.u, ExitInfo.u64Qual, VMXMEMACCESS_READ, &ExitInfo.GCPtrEffAddr); 9000 8995 … … 9057 9052 HMVMX_CHECK_EXIT_DUE_TO_VMX_INSTR(pVCpu, pVmxTransient->uExitReason); 9058 9053 9059 VMXVEXITINFO ExitInfo; 9060 RT_ZERO(ExitInfo); 9061 ExitInfo.uReason = pVmxTransient->uExitReason; 9062 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9063 ExitInfo.InstrInfo.u = pVmxTransient->ExitInstrInfo.u; 9064 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9054 VMXVEXITINFO ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_FROM_TRANSIENT(pVmxTransient); 9065 9055 HMVMX_DECODE_MEM_OPERAND(pVCpu, ExitInfo.InstrInfo.u, ExitInfo.u64Qual, VMXMEMACCESS_READ, &ExitInfo.GCPtrEffAddr); 9066 9056 … … 9094 9084 HMVMX_CHECK_EXIT_DUE_TO_VMX_INSTR(pVCpu, pVmxTransient->uExitReason); 9095 9085 9096 VMXVEXITINFO ExitInfo; 9097 RT_ZERO(ExitInfo); 9098 ExitInfo.uReason = pVmxTransient->uExitReason; 9099 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9100 ExitInfo.InstrInfo.u = pVmxTransient->ExitInstrInfo.u; 9101 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9086 VMXVEXITINFO ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_FROM_TRANSIENT(pVmxTransient); 9102 9087 HMVMX_DECODE_MEM_OPERAND(pVCpu, ExitInfo.InstrInfo.u, ExitInfo.u64Qual, VMXMEMACCESS_WRITE, &ExitInfo.GCPtrEffAddr); 9103 9088 … … 9136 9121 HMVMX_CHECK_EXIT_DUE_TO_VMX_INSTR(pVCpu, pVmxTransient->uExitReason); 9137 9122 9138 VMXVEXITINFO ExitInfo; 9139 RT_ZERO(ExitInfo); 9140 ExitInfo.uReason = pVmxTransient->uExitReason; 9141 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9142 ExitInfo.InstrInfo.u = pVmxTransient->ExitInstrInfo.u; 9143 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9123 VMXVEXITINFO ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_FROM_TRANSIENT(pVmxTransient); 9144 9124 if (!ExitInfo.InstrInfo.VmreadVmwrite.fIsRegOperand) 9145 9125 HMVMX_DECODE_MEM_OPERAND(pVCpu, ExitInfo.InstrInfo.u, ExitInfo.u64Qual, VMXMEMACCESS_WRITE, &ExitInfo.GCPtrEffAddr); … … 9229 9209 HMVMX_CHECK_EXIT_DUE_TO_VMX_INSTR(pVCpu, pVmxTransient->uExitReason); 9230 9210 9231 VMXVEXITINFO ExitInfo; 9232 RT_ZERO(ExitInfo); 9233 ExitInfo.uReason = pVmxTransient->uExitReason; 9234 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9235 ExitInfo.InstrInfo.u = pVmxTransient->ExitInstrInfo.u; 9236 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9211 VMXVEXITINFO ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_FROM_TRANSIENT(pVmxTransient); 9237 9212 if (!ExitInfo.InstrInfo.VmreadVmwrite.fIsRegOperand) 9238 9213 HMVMX_DECODE_MEM_OPERAND(pVCpu, ExitInfo.InstrInfo.u, ExitInfo.u64Qual, VMXMEMACCESS_READ, &ExitInfo.GCPtrEffAddr); … … 9294 9269 HMVMX_CHECK_EXIT_DUE_TO_VMX_INSTR(pVCpu, pVmxTransient->uExitReason); 9295 9270 9296 VMXVEXITINFO ExitInfo; 9297 RT_ZERO(ExitInfo); 9298 ExitInfo.uReason = pVmxTransient->uExitReason; 9299 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9300 ExitInfo.InstrInfo.u = pVmxTransient->ExitInstrInfo.u; 9301 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9271 VMXVEXITINFO ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_FROM_TRANSIENT(pVmxTransient); 9302 9272 HMVMX_DECODE_MEM_OPERAND(pVCpu, ExitInfo.InstrInfo.u, ExitInfo.u64Qual, VMXMEMACCESS_READ, &ExitInfo.GCPtrEffAddr); 9303 9273 … … 9330 9300 HMVMX_CHECK_EXIT_DUE_TO_VMX_INSTR(pVCpu, pVmxTransient->uExitReason); 9331 9301 9332 VMXVEXITINFO ExitInfo; 9333 RT_ZERO(ExitInfo); 9334 ExitInfo.uReason = pVmxTransient->uExitReason; 9335 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9336 ExitInfo.InstrInfo.u = pVmxTransient->ExitInstrInfo.u; 9337 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9302 VMXVEXITINFO ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_FROM_TRANSIENT(pVmxTransient); 9338 9303 HMVMX_DECODE_MEM_OPERAND(pVCpu, ExitInfo.InstrInfo.u, ExitInfo.u64Qual, VMXMEMACCESS_READ, &ExitInfo.GCPtrEffAddr); 9339 9304 … … 9367 9332 HMVMX_CHECK_EXIT_DUE_TO_VMX_INSTR(pVCpu, pVmxTransient->uExitReason); 9368 9333 9369 VMXVEXITINFO ExitInfo; 9370 RT_ZERO(ExitInfo); 9371 ExitInfo.uReason = pVmxTransient->uExitReason; 9372 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9373 ExitInfo.InstrInfo.u = pVmxTransient->ExitInstrInfo.u; 9374 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9334 VMXVEXITINFO ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_FROM_TRANSIENT(pVmxTransient); 9375 9335 HMVMX_DECODE_MEM_OPERAND(pVCpu, ExitInfo.InstrInfo.u, ExitInfo.u64Qual, VMXMEMACCESS_READ, &ExitInfo.GCPtrEffAddr); 9376 9336 … … 9414 9374 switch (uExitIntType) 9415 9375 { 9416 # ifndef IN_NEM_DARWIN9376 # ifndef IN_NEM_DARWIN 9417 9377 /* 9418 9378 * Physical NMIs: … … 9421 9381 case VMX_EXIT_INT_INFO_TYPE_NMI: 9422 9382 return hmR0VmxExitHostNmi(pVCpu, pVmxTransient->pVmcsInfo); 9423 # endif9383 # endif 9424 9384 9425 9385 /* … … 9452 9412 * software exception causes a VM-exit, that too provides the VM-exit instruction length. 9453 9413 */ 9454 VMXVEXITINFO ExitInfo; 9455 RT_ZERO(ExitInfo); 9456 ExitInfo.uReason = pVmxTransient->uExitReason; 9457 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9458 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9414 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN_FROM_TRANSIENT(pVmxTransient); 9459 9415 9460 9416 VMXVEXITEVENTINFO ExitEventInfo; … … 9554 9510 vmxHCReadIdtVectoringErrorCodeVmcs(pVCpu, pVmxTransient); 9555 9511 9556 VMXVEXITINFO ExitInfo; 9557 RT_ZERO(ExitInfo); 9558 ExitInfo.uReason = pVmxTransient->uExitReason; 9559 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9560 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9512 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN_FROM_TRANSIENT(pVmxTransient); 9561 9513 9562 9514 VMXVEXITEVENTINFO ExitEventInfo; … … 9596 9548 vmxHCReadExitQualVmcs(pVCpu, pVmxTransient); 9597 9549 9598 VMXVEXITINFO ExitInfo; 9599 RT_ZERO(ExitInfo); 9600 ExitInfo.uReason = pVmxTransient->uExitReason; 9601 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9602 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9550 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN_FROM_TRANSIENT(pVmxTransient); 9603 9551 return IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 9604 9552 } … … 9649 9597 vmxHCReadExitQualVmcs(pVCpu, pVmxTransient); 9650 9598 9651 VMXVEXITINFO ExitInfo; 9652 RT_ZERO(ExitInfo); 9653 ExitInfo.uReason = pVmxTransient->uExitReason; 9654 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9655 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9656 ExitInfo.InstrInfo = pVmxTransient->ExitInstrInfo; 9599 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_FROM_TRANSIENT(pVmxTransient); 9657 9600 return IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 9658 9601 } … … 9725 9668 if (fIntercept) 9726 9669 { 9727 VMXVEXITINFO ExitInfo; 9728 RT_ZERO(ExitInfo); 9729 ExitInfo.uReason = pVmxTransient->uExitReason; 9730 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9731 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9670 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN_FROM_TRANSIENT(pVmxTransient); 9732 9671 rcStrict = IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 9733 9672 } … … 9758 9697 if (CPUMIsGuestVmxProcCtlsSet(&pVCpu->cpum.GstCtx, uIntercept)) 9759 9698 { 9760 VMXVEXITINFO ExitInfo; 9761 RT_ZERO(ExitInfo); 9762 ExitInfo.uReason = pVmxTransient->uExitReason; 9763 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9764 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9699 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN_FROM_TRANSIENT(pVmxTransient); 9765 9700 rcStrict = IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 9766 9701 } … … 9787 9722 && (uReadShadow & X86_CR0_TS)) 9788 9723 { 9789 VMXVEXITINFO ExitInfo; 9790 RT_ZERO(ExitInfo); 9791 ExitInfo.uReason = pVmxTransient->uExitReason; 9792 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9793 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9724 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN_FROM_TRANSIENT(pVmxTransient); 9794 9725 rcStrict = IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 9795 9726 } … … 9814 9745 if (CPUMIsGuestVmxLmswInterceptSet(&pVCpu->cpum.GstCtx, uNewMsw)) 9815 9746 { 9816 VMXVEXITINFO ExitInfo; 9817 RT_ZERO(ExitInfo); 9818 ExitInfo.uReason = pVmxTransient->uExitReason; 9819 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9747 VMXVEXITINFO ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN_FROM_TRANSIENT(pVmxTransient); 9820 9748 ExitInfo.u64GuestLinearAddr = GCPtrEffDst; 9821 ExitInfo.u64Qual = pVmxTransient->uExitQual;9822 9749 rcStrict = IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 9823 9750 } … … 9856 9783 vmxHCReadExitInstrLenVmcs(pVCpu, pVmxTransient); 9857 9784 9858 VMXVEXITINFO ExitInfo; 9859 RT_ZERO(ExitInfo); 9860 ExitInfo.uReason = pVmxTransient->uExitReason; 9861 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9862 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9785 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN_FROM_TRANSIENT(pVmxTransient); 9863 9786 return IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 9864 9787 } … … 9913 9836 } 9914 9837 9915 VMXVEXITINFO ExitInfo; 9916 RT_ZERO(ExitInfo); 9917 ExitInfo.uReason = pVmxTransient->uExitReason; 9918 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 9919 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9920 ExitInfo.InstrInfo = pVmxTransient->ExitInstrInfo; 9921 ExitInfo.u64GuestLinearAddr = pVmxTransient->uGuestLinearAddr; 9838 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_AND_LIN_ADDR_FROM_TRANSIENT(pVmxTransient); 9922 9839 return IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 9923 9840 } … … 9996 9913 /** @todo NSTVMX: Should consider debugging nested-guests using VM debugger. */ 9997 9914 vmxHCReadGuestPendingDbgXctps(pVCpu, pVmxTransient); 9998 VMXVEXITINFO ExitInfo; 9999 RT_ZERO(ExitInfo); 10000 ExitInfo.uReason = pVmxTransient->uExitReason; 10001 ExitInfo.u64GuestPendingDbgXcpts = pVmxTransient->uGuestPendingDbgXcpts; 9915 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_DBG_XCPTS_FROM_TRANSIENT(pVmxTransient); 10002 9916 return IEMExecVmxVmexitTrapLike(pVCpu, &ExitInfo); 10003 9917 } … … 10053 9967 { 10054 9968 vmxHCReadGuestPendingDbgXctps(pVCpu, pVmxTransient); 10055 VMXVEXITINFO ExitInfo; 10056 RT_ZERO(ExitInfo); 10057 ExitInfo.uReason = pVmxTransient->uExitReason; 10058 ExitInfo.u64GuestPendingDbgXcpts = pVmxTransient->uGuestPendingDbgXcpts; 9969 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_DBG_XCPTS_FROM_TRANSIENT(pVmxTransient); 10059 9970 return IEMExecVmxVmexitTrapLike(pVCpu, &ExitInfo); 10060 9971 } … … 10081 9992 VMX_EXIT_QUAL_APIC_ACCESS_TYPE(pVmxTransient->uExitQual))); 10082 9993 10083 VMXVEXITINFO ExitInfo; 10084 RT_ZERO(ExitInfo); 10085 ExitInfo.uReason = pVmxTransient->uExitReason; 10086 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 10087 ExitInfo.u64Qual = pVmxTransient->uExitQual; 9994 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN_FROM_TRANSIENT(pVmxTransient); 10088 9995 10089 9996 VMXVEXITEVENTINFO ExitEventInfo; … … 10170 10077 vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient); 10171 10078 10172 VMXVEXITINFO ExitInfo; 10173 RT_ZERO(ExitInfo); 10174 ExitInfo.uReason = pVmxTransient->uExitReason; 10175 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 10176 ExitInfo.u64Qual = pVmxTransient->uExitQual; 10177 ExitInfo.InstrInfo = pVmxTransient->ExitInstrInfo; 10079 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_FROM_TRANSIENT(pVmxTransient); 10178 10080 return IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 10179 10081 } … … 10280 10182 vmxHCReadExitInstrInfoVmcs(pVCpu, pVmxTransient); 10281 10183 10282 VMXVEXITINFO ExitInfo; 10283 RT_ZERO(ExitInfo); 10284 ExitInfo.uReason = pVmxTransient->uExitReason; 10285 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 10286 ExitInfo.u64Qual = pVmxTransient->uExitQual; 10287 ExitInfo.InstrInfo = pVmxTransient->ExitInstrInfo; 10184 VMXVEXITINFO const ExitInfo = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_INFO_FROM_TRANSIENT(pVmxTransient); 10288 10185 return IEMExecVmxVmexitInstrWithInfo(pVCpu, &ExitInfo); 10289 10186 } … … 10404 10301 if (Walk.fFailed & PGM_WALKFAIL_EPT_VIOLATION) 10405 10302 { 10406 VMXVEXITINFO ExitInfo; 10407 RT_ZERO(ExitInfo); 10408 ExitInfo.uReason = VMX_EXIT_EPT_VIOLATION; 10409 ExitInfo.cbInstr = pVmxTransient->cbExitInstr; 10410 ExitInfo.u64Qual = pVmxTransient->uExitQual; 10411 ExitInfo.u64GuestLinearAddr = pVmxTransient->uGuestLinearAddr; 10412 ExitInfo.u64GuestPhysAddr = pVmxTransient->uGuestPhysicalAddr; 10303 VMXVEXITINFO const ExitInfo 10304 = VMXVEXITINFO_INIT_WITH_QUALIFIER_AND_INSTR_LEN_AND_GST_ADDRESSES(VMX_EXIT_EPT_VIOLATION, 10305 pVmxTransient->uExitQual, 10306 pVmxTransient->cbExitInstr, 10307 pVmxTransient->uGuestLinearAddr, 10308 pVmxTransient->uGuestPhysicalAddr); 10413 10309 return IEMExecVmxVmexitEptViolation(pVCpu, &ExitInfo, &ExitEventInfo); 10414 10310 }
Note:
See TracChangeset
for help on using the changeset viewer.