Changeset 97466 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Nov 8, 2022 10:32:34 PM (2 years ago)
- svn:sync-xref-src-repo-rev:
- 154476
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r97458 r97466 858 858 int rc = PGMPhysIemGCPhys2PtrNoLock(pVCpu->CTX_SUFF(pVM), pVCpu, pTlbe->GCPhys, &pVCpu->iem.s.CodeTlb.uTlbPhysRev, 859 859 &pTlbe->pbMappingR3, &pTlbe->fFlagsAndPhysRev); 860 AssertRCStmt(rc, longjmp(*CTX_SUFF(pVCpu->iem.s.pJmpBuf), rc));860 AssertRCStmt(rc, IEM_DO_LONGJMP(*CTX_SUFF(pVCpu->iem.s.pJmpBuf), rc)); 861 861 } 862 862 … … 914 914 GCPtrNext, GCPhys, VBOXSTRICTRC_VAL(rcStrict), cbToTryRead)); 915 915 rcStrict = iemSetPassUpStatus(pVCpu, rcStrict); 916 AssertStmt(rcStrict == VINF_SUCCESS, longjmp(*CTX_SUFF(pVCpu->iem.s.pJmpBuf), VBOXSTRICRC_VAL(rcStrict)));916 AssertStmt(rcStrict == VINF_SUCCESS, IEM_DO_LONGJMP(pVCpu, VBOXSTRICRC_VAL(rcStrict))); 917 917 } 918 918 else … … 922 922 : "iemOpcodeFetchMoreBytes: %RGv/%RGp LB %#x - read error - rcStrict=%Rrc (!!)\n", 923 923 GCPtrNext, GCPhys, VBOXSTRICTRC_VAL(rcStrict), cbToTryRead)); 924 longjmp(*CTX_SUFF(pVCpu->iem.s.pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));924 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 925 925 } 926 926 } … … 943 943 GCPtrFirst, pTlbe->GCPhys + (GCPtrFirst & X86_PAGE_OFFSET_MASK), VBOXSTRICTRC_VAL(rcStrict), cbToRead)); 944 944 rcStrict = iemSetPassUpStatus(pVCpu, rcStrict); 945 AssertStmt(rcStrict == VINF_SUCCESS, longjmp(*CTX_SUFF(pVCpu->iem.s.pJmpBuf), VBOXSTRICTRC_VAL(rcStrict)));945 AssertStmt(rcStrict == VINF_SUCCESS, IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict))); 946 946 } 947 947 else … … 951 951 : "iemOpcodeFetchMoreBytes: %RGv/%RGp LB %#x - read error - rcStrict=%Rrc (!!)\n", 952 952 GCPtrFirst, pTlbe->GCPhys + (GCPtrFirst & X86_PAGE_OFFSET_MASK), VBOXSTRICTRC_VAL(rcStrict), cbToRead)); 953 longjmp(*CTX_SUFF(pVCpu->iem.s.pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));953 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 954 954 } 955 955 pVCpu->iem.s.offInstrNextByte = offBuf + cbToRead; … … 966 966 #else 967 967 RT_NOREF(pvDst, cbDst); 968 longjmp(*CTX_SUFF(pVCpu->iem.s.pJmpBuf), VERR_INTERNAL_ERROR);968 IEM_DO_LONGJMP(pVCpu, VERR_INTERNAL_ERROR); 969 969 #endif 970 970 } … … 1152 1152 if (rcStrict == VINF_SUCCESS) 1153 1153 return pVCpu->iem.s.abOpcode[pVCpu->iem.s.offOpcode++]; 1154 longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));1154 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 1155 1155 # endif 1156 1156 } … … 1266 1266 # endif 1267 1267 } 1268 longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));1268 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 1269 1269 # endif 1270 1270 } … … 1378 1378 # endif 1379 1379 } 1380 longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));1380 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 1381 1381 # endif 1382 1382 } … … 1504 1504 # endif 1505 1505 } 1506 longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));1506 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 1507 1507 # endif 1508 1508 } … … 3911 3911 { 3912 3912 VBOXSTRICTRC rcStrict = iemRaiseXcptOrInt(pVCpu, cbInstr, u8Vector, fFlags, uErr, uCr2); 3913 longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));3913 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 3914 3914 } 3915 3915 #endif … … 4159 4159 DECL_NO_RETURN(void) iemRaisePageFaultJmp(PVMCPUCC pVCpu, RTGCPTR GCPtrWhere, uint32_t fAccess, int rc) IEM_NOEXCEPT_MAY_LONGJMP 4160 4160 { 4161 longjmp(*CTX_SUFF(pVCpu->iem.s.pJmpBuf), VBOXSTRICTRC_VAL(iemRaisePageFault(pVCpu, GCPtrWhere, fAccess, rc)));4161 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(iemRaisePageFault(pVCpu, GCPtrWhere, fAccess, rc))); 4162 4162 } 4163 4163 #endif … … 4186 4186 DECL_NO_RETURN(void) iemRaiseAlignmentCheckExceptionJmp(PVMCPUCC pVCpu) IEM_NOEXCEPT_MAY_LONGJMP 4187 4187 { 4188 longjmp(*CTX_SUFF(pVCpu->iem.s.pJmpBuf), VBOXSTRICTRC_VAL(iemRaiseAlignmentCheckException(pVCpu)));4188 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(iemRaiseAlignmentCheckException(pVCpu))); 4189 4189 } 4190 4190 #endif … … 6159 6159 int rc = PGMPhysIemGCPhys2PtrNoLock(pVCpu->CTX_SUFF(pVM), pVCpu, pTlbe->GCPhys, &pVCpu->iem.s.DataTlb.uTlbPhysRev, 6160 6160 &pbMem, &pTlbe->fFlagsAndPhysRev); 6161 AssertRCStmt(rc, longjmp(*CTX_SUFF(pVCpu->iem.s.pJmpBuf), rc));6161 AssertRCStmt(rc, IEM_DO_LONGJMP(pVCpu, rc)); 6162 6162 # ifdef IN_RING3 6163 6163 pTlbe->pbMappingR3 = pbMem; … … 6315 6315 VBOXSTRICTRC rcStrict = iemMemApplySegment(pVCpu, fAccess, iSegReg, cbMem, &GCPtrMem); 6316 6316 if (rcStrict == VINF_SUCCESS) { /*likely*/ } 6317 else longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));6317 else IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 6318 6318 6319 6319 /* … … 6359 6359 pVCpu->iem.s.aMemMappings[0].fAccess, pVCpu->iem.s.aMemMappings[1].fAccess, 6360 6360 pVCpu->iem.s.aMemMappings[2].fAccess), 6361 longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VERR_IEM_IPE_9));6361 IEM_DO_LONGJMP(pVCpu, VERR_IEM_IPE_9)); 6362 6362 } 6363 6363 … … 6373 6373 if (rcStrict == VINF_SUCCESS) 6374 6374 return pvMem; 6375 longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));6375 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 6376 6376 } 6377 6377 … … 6489 6489 int rc = PGMPhysIemGCPhys2PtrNoLock(pVCpu->CTX_SUFF(pVM), pVCpu, pTlbe->GCPhys, &pVCpu->iem.s.DataTlb.uTlbPhysRev, 6490 6490 &pbMem, &pTlbe->fFlagsAndPhysRev); 6491 AssertRCStmt(rc, longjmp(*CTX_SUFF(pVCpu->iem.s.pJmpBuf), rc));6491 AssertRCStmt(rc, IEM_DO_LONGJMP(pVCpu, rc)); 6492 6492 # ifdef IN_RING3 6493 6493 pTlbe->pbMappingR3 = pbMem; … … 6509 6509 if (rcStrict == VINF_SUCCESS) 6510 6510 return pbMem; 6511 longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));6511 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 6512 6512 } 6513 6513 } … … 6527 6527 if (rcStrict == VINF_SUCCESS) 6528 6528 return pbMem; 6529 longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));6529 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 6530 6530 } 6531 6531 … … 6543 6543 rcStrict = iemMemPageTranslateAndCheckAccess(pVCpu, GCPtrMem, fAccess, &GCPhysFirst); 6544 6544 if (rcStrict == VINF_SUCCESS) { /*likely*/ } 6545 else longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));6545 else IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 6546 6546 6547 6547 if (fAccess & IEM_ACCESS_TYPE_WRITE) … … 6559 6559 if (rcStrict == VINF_SUCCESS) 6560 6560 return pvMem; 6561 longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));6561 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 6562 6562 } 6563 6563 … … 6587 6587 { 6588 6588 int iMemMap = iemMapLookup(pVCpu, pvMem, fAccess); 6589 AssertStmt(iMemMap >= 0, longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), iMemMap));6589 AssertStmt(iMemMap >= 0, IEM_DO_LONGJMP(pVCpu, iMemMap)); 6590 6590 6591 6591 /* If it's bounce buffered, we may need to write back the buffer. */ … … 6597 6597 if (rcStrict == VINF_SUCCESS) 6598 6598 return; 6599 longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VBOXSTRICTRC_VAL(rcStrict));6599 IEM_DO_LONGJMP(pVCpu, VBOXSTRICTRC_VAL(rcStrict)); 6600 6600 } 6601 6601 } … … 9288 9288 case 1: IEM_OPCODE_GET_NEXT_S8_SX_U16(&u16EffAddr); break; 9289 9289 case 2: IEM_OPCODE_GET_NEXT_U16(&u16EffAddr); break; 9290 default: AssertFailedStmt( longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VERR_IEM_IPE_1)); /* (caller checked for these) */9290 default: AssertFailedStmt(IEM_DO_LONGJMP(pVCpu, VERR_IEM_IPE_1)); /* (caller checked for these) */ 9291 9291 } 9292 9292 … … 9394 9394 } 9395 9395 default: 9396 AssertFailedStmt( longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), VERR_IEM_IPE_2)); /* (caller checked for these) */9396 AssertFailedStmt(IEM_DO_LONGJMP(pVCpu, VERR_IEM_IPE_2)); /* (caller checked for these) */ 9397 9397 } 9398 9398 } -
trunk/src/VBox/VMM/include/IEMInternal.h
r97464 r97466 65 65 #if defined(DOXYGEN_RUNNING) || defined(RT_OS_WINDOWS) || 1 66 66 # define IEM_WITH_SETJMP 67 #endif 68 69 /** @def IEM_DO_LONGJMP 70 * 71 * Wrapper around longjmp / throw. 72 * 73 * @param a_pVCpu The CPU handle. 74 * @param a_rc The status code jump back with / throw. 75 */ 76 #if defined(IEM_WITH_SETJMP) || defined(DOXYGEN_RUNNING) 77 # define IEM_DO_LONGJMP(a_pVCpu, a_rc) longjmp(*(a_pVCpu)->iem.s.CTX_SUFF(pJmpBuf), (a_rc)) 67 78 #endif 68 79 … … 866 877 { \ 867 878 int rcCtxImport = CPUMImportGuestStateOnDemand(a_pVCpu, a_fExtrnImport); \ 868 AssertRCStmt(rcCtxImport, longjmp(*pVCpu->iem.s.CTX_SUFF(pJmpBuf), rcCtxImport)); \879 AssertRCStmt(rcCtxImport, IEM_DO_LONGJMP(pVCpu, rcCtxImport)); \ 869 880 } \ 870 881 } while (0)
Note:
See TracChangeset
for help on using the changeset viewer.