Changeset 72676 in vbox
- Timestamp:
- Jun 25, 2018 11:29:04 AM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 123189
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/CPUMAllRegs.cpp
r72643 r72676 83 83 Assert(CPUMSELREG_ARE_HIDDEN_PARTS_VALID(a_pVCpu, a_pSReg)); 84 84 #endif 85 86 /** @def CPUM_INT_ASSERT_NOT_EXTRN 87 * Macro for asserting that @a a_fNotExtrn are present. 88 * 89 * @param a_pVCpu The cross context virtual CPU structure of the calling EMT. 90 * @param a_fNotExtrn Mask of CPUMCTX_EXTRN_XXX bits to check. 91 */ 92 #define CPUM_INT_ASSERT_NOT_EXTRN(a_pVCpu, a_fNotExtrn) \ 93 AssertMsg(!((a_pVCpu)->cpum.s.Guest.fExtrn & (a_fNotExtrn)), \ 94 ("%#RX64; a_fNotExtrn=%#RX64\n", (a_pVCpu)->cpum.s.Guest.fExtrn, (a_fNotExtrn))) 95 85 96 86 97 … … 738 749 739 750 pVCpu->cpum.s.Guest.cr0 = cr0; 751 pVCpu->cpum.s.Guest.fExtrn &= ~CPUMCTX_EXTRN_CR0; 740 752 return VINF_SUCCESS; 741 753 } … … 745 757 { 746 758 pVCpu->cpum.s.Guest.cr2 = cr2; 759 pVCpu->cpum.s.Guest.fExtrn &= ~CPUMCTX_EXTRN_CR2; 747 760 return VINF_SUCCESS; 748 761 } … … 753 766 pVCpu->cpum.s.Guest.cr3 = cr3; 754 767 pVCpu->cpum.s.fChanged |= CPUM_CHANGED_CR3; 768 pVCpu->cpum.s.Guest.fExtrn &= ~CPUMCTX_EXTRN_CR3; 755 769 return VINF_SUCCESS; 756 770 } … … 767 781 pVCpu->cpum.s.fChanged |= CPUM_CHANGED_CR4; 768 782 pVCpu->cpum.s.Guest.cr4 = cr4; 783 pVCpu->cpum.s.Guest.fExtrn &= ~CPUMCTX_EXTRN_CR4; 769 784 return VINF_SUCCESS; 770 785 } … … 774 789 { 775 790 pVCpu->cpum.s.Guest.eflags.u32 = eflags; 791 pVCpu->cpum.s.Guest.fExtrn &= ~CPUMCTX_EXTRN_RFLAGS; 776 792 return VINF_SUCCESS; 777 793 } … … 886 902 { 887 903 pVCpu->cpum.s.Guest.msrEFER = val; 904 pVCpu->cpum.s.Guest.fExtrn &= ~CPUMCTX_EXTRN_EFER; 888 905 } 889 906 … … 891 908 VMMDECL(RTGCPTR) CPUMGetGuestIDTR(PVMCPU pVCpu, uint16_t *pcbLimit) 892 909 { 910 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_IDTR); 893 911 if (pcbLimit) 894 912 *pcbLimit = pVCpu->cpum.s.Guest.idtr.cbIdt; … … 899 917 VMMDECL(RTSEL) CPUMGetGuestTR(PVMCPU pVCpu, PCPUMSELREGHID pHidden) 900 918 { 919 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_TR); 901 920 if (pHidden) 902 921 *pHidden = pVCpu->cpum.s.Guest.tr; … … 907 926 VMMDECL(RTSEL) CPUMGetGuestCS(PVMCPU pVCpu) 908 927 { 928 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CS); 909 929 return pVCpu->cpum.s.Guest.cs.Sel; 910 930 } … … 913 933 VMMDECL(RTSEL) CPUMGetGuestDS(PVMCPU pVCpu) 914 934 { 935 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_DS); 915 936 return pVCpu->cpum.s.Guest.ds.Sel; 916 937 } … … 919 940 VMMDECL(RTSEL) CPUMGetGuestES(PVMCPU pVCpu) 920 941 { 942 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_ES); 921 943 return pVCpu->cpum.s.Guest.es.Sel; 922 944 } … … 925 947 VMMDECL(RTSEL) CPUMGetGuestFS(PVMCPU pVCpu) 926 948 { 949 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_FS); 927 950 return pVCpu->cpum.s.Guest.fs.Sel; 928 951 } … … 931 954 VMMDECL(RTSEL) CPUMGetGuestGS(PVMCPU pVCpu) 932 955 { 956 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_GS); 933 957 return pVCpu->cpum.s.Guest.gs.Sel; 934 958 } … … 937 961 VMMDECL(RTSEL) CPUMGetGuestSS(PVMCPU pVCpu) 938 962 { 963 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_SS); 939 964 return pVCpu->cpum.s.Guest.ss.Sel; 940 965 } … … 943 968 VMMDECL(uint64_t) CPUMGetGuestFlatPC(PVMCPU pVCpu) 944 969 { 970 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_RIP | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_EFER); 945 971 CPUMSELREG_LAZY_LOAD_HIDDEN_PARTS(pVCpu, &pVCpu->cpum.s.Guest.cs); 946 972 if ( !CPUMIsGuestInLongMode(pVCpu) 947 || pVCpu->cpum.s.Guest.cs.Attr.n.u1Long)973 || !pVCpu->cpum.s.Guest.cs.Attr.n.u1Long) 948 974 return pVCpu->cpum.s.Guest.eip + (uint32_t)pVCpu->cpum.s.Guest.cs.u64Base; 949 975 return pVCpu->cpum.s.Guest.rip + pVCpu->cpum.s.Guest.cs.u64Base; … … 953 979 VMMDECL(uint64_t) CPUMGetGuestFlatSP(PVMCPU pVCpu) 954 980 { 981 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_RSP | CPUMCTX_EXTRN_SS | CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_EFER); 955 982 CPUMSELREG_LAZY_LOAD_HIDDEN_PARTS(pVCpu, &pVCpu->cpum.s.Guest.ss); 956 983 if ( !CPUMIsGuestInLongMode(pVCpu) 957 || pVCpu->cpum.s.Guest.ss.Attr.n.u1Long)984 || !pVCpu->cpum.s.Guest.cs.Attr.n.u1Long) 958 985 return pVCpu->cpum.s.Guest.eip + (uint32_t)pVCpu->cpum.s.Guest.ss.u64Base; 959 986 return pVCpu->cpum.s.Guest.rip + pVCpu->cpum.s.Guest.ss.u64Base; … … 963 990 VMMDECL(RTSEL) CPUMGetGuestLDTR(PVMCPU pVCpu) 964 991 { 992 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_LDTR); 965 993 return pVCpu->cpum.s.Guest.ldtr.Sel; 966 994 } … … 969 997 VMMDECL(RTSEL) CPUMGetGuestLdtrEx(PVMCPU pVCpu, uint64_t *pGCPtrBase, uint32_t *pcbLimit) 970 998 { 999 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_LDTR); 971 1000 *pGCPtrBase = pVCpu->cpum.s.Guest.ldtr.u64Base; 972 1001 *pcbLimit = pVCpu->cpum.s.Guest.ldtr.u32Limit; … … 977 1006 VMMDECL(uint64_t) CPUMGetGuestCR0(PVMCPU pVCpu) 978 1007 { 979 Assert(!(pVCpu->cpum.s.Guest.fExtrn & CPUMCTX_EXTRN_CR0));1008 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR0); 980 1009 return pVCpu->cpum.s.Guest.cr0; 981 1010 } … … 984 1013 VMMDECL(uint64_t) CPUMGetGuestCR2(PVMCPU pVCpu) 985 1014 { 986 Assert(!(pVCpu->cpum.s.Guest.fExtrn & CPUMCTX_EXTRN_CR2));1015 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR2); 987 1016 return pVCpu->cpum.s.Guest.cr2; 988 1017 } … … 991 1020 VMMDECL(uint64_t) CPUMGetGuestCR3(PVMCPU pVCpu) 992 1021 { 993 Assert(!(pVCpu->cpum.s.Guest.fExtrn & CPUMCTX_EXTRN_CR3));1022 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR3); 994 1023 return pVCpu->cpum.s.Guest.cr3; 995 1024 } … … 998 1027 VMMDECL(uint64_t) CPUMGetGuestCR4(PVMCPU pVCpu) 999 1028 { 1000 Assert(!(pVCpu->cpum.s.Guest.fExtrn & CPUMCTX_EXTRN_CR4));1029 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR4); 1001 1030 return pVCpu->cpum.s.Guest.cr4; 1002 1031 } … … 1015 1044 VMMDECL(void) CPUMGetGuestGDTR(PVMCPU pVCpu, PVBOXGDTR pGDTR) 1016 1045 { 1046 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_GDTR); 1017 1047 *pGDTR = pVCpu->cpum.s.Guest.gdtr; 1018 1048 } … … 1021 1051 VMMDECL(uint32_t) CPUMGetGuestEIP(PVMCPU pVCpu) 1022 1052 { 1023 Assert(!(pVCpu->cpum.s.Guest.fExtrn & CPUMCTX_EXTRN_RIP));1053 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_RIP); 1024 1054 return pVCpu->cpum.s.Guest.eip; 1025 1055 } … … 1028 1058 VMMDECL(uint64_t) CPUMGetGuestRIP(PVMCPU pVCpu) 1029 1059 { 1030 Assert(!(pVCpu->cpum.s.Guest.fExtrn & CPUMCTX_EXTRN_RIP));1060 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_RIP); 1031 1061 return pVCpu->cpum.s.Guest.rip; 1032 1062 } … … 1035 1065 VMMDECL(uint32_t) CPUMGetGuestEAX(PVMCPU pVCpu) 1036 1066 { 1067 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_RAX); 1037 1068 return pVCpu->cpum.s.Guest.eax; 1038 1069 } … … 1041 1072 VMMDECL(uint32_t) CPUMGetGuestEBX(PVMCPU pVCpu) 1042 1073 { 1074 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_RBX); 1043 1075 return pVCpu->cpum.s.Guest.ebx; 1044 1076 } … … 1047 1079 VMMDECL(uint32_t) CPUMGetGuestECX(PVMCPU pVCpu) 1048 1080 { 1081 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_RCX); 1049 1082 return pVCpu->cpum.s.Guest.ecx; 1050 1083 } … … 1053 1086 VMMDECL(uint32_t) CPUMGetGuestEDX(PVMCPU pVCpu) 1054 1087 { 1088 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_RDX); 1055 1089 return pVCpu->cpum.s.Guest.edx; 1056 1090 } … … 1059 1093 VMMDECL(uint32_t) CPUMGetGuestESI(PVMCPU pVCpu) 1060 1094 { 1095 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_RSI); 1061 1096 return pVCpu->cpum.s.Guest.esi; 1062 1097 } … … 1065 1100 VMMDECL(uint32_t) CPUMGetGuestEDI(PVMCPU pVCpu) 1066 1101 { 1102 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_RDI); 1067 1103 return pVCpu->cpum.s.Guest.edi; 1068 1104 } … … 1071 1107 VMMDECL(uint32_t) CPUMGetGuestESP(PVMCPU pVCpu) 1072 1108 { 1109 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_RSP); 1073 1110 return pVCpu->cpum.s.Guest.esp; 1074 1111 } … … 1077 1114 VMMDECL(uint32_t) CPUMGetGuestEBP(PVMCPU pVCpu) 1078 1115 { 1116 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_RBP); 1079 1117 return pVCpu->cpum.s.Guest.ebp; 1080 1118 } … … 1083 1121 VMMDECL(uint32_t) CPUMGetGuestEFlags(PVMCPU pVCpu) 1084 1122 { 1123 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_RFLAGS); 1085 1124 return pVCpu->cpum.s.Guest.eflags.u32; 1086 1125 } … … 1092 1131 { 1093 1132 case DISCREG_CR0: 1133 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR0); 1094 1134 *pValue = pVCpu->cpum.s.Guest.cr0; 1095 1135 break; 1096 1136 1097 1137 case DISCREG_CR2: 1138 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR2); 1098 1139 *pValue = pVCpu->cpum.s.Guest.cr2; 1099 1140 break; 1100 1141 1101 1142 case DISCREG_CR3: 1143 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR3); 1102 1144 *pValue = pVCpu->cpum.s.Guest.cr3; 1103 1145 break; 1104 1146 1105 1147 case DISCREG_CR4: 1148 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR4); 1106 1149 *pValue = pVCpu->cpum.s.Guest.cr4; 1107 1150 break; … … 1109 1152 case DISCREG_CR8: 1110 1153 { 1154 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_APIC_TPR); 1111 1155 uint8_t u8Tpr; 1112 1156 int rc = APICGetTpr(pVCpu, &u8Tpr, NULL /* pfPending */, NULL /* pu8PendingIrq */); … … 1130 1174 VMMDECL(uint64_t) CPUMGetGuestDR0(PVMCPU pVCpu) 1131 1175 { 1176 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_DR0_DR3); 1132 1177 return pVCpu->cpum.s.Guest.dr[0]; 1133 1178 } … … 1136 1181 VMMDECL(uint64_t) CPUMGetGuestDR1(PVMCPU pVCpu) 1137 1182 { 1183 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_DR0_DR3); 1138 1184 return pVCpu->cpum.s.Guest.dr[1]; 1139 1185 } … … 1142 1188 VMMDECL(uint64_t) CPUMGetGuestDR2(PVMCPU pVCpu) 1143 1189 { 1190 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_DR0_DR3); 1144 1191 return pVCpu->cpum.s.Guest.dr[2]; 1145 1192 } … … 1148 1195 VMMDECL(uint64_t) CPUMGetGuestDR3(PVMCPU pVCpu) 1149 1196 { 1197 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_DR0_DR3); 1150 1198 return pVCpu->cpum.s.Guest.dr[3]; 1151 1199 } … … 1154 1202 VMMDECL(uint64_t) CPUMGetGuestDR6(PVMCPU pVCpu) 1155 1203 { 1204 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_DR6); 1156 1205 return pVCpu->cpum.s.Guest.dr[6]; 1157 1206 } … … 1160 1209 VMMDECL(uint64_t) CPUMGetGuestDR7(PVMCPU pVCpu) 1161 1210 { 1211 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_DR7); 1162 1212 return pVCpu->cpum.s.Guest.dr[7]; 1163 1213 } … … 1166 1216 VMMDECL(int) CPUMGetGuestDRx(PVMCPU pVCpu, uint32_t iReg, uint64_t *pValue) 1167 1217 { 1218 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_DR_MASK); 1168 1219 AssertReturn(iReg <= DISDREG_DR7, VERR_INVALID_PARAMETER); 1169 1220 /* DR4 is an alias for DR6, and DR5 is an alias for DR7. */ … … 1177 1228 VMMDECL(uint64_t) CPUMGetGuestEFER(PVMCPU pVCpu) 1178 1229 { 1230 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_EFER); 1179 1231 return pVCpu->cpum.s.Guest.msrEFER; 1180 1232 } … … 1822 1874 VMM_INT_DECL(int) CPUMSetGuestXcr0(PVMCPU pVCpu, uint64_t uNewValue) 1823 1875 { 1876 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_XCRx); 1824 1877 if ( (uNewValue & ~pVCpu->CTX_SUFF(pVM)->cpum.s.fXStateGuestMask) == 0 1825 1878 /* The X87 bit cannot be cleared. */ … … 1872 1925 VMMDECL(bool) CPUMIsGuestNXEnabled(PVMCPU pVCpu) 1873 1926 { 1927 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_EFER); 1874 1928 return !!(pVCpu->cpum.s.Guest.msrEFER & MSR_K6_EFER_NXE); 1875 1929 } … … 1884 1938 VMMDECL(bool) CPUMIsGuestPageSizeExtEnabled(PVMCPU pVCpu) 1885 1939 { 1940 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR4); 1886 1941 /* PAE or AMD64 implies support for big pages regardless of CR4.PSE */ 1887 1942 return !!(pVCpu->cpum.s.Guest.cr4 & (X86_CR4_PSE | X86_CR4_PAE)); … … 1897 1952 VMMDECL(bool) CPUMIsGuestPagingEnabled(PVMCPU pVCpu) 1898 1953 { 1954 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR0); 1899 1955 return !!(pVCpu->cpum.s.Guest.cr0 & X86_CR0_PG); 1900 1956 } … … 1909 1965 VMMDECL(bool) CPUMIsGuestR0WriteProtEnabled(PVMCPU pVCpu) 1910 1966 { 1967 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR0); 1911 1968 return !!(pVCpu->cpum.s.Guest.cr0 & X86_CR0_WP); 1912 1969 } … … 1921 1978 VMMDECL(bool) CPUMIsGuestInRealMode(PVMCPU pVCpu) 1922 1979 { 1980 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR0); 1923 1981 return !(pVCpu->cpum.s.Guest.cr0 & X86_CR0_PE); 1924 1982 } … … 1933 1991 VMMDECL(bool) CPUMIsGuestInRealOrV86Mode(PVMCPU pVCpu) 1934 1992 { 1993 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR0 | CPUMCTX_EXTRN_RFLAGS); 1935 1994 return !(pVCpu->cpum.s.Guest.cr0 & X86_CR0_PE) 1936 1995 || pVCpu->cpum.s.Guest.eflags.Bits.u1VM; /** @todo verify that this cannot be set in long mode. */ … … 1946 2005 VMMDECL(bool) CPUMIsGuestInProtectedMode(PVMCPU pVCpu) 1947 2006 { 2007 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR0); 1948 2008 return !!(pVCpu->cpum.s.Guest.cr0 & X86_CR0_PE); 1949 2009 } … … 1958 2018 VMMDECL(bool) CPUMIsGuestInPagedProtectedMode(PVMCPU pVCpu) 1959 2019 { 2020 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR0); 1960 2021 return (pVCpu->cpum.s.Guest.cr0 & (X86_CR0_PE | X86_CR0_PG)) == (X86_CR0_PE | X86_CR0_PG); 1961 2022 } … … 1970 2031 VMMDECL(bool) CPUMIsGuestInLongMode(PVMCPU pVCpu) 1971 2032 { 2033 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_EFER); 1972 2034 return (pVCpu->cpum.s.Guest.msrEFER & MSR_K6_EFER_LMA) == MSR_K6_EFER_LMA; 1973 2035 } … … 1982 2044 VMMDECL(bool) CPUMIsGuestInPAEMode(PVMCPU pVCpu) 1983 2045 { 2046 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR4 | CPUMCTX_EXTRN_CR0 | CPUMCTX_EXTRN_EFER); 1984 2047 /* Intel mentions EFER.LMA and EFER.LME in different parts of their spec. We shall use EFER.LMA rather 1985 2048 than EFER.LME as it reflects if the CPU has entered paging with EFER.LME set. */ … … 1998 2061 VMMDECL(bool) CPUMIsGuestIn64BitCode(PVMCPU pVCpu) 1999 2062 { 2063 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CS | CPUMCTX_EXTRN_EFER); 2000 2064 if (!CPUMIsGuestInLongMode(pVCpu)) 2001 2065 return false; … … 2450 2514 * RPL = CPL. Weird. 2451 2515 */ 2452 Assert(!(pVCpu->cpum.s.Guest.fExtrn & (CPUMCTX_EXTRN_CR0 | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_SS)));2516 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR0 | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_SS); 2453 2517 uint32_t uCpl; 2454 2518 if (pVCpu->cpum.s.Guest.cr0 & X86_CR0_PE) … … 2498 2562 VMMDECL(CPUMMODE) CPUMGetGuestMode(PVMCPU pVCpu) 2499 2563 { 2564 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR0 | CPUMCTX_EXTRN_EFER); 2500 2565 CPUMMODE enmMode; 2501 2566 if (!(pVCpu->cpum.s.Guest.cr0 & X86_CR0_PE)) … … 2518 2583 VMMDECL(uint32_t) CPUMGetGuestCodeBits(PVMCPU pVCpu) 2519 2584 { 2585 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR0 | CPUMCTX_EXTRN_EFER | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS); 2586 2520 2587 if (!(pVCpu->cpum.s.Guest.cr0 & X86_CR0_PE)) 2521 2588 return 16; … … 2541 2608 VMMDECL(DISCPUMODE) CPUMGetGuestDisMode(PVMCPU pVCpu) 2542 2609 { 2610 CPUM_INT_ASSERT_NOT_EXTRN(pVCpu, CPUMCTX_EXTRN_CR0 | CPUMCTX_EXTRN_EFER | CPUMCTX_EXTRN_RFLAGS | CPUMCTX_EXTRN_CS); 2611 2543 2612 if (!(pVCpu->cpum.s.Guest.cr0 & X86_CR0_PE)) 2544 2613 return DISCPUMODE_16BIT;
Note:
See TracChangeset
for help on using the changeset viewer.