Changeset 76993 in vbox for trunk/src/VBox/VMM/VMMAll/HMVMXAll.cpp
- Timestamp:
- Jan 25, 2019 2:34:46 PM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/HMVMXAll.cpp
r76888 r76993 370 370 * @param enmDiag The VMX diagnostic. 371 371 */ 372 VMM_INT_DECL(const char *) HM VmxGetDiagDesc(VMXVDIAG enmDiag)372 VMM_INT_DECL(const char *) HMGetVmxDiagDesc(VMXVDIAG enmDiag) 373 373 { 374 374 if (RT_LIKELY((unsigned)enmDiag < RT_ELEMENTS(g_apszVmxVDiagDesc))) … … 384 384 * @param enmAbort The VMX abort reason. 385 385 */ 386 VMM_INT_DECL(const char *) HM VmxGetAbortDesc(VMXABORT enmAbort)386 VMM_INT_DECL(const char *) HMGetVmxAbortDesc(VMXABORT enmAbort) 387 387 { 388 388 switch (enmAbort) … … 408 408 * @param fVmcsState The virtual-VMCS state. 409 409 */ 410 VMM_INT_DECL(const char *) HM VmxGetVmcsStateDesc(uint8_t fVmcsState)410 VMM_INT_DECL(const char *) HMGetVmxVmcsStateDesc(uint8_t fVmcsState) 411 411 { 412 412 switch (fVmcsState) … … 425 425 * @param uType The event type. 426 426 */ 427 VMM_INT_DECL(const char *) HM VmxGetEntryIntInfoTypeDesc(uint8_t uType)427 VMM_INT_DECL(const char *) HMGetVmxEntryIntInfoTypeDesc(uint8_t uType) 428 428 { 429 429 switch (uType) … … 449 449 * @param uType The event type. 450 450 */ 451 VMM_INT_DECL(const char *) HM VmxGetExitIntInfoTypeDesc(uint8_t uType)451 VMM_INT_DECL(const char *) HMGetVmxExitIntInfoTypeDesc(uint8_t uType) 452 452 { 453 453 switch (uType) … … 472 472 * @param uType The event type. 473 473 */ 474 VMM_INT_DECL(const char *) HM VmxGetIdtVectoringInfoTypeDesc(uint8_t uType)474 VMM_INT_DECL(const char *) HMGetVmxIdtVectoringInfoTypeDesc(uint8_t uType) 475 475 { 476 476 switch (uType) … … 649 649 * state, make sure REM (which supplies a partial state) is updated. 650 650 */ 651 VMM_INT_DECL(bool) HM VmxCanExecuteGuest(PVMCPU pVCpu, PCCPUMCTX pCtx)651 VMM_INT_DECL(bool) HMCanExecuteVmxGuest(PVMCPU pVCpu, PCCPUMCTX pCtx) 652 652 { 653 653 PVM pVM = pVCpu->CTX_SUFF(pVM); … … 831 831 * NULL. 832 832 */ 833 VMM_INT_DECL(int) HM VmxGetMsrPermission(void const *pvMsrBitmap, uint32_t idMsr, PVMXMSREXITREAD penmRead,833 VMM_INT_DECL(int) HMGetVmxMsrPermission(void const *pvMsrBitmap, uint32_t idMsr, PVMXMSREXITREAD penmRead, 834 834 PVMXMSREXITWRITE penmWrite) 835 835 { … … 906 906 * @param cbAccess The size of the I/O access in bytes (1, 2 or 4 bytes). 907 907 */ 908 VMM_INT_DECL(bool) HM VmxGetIoBitmapPermission(void const *pvIoBitmapA, void const *pvIoBitmapB, uint16_t uPort,908 VMM_INT_DECL(bool) HMGetVmxIoBitmapPermission(void const *pvIoBitmapA, void const *pvIoBitmapB, uint16_t uPort, 909 909 uint8_t cbAccess) 910 910 { … … 929 929 } 930 930 931 932 /** 933 * Dumps the virtual VMCS state to the release log. 934 * 935 * @param pVCpu The cross context virtual CPU structure. 936 */ 937 VMM_INT_DECL(void) HMDumpHwvirtVmxState(PVMCPU pVCpu) 938 { 939 #ifndef IN_RC 940 /* The string width of -4 used in the macros below to cover 'LDTR', 'GDTR', 'IDTR. */ 941 # define HMVMX_DUMP_HOST_XDTR(a_pVmcs, a_Seg, a_SegName, a_pszPrefix) \ 942 do { \ 943 LogRel((" %s%-4s = {base=%016RX64}\n", \ 944 (a_pszPrefix), (a_SegName), (a_pVmcs)->u64Host##a_Seg##Base.u)); \ 945 } while (0) 946 # define HMVMX_DUMP_HOST_FS_GS_TR(a_pVmcs, a_Seg, a_SegName, a_pszPrefix) \ 947 do { \ 948 LogRel((" %s%-4s = {%04x base=%016RX64}\n", \ 949 (a_pszPrefix), (a_SegName), (a_pVmcs)->Host##a_Seg, (a_pVmcs)->u64Host##a_Seg##Base.u)); \ 950 } while (0) 951 # define HMVMX_DUMP_GUEST_SEGREG(a_pVmcs, a_Seg, a_SegName, a_pszPrefix) \ 952 do { \ 953 LogRel((" %s%-4s = {%04x base=%016RX64 limit=%08x flags=%04x}\n", \ 954 (a_pszPrefix), (a_SegName), (a_pVmcs)->Guest##a_Seg, (a_pVmcs)->u64Guest##a_Seg##Base.u, \ 955 (a_pVmcs)->u32Guest##a_Seg##Limit, (a_pVmcs)->u32Guest##a_Seg##Attr)); \ 956 } while (0) 957 # define HMVMX_DUMP_GUEST_XDTR(a_pVmcs, a_Seg, a_SegName, a_pszPrefix) \ 958 do { \ 959 LogRel((" %s%-4s = {base=%016RX64 limit=%08x}\n", \ 960 (a_pszPrefix), (a_SegName), (a_pVmcs)->u64Guest##a_Seg##Base.u, (a_pVmcs)->u32Guest##a_Seg##Limit)); \ 961 } while (0) 962 963 PCCPUMCTX pCtx = &pVCpu->cpum.GstCtx; 964 PCVMXVVMCS pVmcs = pVCpu->cpum.GstCtx.hwvirt.vmx.CTX_SUFF(pVmcs); 965 if (!pVmcs) 966 { 967 LogRel(("Virtual VMCS not allocated\n")); 968 return; 969 } 970 LogRel(("GCPhysVmxon = %#RGp\n", pCtx->hwvirt.vmx.GCPhysVmxon)); 971 LogRel(("GCPhysVmcs = %#RGp\n", pCtx->hwvirt.vmx.GCPhysVmcs)); 972 LogRel(("GCPhysShadowVmcs = %#RGp\n", pCtx->hwvirt.vmx.GCPhysShadowVmcs)); 973 LogRel(("enmDiag = %u (%s)\n", pCtx->hwvirt.vmx.enmDiag, HMGetVmxDiagDesc(pCtx->hwvirt.vmx.enmDiag))); 974 LogRel(("enmAbort = %u (%s)\n", pCtx->hwvirt.vmx.enmAbort, HMGetVmxAbortDesc(pCtx->hwvirt.vmx.enmAbort))); 975 LogRel(("uAbortAux = %u (%#x)\n", pCtx->hwvirt.vmx.uAbortAux, pCtx->hwvirt.vmx.uAbortAux)); 976 LogRel(("fInVmxRootMode = %RTbool\n", pCtx->hwvirt.vmx.fInVmxRootMode)); 977 LogRel(("fInVmxNonRootMode = %RTbool\n", pCtx->hwvirt.vmx.fInVmxNonRootMode)); 978 LogRel(("fInterceptEvents = %RTbool\n", pCtx->hwvirt.vmx.fInterceptEvents)); 979 LogRel(("fNmiUnblockingIret = %RTbool\n", pCtx->hwvirt.vmx.fNmiUnblockingIret)); 980 LogRel(("uFirstPauseLoopTick = %RX64\n", pCtx->hwvirt.vmx.uFirstPauseLoopTick)); 981 LogRel(("uPrevPauseTick = %RX64\n", pCtx->hwvirt.vmx.uPrevPauseTick)); 982 LogRel(("uVmentryTick = %RX64\n", pCtx->hwvirt.vmx.uVmentryTick)); 983 LogRel(("offVirtApicWrite = %#RX16\n", pCtx->hwvirt.vmx.offVirtApicWrite)); 984 LogRel(("VMCS cache:\n")); 985 986 const char *pszPrefix = " "; 987 /* Header. */ 988 { 989 LogRel(("%sHeader:\n", pszPrefix)); 990 LogRel((" %sVMCS revision id = %#RX32\n", pszPrefix, pVmcs->u32VmcsRevId)); 991 LogRel((" %sVMX-abort id = %#RX32 (%s)\n", pszPrefix, pVmcs->enmVmxAbort, HMGetVmxAbortDesc(pVmcs->enmVmxAbort))); 992 LogRel((" %sVMCS state = %#x (%s)\n", pszPrefix, pVmcs->fVmcsState, HMGetVmxVmcsStateDesc(pVmcs->fVmcsState))); 993 } 994 995 /* Control fields. */ 996 { 997 /* 16-bit. */ 998 LogRel(("%sControl:\n", pszPrefix)); 999 LogRel((" %sVPID = %#RX16\n", pszPrefix, pVmcs->u16Vpid)); 1000 LogRel((" %sPosted intr notify vector = %#RX16\n", pszPrefix, pVmcs->u16PostIntNotifyVector)); 1001 LogRel((" %sEPTP index = %#RX16\n", pszPrefix, pVmcs->u16EptpIndex)); 1002 1003 /* 32-bit. */ 1004 LogRel((" %sPinCtls = %#RX32\n", pszPrefix, pVmcs->u32PinCtls)); 1005 LogRel((" %sProcCtls = %#RX32\n", pszPrefix, pVmcs->u32ProcCtls)); 1006 LogRel((" %sProcCtls2 = %#RX32\n", pszPrefix, pVmcs->u32ProcCtls2)); 1007 LogRel((" %sExitCtls = %#RX32\n", pszPrefix, pVmcs->u32ExitCtls)); 1008 LogRel((" %sEntryCtls = %#RX32\n", pszPrefix, pVmcs->u32EntryCtls)); 1009 LogRel((" %sException bitmap = %#RX32\n", pszPrefix, pVmcs->u32XcptBitmap)); 1010 LogRel((" %sPage-fault mask = %#RX32\n", pszPrefix, pVmcs->u32XcptPFMask)); 1011 LogRel((" %sPage-fault match = %#RX32\n", pszPrefix, pVmcs->u32XcptPFMatch)); 1012 LogRel((" %sCR3-target count = %RU32\n", pszPrefix, pVmcs->u32Cr3TargetCount)); 1013 LogRel((" %sVM-exit MSR store count = %RU32\n", pszPrefix, pVmcs->u32ExitMsrStoreCount)); 1014 LogRel((" %sVM-exit MSR load count = %RU32\n", pszPrefix, pVmcs->u32ExitMsrLoadCount)); 1015 LogRel((" %sVM-entry MSR load count = %RU32\n", pszPrefix, pVmcs->u32EntryMsrLoadCount)); 1016 LogRel((" %sVM-entry interruption info = %#RX32\n", pszPrefix, pVmcs->u32EntryIntInfo)); 1017 { 1018 uint32_t const fInfo = pVmcs->u32EntryIntInfo; 1019 uint8_t const uType = VMX_ENTRY_INT_INFO_TYPE(fInfo); 1020 LogRel((" %sValid = %RTbool\n", pszPrefix, VMX_ENTRY_INT_INFO_IS_VALID(fInfo))); 1021 LogRel((" %sType = %#x (%s)\n", pszPrefix, uType, HMGetVmxEntryIntInfoTypeDesc(uType))); 1022 LogRel((" %sVector = %#x\n", pszPrefix, VMX_ENTRY_INT_INFO_VECTOR(fInfo))); 1023 LogRel((" %sNMI-unblocking-IRET = %RTbool\n", pszPrefix, VMX_ENTRY_INT_INFO_IS_NMI_UNBLOCK_IRET(fInfo))); 1024 LogRel((" %sError-code valid = %RTbool\n", pszPrefix, VMX_ENTRY_INT_INFO_IS_ERROR_CODE_VALID(fInfo))); 1025 } 1026 LogRel((" %sVM-entry xcpt error-code = %#RX32\n", pszPrefix, pVmcs->u32EntryXcptErrCode)); 1027 LogRel((" %sVM-entry instruction len = %u bytes\n", pszPrefix, pVmcs->u32EntryInstrLen)); 1028 LogRel((" %sTPR threshold = %#RX32\n", pszPrefix, pVmcs->u32TprThreshold)); 1029 LogRel((" %sPLE gap = %#RX32\n", pszPrefix, pVmcs->u32PleGap)); 1030 LogRel((" %sPLE window = %#RX32\n", pszPrefix, pVmcs->u32PleWindow)); 1031 1032 /* 64-bit. */ 1033 LogRel((" %sIO-bitmap A addr = %#RX64\n", pszPrefix, pVmcs->u64AddrIoBitmapA.u)); 1034 LogRel((" %sIO-bitmap B addr = %#RX64\n", pszPrefix, pVmcs->u64AddrIoBitmapB.u)); 1035 LogRel((" %sMSR-bitmap addr = %#RX64\n", pszPrefix, pVmcs->u64AddrMsrBitmap.u)); 1036 LogRel((" %sVM-exit MSR store addr = %#RX64\n", pszPrefix, pVmcs->u64AddrExitMsrStore.u)); 1037 LogRel((" %sVM-exit MSR load addr = %#RX64\n", pszPrefix, pVmcs->u64AddrExitMsrLoad.u)); 1038 LogRel((" %sVM-entry MSR load addr = %#RX64\n", pszPrefix, pVmcs->u64AddrEntryMsrLoad.u)); 1039 LogRel((" %sExecutive VMCS ptr = %#RX64\n", pszPrefix, pVmcs->u64ExecVmcsPtr.u)); 1040 LogRel((" %sPML addr = %#RX64\n", pszPrefix, pVmcs->u64AddrPml.u)); 1041 LogRel((" %sTSC offset = %#RX64\n", pszPrefix, pVmcs->u64TscOffset.u)); 1042 LogRel((" %sVirtual-APIC addr = %#RX64\n", pszPrefix, pVmcs->u64AddrVirtApic.u)); 1043 LogRel((" %sAPIC-access addr = %#RX64\n", pszPrefix, pVmcs->u64AddrApicAccess.u)); 1044 LogRel((" %sPosted-intr desc addr = %#RX64\n", pszPrefix, pVmcs->u64AddrPostedIntDesc.u)); 1045 LogRel((" %sVM-functions control = %#RX64\n", pszPrefix, pVmcs->u64VmFuncCtls.u)); 1046 LogRel((" %sEPTP ptr = %#RX64\n", pszPrefix, pVmcs->u64EptpPtr.u)); 1047 LogRel((" %sEOI-exit bitmap 0 addr = %#RX64\n", pszPrefix, pVmcs->u64EoiExitBitmap0.u)); 1048 LogRel((" %sEOI-exit bitmap 1 addr = %#RX64\n", pszPrefix, pVmcs->u64EoiExitBitmap1.u)); 1049 LogRel((" %sEOI-exit bitmap 2 addr = %#RX64\n", pszPrefix, pVmcs->u64EoiExitBitmap2.u)); 1050 LogRel((" %sEOI-exit bitmap 3 addr = %#RX64\n", pszPrefix, pVmcs->u64EoiExitBitmap3.u)); 1051 LogRel((" %sEPTP-list addr = %#RX64\n", pszPrefix, pVmcs->u64AddrEptpList.u)); 1052 LogRel((" %sVMREAD-bitmap addr = %#RX64\n", pszPrefix, pVmcs->u64AddrVmreadBitmap.u)); 1053 LogRel((" %sVMWRITE-bitmap addr = %#RX64\n", pszPrefix, pVmcs->u64AddrVmwriteBitmap.u)); 1054 LogRel((" %sVirt-Xcpt info addr = %#RX64\n", pszPrefix, pVmcs->u64AddrXcptVeInfo.u)); 1055 LogRel((" %sXSS-bitmap = %#RX64\n", pszPrefix, pVmcs->u64XssBitmap.u)); 1056 LogRel((" %sENCLS-exiting bitmap addr = %#RX64\n", pszPrefix, pVmcs->u64AddrEnclsBitmap.u)); 1057 LogRel((" %sTSC multiplier = %#RX64\n", pszPrefix, pVmcs->u64TscMultiplier.u)); 1058 1059 /* Natural width. */ 1060 LogRel((" %sCR0 guest/host mask = %#RX64\n", pszPrefix, pVmcs->u64Cr0Mask.u)); 1061 LogRel((" %sCR4 guest/host mask = %#RX64\n", pszPrefix, pVmcs->u64Cr4Mask.u)); 1062 LogRel((" %sCR0 read shadow = %#RX64\n", pszPrefix, pVmcs->u64Cr0ReadShadow.u)); 1063 LogRel((" %sCR4 read shadow = %#RX64\n", pszPrefix, pVmcs->u64Cr4ReadShadow.u)); 1064 LogRel((" %sCR3-target 0 = %#RX64\n", pszPrefix, pVmcs->u64Cr3Target0.u)); 1065 LogRel((" %sCR3-target 1 = %#RX64\n", pszPrefix, pVmcs->u64Cr3Target1.u)); 1066 LogRel((" %sCR3-target 2 = %#RX64\n", pszPrefix, pVmcs->u64Cr3Target2.u)); 1067 LogRel((" %sCR3-target 3 = %#RX64\n", pszPrefix, pVmcs->u64Cr3Target3.u)); 1068 } 1069 1070 /* Guest state. */ 1071 { 1072 LogRel(("%sGuest state:\n", pszPrefix)); 1073 1074 /* 16-bit. */ 1075 HMVMX_DUMP_GUEST_SEGREG(pVmcs, Cs, "cs", pszPrefix); 1076 HMVMX_DUMP_GUEST_SEGREG(pVmcs, Ss, "ss", pszPrefix); 1077 HMVMX_DUMP_GUEST_SEGREG(pVmcs, Es, "es", pszPrefix); 1078 HMVMX_DUMP_GUEST_SEGREG(pVmcs, Ds, "ds", pszPrefix); 1079 HMVMX_DUMP_GUEST_SEGREG(pVmcs, Fs, "fs", pszPrefix); 1080 HMVMX_DUMP_GUEST_SEGREG(pVmcs, Gs, "gs", pszPrefix); 1081 HMVMX_DUMP_GUEST_SEGREG(pVmcs, Ldtr, "ldtr", pszPrefix); 1082 HMVMX_DUMP_GUEST_SEGREG(pVmcs, Tr, "tr", pszPrefix); 1083 HMVMX_DUMP_GUEST_XDTR( pVmcs, Gdtr, "gdtr", pszPrefix); 1084 HMVMX_DUMP_GUEST_XDTR( pVmcs, Idtr, "idtr", pszPrefix); 1085 LogRel((" %sInterrupt status = %#RX16\n", pszPrefix, pVmcs->u16GuestIntStatus)); 1086 LogRel((" %sPML index = %#RX16\n", pszPrefix, pVmcs->u16PmlIndex)); 1087 1088 /* 32-bit. */ 1089 LogRel((" %sInterruptibility state = %#RX32\n", pszPrefix, pVmcs->u32GuestIntrState)); 1090 LogRel((" %sActivity state = %#RX32\n", pszPrefix, pVmcs->u32GuestActivityState)); 1091 LogRel((" %sSMBASE = %#RX32\n", pszPrefix, pVmcs->u32GuestSmBase)); 1092 LogRel((" %sSysEnter CS = %#RX32\n", pszPrefix, pVmcs->u32GuestSysenterCS)); 1093 LogRel((" %sVMX-preemption timer value = %#RX32\n", pszPrefix, pVmcs->u32PreemptTimer)); 1094 1095 /* 64-bit. */ 1096 LogRel((" %sVMCS link ptr = %#RX64\n", pszPrefix, pVmcs->u64VmcsLinkPtr.u)); 1097 LogRel((" %sDBGCTL = %#RX64\n", pszPrefix, pVmcs->u64GuestDebugCtlMsr.u)); 1098 LogRel((" %sPAT = %#RX64\n", pszPrefix, pVmcs->u64GuestPatMsr.u)); 1099 LogRel((" %sEFER = %#RX64\n", pszPrefix, pVmcs->u64GuestEferMsr.u)); 1100 LogRel((" %sPERFGLOBALCTRL = %#RX64\n", pszPrefix, pVmcs->u64GuestPerfGlobalCtlMsr.u)); 1101 LogRel((" %sPDPTE 0 = %#RX64\n", pszPrefix, pVmcs->u64GuestPdpte0.u)); 1102 LogRel((" %sPDPTE 1 = %#RX64\n", pszPrefix, pVmcs->u64GuestPdpte1.u)); 1103 LogRel((" %sPDPTE 2 = %#RX64\n", pszPrefix, pVmcs->u64GuestPdpte2.u)); 1104 LogRel((" %sPDPTE 3 = %#RX64\n", pszPrefix, pVmcs->u64GuestPdpte3.u)); 1105 LogRel((" %sBNDCFGS = %#RX64\n", pszPrefix, pVmcs->u64GuestBndcfgsMsr.u)); 1106 1107 /* Natural width. */ 1108 LogRel((" %scr0 = %#RX64\n", pszPrefix, pVmcs->u64GuestCr0.u)); 1109 LogRel((" %scr3 = %#RX64\n", pszPrefix, pVmcs->u64GuestCr3.u)); 1110 LogRel((" %scr4 = %#RX64\n", pszPrefix, pVmcs->u64GuestCr4.u)); 1111 LogRel((" %sdr7 = %#RX64\n", pszPrefix, pVmcs->u64GuestDr7.u)); 1112 LogRel((" %srsp = %#RX64\n", pszPrefix, pVmcs->u64GuestRsp.u)); 1113 LogRel((" %srip = %#RX64\n", pszPrefix, pVmcs->u64GuestRip.u)); 1114 LogRel((" %srflags = %#RX64\n", pszPrefix, pVmcs->u64GuestRFlags.u)); 1115 LogRel((" %sPending debug xcpts = %#RX64\n", pszPrefix, pVmcs->u64GuestPendingDbgXcpt.u)); 1116 LogRel((" %sSysEnter ESP = %#RX64\n", pszPrefix, pVmcs->u64GuestSysenterEsp.u)); 1117 LogRel((" %sSysEnter EIP = %#RX64\n", pszPrefix, pVmcs->u64GuestSysenterEip.u)); 1118 } 1119 1120 /* Host state. */ 1121 { 1122 LogRel(("%sHost state:\n", pszPrefix)); 1123 1124 /* 16-bit. */ 1125 LogRel((" %scs = %#RX16\n", pszPrefix, pVmcs->HostCs)); 1126 LogRel((" %sss = %#RX16\n", pszPrefix, pVmcs->HostSs)); 1127 LogRel((" %sds = %#RX16\n", pszPrefix, pVmcs->HostDs)); 1128 LogRel((" %ses = %#RX16\n", pszPrefix, pVmcs->HostEs)); 1129 HMVMX_DUMP_HOST_FS_GS_TR(pVmcs, Fs, "fs", pszPrefix); 1130 HMVMX_DUMP_HOST_FS_GS_TR(pVmcs, Gs, "gs", pszPrefix); 1131 HMVMX_DUMP_HOST_FS_GS_TR(pVmcs, Tr, "tr", pszPrefix); 1132 HMVMX_DUMP_HOST_XDTR(pVmcs, Gdtr, "gdtr", pszPrefix); 1133 HMVMX_DUMP_HOST_XDTR(pVmcs, Idtr, "idtr", pszPrefix); 1134 1135 /* 32-bit. */ 1136 LogRel((" %sSysEnter CS = %#RX32\n", pszPrefix, pVmcs->u32HostSysenterCs)); 1137 1138 /* 64-bit. */ 1139 LogRel((" %sEFER = %#RX64\n", pszPrefix, pVmcs->u64HostEferMsr.u)); 1140 LogRel((" %sPAT = %#RX64\n", pszPrefix, pVmcs->u64HostPatMsr.u)); 1141 LogRel((" %sPERFGLOBALCTRL = %#RX64\n", pszPrefix, pVmcs->u64HostPerfGlobalCtlMsr.u)); 1142 1143 /* Natural width. */ 1144 LogRel((" %scr0 = %#RX64\n", pszPrefix, pVmcs->u64HostCr0.u)); 1145 LogRel((" %scr3 = %#RX64\n", pszPrefix, pVmcs->u64HostCr3.u)); 1146 LogRel((" %scr4 = %#RX64\n", pszPrefix, pVmcs->u64HostCr4.u)); 1147 LogRel((" %sSysEnter ESP = %#RX64\n", pszPrefix, pVmcs->u64HostSysenterEsp.u)); 1148 LogRel((" %sSysEnter EIP = %#RX64\n", pszPrefix, pVmcs->u64HostSysenterEip.u)); 1149 LogRel((" %srsp = %#RX64\n", pszPrefix, pVmcs->u64HostRsp.u)); 1150 LogRel((" %srip = %#RX64\n", pszPrefix, pVmcs->u64HostRip.u)); 1151 } 1152 1153 /* Read-only fields. */ 1154 { 1155 LogRel(("%sRead-only data fields:\n", pszPrefix)); 1156 1157 /* 16-bit (none currently). */ 1158 1159 /* 32-bit. */ 1160 uint32_t const uExitReason = pVmcs->u32RoExitReason; 1161 LogRel((" %sExit reason = %u (%s)\n", pszPrefix, uExitReason, HMGetVmxExitName(uExitReason))); 1162 LogRel((" %sExit qualification = %#RX64\n", pszPrefix, pVmcs->u64RoExitQual.u)); 1163 LogRel((" %sVM-instruction error = %#RX32\n", pszPrefix, pVmcs->u32RoVmInstrError)); 1164 LogRel((" %sVM-exit intr info = %#RX32\n", pszPrefix, pVmcs->u32RoExitIntInfo)); 1165 { 1166 uint32_t const fInfo = pVmcs->u32RoExitIntInfo; 1167 uint8_t const uType = VMX_EXIT_INT_INFO_TYPE(fInfo); 1168 LogRel((" %sValid = %RTbool\n", pszPrefix, VMX_EXIT_INT_INFO_IS_VALID(fInfo))); 1169 LogRel((" %sType = %#x (%s)\n", pszPrefix, uType, HMGetVmxExitIntInfoTypeDesc(uType))); 1170 LogRel((" %sVector = %#x\n", pszPrefix, VMX_EXIT_INT_INFO_VECTOR(fInfo))); 1171 LogRel((" %sNMI-unblocking-IRET = %RTbool\n", pszPrefix, VMX_EXIT_INT_INFO_IS_NMI_UNBLOCK_IRET(fInfo))); 1172 LogRel((" %sError-code valid = %RTbool\n", pszPrefix, VMX_EXIT_INT_INFO_IS_ERROR_CODE_VALID(fInfo))); 1173 } 1174 LogRel((" %sVM-exit intr error-code = %#RX32\n", pszPrefix, pVmcs->u32RoExitIntErrCode)); 1175 LogRel((" %sIDT-vectoring info = %#RX32\n", pszPrefix, pVmcs->u32RoIdtVectoringInfo)); 1176 { 1177 uint32_t const fInfo = pVmcs->u32RoIdtVectoringInfo; 1178 uint8_t const uType = VMX_IDT_VECTORING_INFO_TYPE(fInfo); 1179 LogRel((" %sValid = %RTbool\n", pszPrefix, VMX_IDT_VECTORING_INFO_IS_VALID(fInfo))); 1180 LogRel((" %sType = %#x (%s)\n", pszPrefix, uType, HMGetVmxIdtVectoringInfoTypeDesc(uType))); 1181 LogRel((" %sVector = %#x\n", pszPrefix, VMX_IDT_VECTORING_INFO_VECTOR(fInfo))); 1182 LogRel((" %sError-code valid = %RTbool\n", pszPrefix, VMX_IDT_VECTORING_INFO_IS_ERROR_CODE_VALID(fInfo))); 1183 } 1184 LogRel((" %sIDT-vectoring error-code = %#RX32\n", pszPrefix, pVmcs->u32RoIdtVectoringErrCode)); 1185 LogRel((" %sVM-exit instruction length = %u bytes\n", pszPrefix, pVmcs->u32RoExitInstrLen)); 1186 LogRel((" %sVM-exit instruction info = %#RX64\n", pszPrefix, pVmcs->u32RoExitInstrInfo)); 1187 1188 /* 64-bit. */ 1189 LogRel((" %sGuest-physical addr = %#RX64\n", pszPrefix, pVmcs->u64RoGuestPhysAddr.u)); 1190 1191 /* Natural width. */ 1192 LogRel((" %sI/O RCX = %#RX64\n", pszPrefix, pVmcs->u64RoIoRcx.u)); 1193 LogRel((" %sI/O RSI = %#RX64\n", pszPrefix, pVmcs->u64RoIoRsi.u)); 1194 LogRel((" %sI/O RDI = %#RX64\n", pszPrefix, pVmcs->u64RoIoRdi.u)); 1195 LogRel((" %sI/O RIP = %#RX64\n", pszPrefix, pVmcs->u64RoIoRip.u)); 1196 LogRel((" %sGuest-linear addr = %#RX64\n", pszPrefix, pVmcs->u64RoGuestLinearAddr.u)); 1197 } 1198 1199 # undef HMVMX_DUMP_HOST_XDTR 1200 # undef HMVMX_DUMP_HOST_FS_GS_TR 1201 # undef HMVMX_DUMP_GUEST_SEGREG 1202 # undef HMVMX_DUMP_GUEST_XDTR 1203 #else 1204 NOREF(pVCpu); 1205 #endif /* !IN_RC */ 1206 } 1207
Note:
See TracChangeset
for help on using the changeset viewer.