Changeset 72251 in vbox for trunk/src/VBox/VMM
- Timestamp:
- May 17, 2018 5:39:01 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r72209 r72251 9132 9132 while (iMemMap-- > 0) 9133 9133 { 9134 uint32_t fAccess = pVCpu->iem.s.aMemMappings[iMemMap].fAccess;9134 uint32_t const fAccess = pVCpu->iem.s.aMemMappings[iMemMap].fAccess; 9135 9135 if (fAccess != IEM_ACCESS_INVALID) 9136 9136 { … … 9139 9139 if (!(fAccess & IEM_ACCESS_BOUNCE_BUFFERED)) 9140 9140 PGMPhysReleasePageMappingLock(pVCpu->CTX_SUFF(pVM), &pVCpu->iem.s.aMemMappingLocks[iMemMap].Lock); 9141 Assert(pVCpu->iem.s.cActiveMappings > 0); 9141 AssertMsg(pVCpu->iem.s.cActiveMappings > 0, 9142 ("iMemMap=%u fAccess=%#x pv=%p GCPhysFirst=%RGp GCPhysSecond=%RGp\n", 9143 iMemMap, fAccess, pVCpu->iem.s.aMemMappings[iMemMap].pv, 9144 pVCpu->iem.s.aMemBbMappings[iMemMap].GCPhysFirst, pVCpu->iem.s.aMemBbMappings[iMemMap].GCPhysSecond)); 9142 9145 pVCpu->iem.s.cActiveMappings--; 9143 9146 } … … 14955 14958 DECLINLINE(VBOXSTRICTRC) iemExecOneInner(PVMCPU pVCpu, bool fExecuteInhibit) 14956 14959 { 14960 AssertMsg(pVCpu->iem.s.aMemMappings[0].fAccess == IEM_ACCESS_INVALID, ("0: %#x %RGp\n", pVCpu->iem.s.aMemMappings[0].fAccess, pVCpu->iem.s.aMemBbMappings[0].GCPhysFirst)); 14961 AssertMsg(pVCpu->iem.s.aMemMappings[1].fAccess == IEM_ACCESS_INVALID, ("1: %#x %RGp\n", pVCpu->iem.s.aMemMappings[1].fAccess, pVCpu->iem.s.aMemBbMappings[1].GCPhysFirst)); 14962 AssertMsg(pVCpu->iem.s.aMemMappings[2].fAccess == IEM_ACCESS_INVALID, ("2: %#x %RGp\n", pVCpu->iem.s.aMemMappings[2].fAccess, pVCpu->iem.s.aMemBbMappings[2].GCPhysFirst)); 14963 14957 14964 #ifdef IEM_WITH_SETJMP 14958 14965 VBOXSTRICTRC rcStrict; … … 14979 14986 iemMemRollback(pVCpu); 14980 14987 } 14988 AssertMsg(pVCpu->iem.s.aMemMappings[0].fAccess == IEM_ACCESS_INVALID, ("0: %#x %RGp\n", pVCpu->iem.s.aMemMappings[0].fAccess, pVCpu->iem.s.aMemBbMappings[0].GCPhysFirst)); 14989 AssertMsg(pVCpu->iem.s.aMemMappings[1].fAccess == IEM_ACCESS_INVALID, ("1: %#x %RGp\n", pVCpu->iem.s.aMemMappings[1].fAccess, pVCpu->iem.s.aMemBbMappings[1].GCPhysFirst)); 14990 AssertMsg(pVCpu->iem.s.aMemMappings[2].fAccess == IEM_ACCESS_INVALID, ("2: %#x %RGp\n", pVCpu->iem.s.aMemMappings[2].fAccess, pVCpu->iem.s.aMemBbMappings[2].GCPhysFirst)); 14991 14981 14992 //#ifdef DEBUG 14982 14993 // AssertMsg(IEM_GET_INSTR_LEN(pVCpu) == cbInstr || rcStrict != VINF_SUCCESS, ("%u %u\n", IEM_GET_INSTR_LEN(pVCpu), cbInstr)); … … 15017 15028 iemMemRollback(pVCpu); 15018 15029 } 15030 AssertMsg(pVCpu->iem.s.aMemMappings[0].fAccess == IEM_ACCESS_INVALID, ("0: %#x %RGp\n", pVCpu->iem.s.aMemMappings[0].fAccess, pVCpu->iem.s.aMemBbMappings[0].GCPhysFirst)); 15031 AssertMsg(pVCpu->iem.s.aMemMappings[1].fAccess == IEM_ACCESS_INVALID, ("1: %#x %RGp\n", pVCpu->iem.s.aMemMappings[1].fAccess, pVCpu->iem.s.aMemBbMappings[1].GCPhysFirst)); 15032 AssertMsg(pVCpu->iem.s.aMemMappings[2].fAccess == IEM_ACCESS_INVALID, ("2: %#x %RGp\n", pVCpu->iem.s.aMemMappings[2].fAccess, pVCpu->iem.s.aMemBbMappings[2].GCPhysFirst)); 15019 15033 } 15034 else if (pVCpu->iem.s.cActiveMappings > 0) 15035 iemMemRollback(pVCpu); 15020 15036 EMSetInhibitInterruptsPC(pVCpu, UINT64_C(0x7777555533331111)); 15021 15037 } … … 15090 15106 if (rcStrict == VINF_SUCCESS) 15091 15107 rcStrict = iemExecOneInner(pVCpu, true); 15108 else if (pVCpu->iem.s.cActiveMappings > 0) 15109 iemMemRollback(pVCpu); 15092 15110 15093 15111 #if defined(IEM_VERIFICATION_MODE_FULL) && defined(IN_RING3) … … 15122 15140 *pcbWritten = pVCpu->iem.s.cbWritten - cbOldWritten; 15123 15141 } 15142 else if (pVCpu->iem.s.cActiveMappings > 0) 15143 iemMemRollback(pVCpu); 15124 15144 15125 15145 #ifdef IN_RC … … 15156 15176 rcStrict = iemInitDecoderAndPrefetchOpcodes(pVCpu, false); 15157 15177 if (rcStrict == VINF_SUCCESS) 15158 {15159 15178 rcStrict = iemExecOneInner(pVCpu, true); 15160 } 15179 else if (pVCpu->iem.s.cActiveMappings > 0) 15180 iemMemRollback(pVCpu); 15161 15181 15162 15182 #ifdef IN_RC … … 15180 15200 *pcbWritten = pVCpu->iem.s.cbWritten - cbOldWritten; 15181 15201 } 15202 else if (pVCpu->iem.s.cActiveMappings > 0) 15203 iemMemRollback(pVCpu); 15182 15204 15183 15205 #ifdef IN_RC … … 15215 15237 if (rcStrict == VINF_SUCCESS) 15216 15238 rcStrict = iemExecOneInner(pVCpu, false); 15239 else if (pVCpu->iem.s.cActiveMappings > 0) 15240 iemMemRollback(pVCpu); 15217 15241 15218 15242 #ifdef IN_RC … … 15269 15293 *pcbWritten = pVCpu->iem.s.cbWritten - cbOldWritten; 15270 15294 } 15295 else if (pVCpu->iem.s.cActiveMappings > 0) 15296 iemMemRollback(pVCpu); 15271 15297 15272 15298 #ifdef IN_RC … … 15330 15356 if (rcStrict == VINF_SUCCESS) 15331 15357 rcStrict = iemExecOneInner(pVCpu, true); 15358 else if (pVCpu->iem.s.cActiveMappings > 0) 15359 iemMemRollback(pVCpu); 15332 15360 15333 15361 /* … … 15479 15507 # endif 15480 15508 } 15509 else 15510 { 15511 if (pVCpu->iem.s.cActiveMappings > 0) 15512 iemMemRollback(pVCpu); 15513 15481 15514 # ifdef VBOX_WITH_NESTED_HWVIRT_SVM 15482 else15483 {15484 15515 /* 15485 15516 * When a nested-guest causes an exception intercept (e.g. #PF) when fetching … … 15487 15518 */ 15488 15519 rcStrict = iemExecStatusCodeFiddling(pVCpu, rcStrict); 15489 }15490 15520 # endif 15521 } 15491 15522 15492 15523 /* … … 15571 15602 } 15572 15603 15573 return iemRaiseXcptOrInt(pVCpu, cbInstr, u8TrapNo, fFlags, uErrCode, uCr2); 15604 VBOXSTRICTRC rcStrict = iemRaiseXcptOrInt(pVCpu, cbInstr, u8TrapNo, fFlags, uErrCode, uCr2); 15605 15606 if (pVCpu->iem.s.cActiveMappings > 0) 15607 iemMemRollback(pVCpu); 15608 return rcStrict; 15574 15609 } 15575 15610
Note:
See TracChangeset
for help on using the changeset viewer.