Changeset 31636 in vbox
- Timestamp:
- Aug 13, 2010 12:03:15 PM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 64772
- Location:
- trunk
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/em.h
r30788 r31636 132 132 #define EMIsRawRing0Enabled(pVM) ((pVM)->fRawR0Enabled) 133 133 134 VMMDECL(void) EMSetInhibitInterruptsPC(PVMCPU pVCpu, RTGCUINTPTR PC);135 VMMDECL(RTGCUINTPTR) EMGetInhibitInterruptsPC(PVMCPU pVCpu);136 VMMDECL(int) EMInterpretDisasOne(PVM pVM, PVMCPU pVCpu, PCCPUMCTXCORE pCtxCore, PDISCPUSTATE pCpu, unsigned *pcbInstr);137 VMMDECL(int) EMInterpretDisasOneEx(PVM pVM, PVMCPU pVCpu, RTGCUINTPTR GCPtrInstr, PCCPUMCTXCORE pCtxCore,138 PDISCPUSTATE pDISState, unsigned *pcbInstr);139 VMMDECL( int)EMInterpretInstruction(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize);140 VMMDECL( int) EMInterpretInstructionCPUEx(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDISState, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize, EMCODETYPE enmCodeType);141 VMMDECL(int) EMInterpretCpuId(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame);142 VMMDECL(int) EMInterpretRdtsc(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame);143 VMMDECL(int) EMInterpretRdpmc(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame);144 VMMDECL(int) EMInterpretRdtscp(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx);145 VMMDECL( int)EMInterpretInvlpg(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pAddrGC);146 VMMDECL(int) EMInterpretIret(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame);147 VMMDECL( int)EMInterpretMWait(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame);148 VMMDECL(int) EMInterpretMonitor(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame);149 VMMDECL(int) EMInterpretDRxWrite(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegDrx, uint32_t SrcRegGen);150 VMMDECL(int) EMInterpretDRxRead(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegGen, uint32_t SrcRegDrx);151 VMMDECL(int) EMInterpretCRxWrite(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegCrx, uint32_t SrcRegGen);152 VMMDECL(int) EMInterpretCRxRead(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegGen, uint32_t SrcRegCrx);153 VMMDECL(int) EMInterpretLMSW(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint16_t u16Data);154 VMMDECL(int) EMInterpretCLTS(PVM pVM, PVMCPU pVCpu);134 VMMDECL(void) EMSetInhibitInterruptsPC(PVMCPU pVCpu, RTGCUINTPTR PC); 135 VMMDECL(RTGCUINTPTR) EMGetInhibitInterruptsPC(PVMCPU pVCpu); 136 VMMDECL(int) EMInterpretDisasOne(PVM pVM, PVMCPU pVCpu, PCCPUMCTXCORE pCtxCore, PDISCPUSTATE pCpu, unsigned *pcbInstr); 137 VMMDECL(int) EMInterpretDisasOneEx(PVM pVM, PVMCPU pVCpu, RTGCUINTPTR GCPtrInstr, PCCPUMCTXCORE pCtxCore, 138 PDISCPUSTATE pDISState, unsigned *pcbInstr); 139 VMMDECL(VBOXSTRICTRC) EMInterpretInstruction(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize); 140 VMMDECL(VBOXSTRICTRC) EMInterpretInstructionCPU(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDISState, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, EMCODETYPE enmCodeType, uint32_t *pcbSize); 141 VMMDECL(int) EMInterpretCpuId(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame); 142 VMMDECL(int) EMInterpretRdtsc(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame); 143 VMMDECL(int) EMInterpretRdpmc(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame); 144 VMMDECL(int) EMInterpretRdtscp(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx); 145 VMMDECL(VBOXSTRICTRC) EMInterpretInvlpg(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pAddrGC); 146 VMMDECL(int) EMInterpretIret(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame); 147 VMMDECL(VBOXSTRICTRC) EMInterpretMWait(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame); 148 VMMDECL(int) EMInterpretMonitor(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame); 149 VMMDECL(int) EMInterpretDRxWrite(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegDrx, uint32_t SrcRegGen); 150 VMMDECL(int) EMInterpretDRxRead(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegGen, uint32_t SrcRegDrx); 151 VMMDECL(int) EMInterpretCRxWrite(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegCrx, uint32_t SrcRegGen); 152 VMMDECL(int) EMInterpretCRxRead(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint32_t DestRegGen, uint32_t SrcRegCrx); 153 VMMDECL(int) EMInterpretLMSW(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, uint16_t u16Data); 154 VMMDECL(int) EMInterpretCLTS(PVM pVM, PVMCPU pVCpu); 155 155 VMMDECL(VBOXSTRICTRC) EMInterpretPortIO(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pCtxCore, PDISCPUSTATE pCpu, uint32_t cbOp); 156 VMMDECL(int) EMInterpretRdmsr(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame); 157 VMMDECL(int) EMInterpretWrmsr(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame); 158 VMMDECL(bool) EMShouldContinueAfterHalt(PVMCPU pVCpu, PCPUMCTX pCtx); 159 160 /** 161 * Wrap EMInterpretInstructionCPUEx for supervisor code only interpretation. 162 */ 163 DECLINLINE(int) EMInterpretInstructionCPU(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDISState, PCPUMCTXCORE pRegFrame, 164 RTGCPTR pvFault, uint32_t *pcbSize) 165 { 166 return EMInterpretInstructionCPUEx(pVM, pVCpu, pDISState, pRegFrame, pvFault, pcbSize, EMCODETYPE_SUPERVISOR); 167 } 156 VMMDECL(int) EMInterpretRdmsr(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame); 157 VMMDECL(int) EMInterpretWrmsr(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame); 158 VMMDECL(bool) EMShouldContinueAfterHalt(PVMCPU pVCpu, PCPUMCTX pCtx); 168 159 169 160 /** @name Assembly routines -
trunk/include/VBox/pgm.h
r31565 r31636 284 284 285 285 286 VMMDECL(bool) PGMIsLocked(PVM pVM);287 VMMDECL(bool) PGMIsLockOwner(PVM pVM);288 289 VMMDECL(int) PGMRegisterStringFormatTypes(void);290 VMMDECL(void) PGMDeregisterStringFormatTypes(void);291 VMMDECL(RTHCPHYS) PGMGetHyperCR3(PVMCPU pVCpu);292 VMMDECL(RTHCPHYS) PGMGetNestedCR3(PVMCPU pVCpu, PGMMODE enmShadowMode);293 VMMDECL(RTHCPHYS) PGMGetInterHCCR3(PVM pVM);294 VMMDECL(RTHCPHYS) PGMGetInterRCCR3(PVM pVM, PVMCPU pVCpu);295 VMMDECL(RTHCPHYS) PGMGetInter32BitCR3(PVM pVM);296 VMMDECL(RTHCPHYS) PGMGetInterPaeCR3(PVM pVM);297 VMMDECL(RTHCPHYS) PGMGetInterAmd64CR3(PVM pVM);298 VMMDECL(int) PGMTrap0eHandler(PVMCPU pVCpu, RTGCUINT uErr, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault);299 VMMDECL(int) PGMPrefetchPage(PVMCPU pVCpu, RTGCPTR GCPtrPage);300 VMMDECL(int) PGMVerifyAccess(PVMCPU pVCpu, RTGCPTR Addr, uint32_t cbSize, uint32_t fAccess);301 VMMDECL(int) PGMIsValidAccess(PVMCPU pVCpu, RTGCPTR Addr, uint32_t cbSize, uint32_t fAccess);302 VMMDECL( int)PGMInterpretInstruction(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault);303 VMMDECL(int) PGMMap(PVM pVM, RTGCPTR GCPtr, RTHCPHYS HCPhys, uint32_t cbPages, unsigned fFlags);304 VMMDECL(int) PGMMapSetPage(PVM pVM, RTGCPTR GCPtr, uint64_t cb, uint64_t fFlags);305 VMMDECL(int) PGMMapModifyPage(PVM pVM, RTGCPTR GCPtr, size_t cb, uint64_t fFlags, uint64_t fMask);286 VMMDECL(bool) PGMIsLocked(PVM pVM); 287 VMMDECL(bool) PGMIsLockOwner(PVM pVM); 288 289 VMMDECL(int) PGMRegisterStringFormatTypes(void); 290 VMMDECL(void) PGMDeregisterStringFormatTypes(void); 291 VMMDECL(RTHCPHYS) PGMGetHyperCR3(PVMCPU pVCpu); 292 VMMDECL(RTHCPHYS) PGMGetNestedCR3(PVMCPU pVCpu, PGMMODE enmShadowMode); 293 VMMDECL(RTHCPHYS) PGMGetInterHCCR3(PVM pVM); 294 VMMDECL(RTHCPHYS) PGMGetInterRCCR3(PVM pVM, PVMCPU pVCpu); 295 VMMDECL(RTHCPHYS) PGMGetInter32BitCR3(PVM pVM); 296 VMMDECL(RTHCPHYS) PGMGetInterPaeCR3(PVM pVM); 297 VMMDECL(RTHCPHYS) PGMGetInterAmd64CR3(PVM pVM); 298 VMMDECL(int) PGMTrap0eHandler(PVMCPU pVCpu, RTGCUINT uErr, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault); 299 VMMDECL(int) PGMPrefetchPage(PVMCPU pVCpu, RTGCPTR GCPtrPage); 300 VMMDECL(int) PGMVerifyAccess(PVMCPU pVCpu, RTGCPTR Addr, uint32_t cbSize, uint32_t fAccess); 301 VMMDECL(int) PGMIsValidAccess(PVMCPU pVCpu, RTGCPTR Addr, uint32_t cbSize, uint32_t fAccess); 302 VMMDECL(VBOXSTRICTRC) PGMInterpretInstruction(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault); 303 VMMDECL(int) PGMMap(PVM pVM, RTGCPTR GCPtr, RTHCPHYS HCPhys, uint32_t cbPages, unsigned fFlags); 304 VMMDECL(int) PGMMapSetPage(PVM pVM, RTGCPTR GCPtr, uint64_t cb, uint64_t fFlags); 305 VMMDECL(int) PGMMapModifyPage(PVM pVM, RTGCPTR GCPtr, size_t cb, uint64_t fFlags, uint64_t fMask); 306 306 #ifndef IN_RING0 307 VMMDECL(bool) PGMMapHasConflicts(PVM pVM);307 VMMDECL(bool) PGMMapHasConflicts(PVM pVM); 308 308 #endif 309 309 #ifdef VBOX_STRICT 310 VMMDECL(void) PGMMapCheck(PVM pVM);310 VMMDECL(void) PGMMapCheck(PVM pVM); 311 311 #endif 312 VMMDECL(int) PGMShwGetPage(PVMCPU pVCpu, RTGCPTR GCPtr, uint64_t *pfFlags, PRTHCPHYS pHCPhys);313 VMMDECL(int) PGMShwMakePageReadonly(PVMCPU pVCpu, RTGCPTR GCPtr, uint32_t fFlags);314 VMMDECL(int) PGMShwMakePageWritable(PVMCPU pVCpu, RTGCPTR GCPtr, uint32_t fFlags);315 VMMDECL(int) PGMShwMakePageNotPresent(PVMCPU pVCpu, RTGCPTR GCPtr, uint32_t fFlags);312 VMMDECL(int) PGMShwGetPage(PVMCPU pVCpu, RTGCPTR GCPtr, uint64_t *pfFlags, PRTHCPHYS pHCPhys); 313 VMMDECL(int) PGMShwMakePageReadonly(PVMCPU pVCpu, RTGCPTR GCPtr, uint32_t fFlags); 314 VMMDECL(int) PGMShwMakePageWritable(PVMCPU pVCpu, RTGCPTR GCPtr, uint32_t fFlags); 315 VMMDECL(int) PGMShwMakePageNotPresent(PVMCPU pVCpu, RTGCPTR GCPtr, uint32_t fFlags); 316 316 /** @name Flags for PGMShwMakePageReadonly, PGMShwMakePageWritable and 317 317 * PGMShwMakePageNotPresent -
trunk/src/VBox/VMM/EMRaw.cpp
r30263 r31636 690 690 691 691 uint32_t opsize; 692 rc = EMInterpretInstructionCPU(pVM, pVCpu, &cpu, CPUMCTX2CORE(pCtx), 0, &opsize);692 rc = VBOXSTRICTRC_TODO(EMInterpretInstructionCPU(pVM, pVCpu, &cpu, CPUMCTX2CORE(pCtx), 0, EMCODETYPE_SUPERVISOR, &opsize)); 693 693 if (RT_SUCCESS(rc)) 694 694 { … … 1184 1184 #endif 1185 1185 1186 rc = EMInterpretInstructionCPU(pVM, pVCpu, &Cpu, CPUMCTX2CORE(pCtx), 0, &size);1186 rc = VBOXSTRICTRC_TODO(EMInterpretInstructionCPU(pVM, pVCpu, &Cpu, CPUMCTX2CORE(pCtx), 0, EMCODETYPE_SUPERVISOR, &size)); 1187 1187 if (RT_SUCCESS(rc)) 1188 1188 { -
trunk/src/VBox/VMM/PATM/VMMGC/PATMGC.cpp
r31402 r31636 522 522 } 523 523 524 rc = EMInterpretInstructionCPU(pVM, VMMGetCpu0(pVM), &cpu, pRegFrame, 0 /* not relevant here */, &size); 524 rc = EMInterpretInstructionCPU(pVM, VMMGetCpu0(pVM), &cpu, pRegFrame, 0 /* not relevant here */, 525 EMCODETYPE_SUPERVISOR, &size); 525 526 if (rc != VINF_SUCCESS) 526 527 { -
trunk/src/VBox/VMM/VMMAll/EMAll.cpp
r31569 r31636 75 75 * Internal Functions * 76 76 *******************************************************************************/ 77 DECLINLINE(int) emInterpretInstructionCPU(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize, EMCODETYPE enmCodeType = EMCODETYPE_SUPERVISOR); 77 DECLINLINE(VBOXSTRICTRC) emInterpretInstructionCPU(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCORE pRegFrame, 78 RTGCPTR pvFault, EMCODETYPE enmCodeType, uint32_t *pcbSize); 78 79 79 80 … … 311 312 * to worry about e.g. invalid modrm combinations (!) 312 313 */ 313 VMMDECL( int) EMInterpretInstruction(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize)314 VMMDECL(VBOXSTRICTRC) EMInterpretInstruction(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize) 314 315 { 315 316 RTGCPTR pbCode; 316 317 317 318 LogFlow(("EMInterpretInstruction %RGv fault %RGv\n", (RTGCPTR)pRegFrame->rip, pvFault)); 318 intrc = SELMToFlatEx(pVM, DIS_SELREG_CS, pRegFrame, pRegFrame->rip, 0, &pbCode);319 VBOXSTRICTRC rc = SELMToFlatEx(pVM, DIS_SELREG_CS, pRegFrame, pRegFrame->rip, 0, &pbCode); 319 320 if (RT_SUCCESS(rc)) 320 321 { … … 326 327 { 327 328 Assert(cbOp == pDis->opsize); 328 rc = EMInterpretInstructionCPU(pVM, pVCpu, pDis, pRegFrame, pvFault, pcbSize);329 rc = EMInterpretInstructionCPU(pVM, pVCpu, pDis, pRegFrame, pvFault, EMCODETYPE_SUPERVISOR, pcbSize); 329 330 if (RT_SUCCESS(rc)) 330 331 pRegFrame->rip += cbOp; /* Move on to the next instruction. */ … … 342 343 * EIP is *NOT* updated! 343 344 * 344 * @returns VBox st atus code.345 * @returns VBox strict status code. 345 346 * @retval VINF_* Scheduling instructions. When these are returned, it 346 347 * starts to get a bit tricky to know whether code was … … 365 366 * Make sure this can't happen!! (will add some assertions/checks later) 366 367 */ 367 VMMDECL(int) EMInterpretInstructionCPUEx(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize, EMCODETYPE enmCodeType) 368 VMMDECL(VBOXSTRICTRC) EMInterpretInstructionCPU(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCORE pRegFrame, 369 RTGCPTR pvFault, EMCODETYPE enmCodeType, uint32_t *pcbSize) 368 370 { 369 371 STAM_PROFILE_START(&pVCpu->em.s.CTX_SUFF(pStats)->CTX_MID_Z(Stat,Emulate), a); 370 int rc = emInterpretInstructionCPU(pVM, pVCpu, pDis, pRegFrame, pvFault, pcbSize, enmCodeType);372 VBOXSTRICTRC rc = emInterpretInstructionCPU(pVM, pVCpu, pDis, pRegFrame, pvFault, enmCodeType, pcbSize); 371 373 STAM_PROFILE_STOP(&pVCpu->em.s.CTX_SUFF(pStats)->CTX_MID_Z(Stat,Emulate), a); 372 374 if (RT_SUCCESS(rc)) … … 1765 1767 * 1766 1768 */ 1767 VMMDECL(int) EMInterpretInvlpg(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pAddrGC) 1768 { 1769 int rc; 1770 1769 VMMDECL(VBOXSTRICTRC) EMInterpretInvlpg(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pAddrGC) 1770 { 1771 1771 /** @todo is addr always a flat linear address or ds based 1772 1772 * (in absence of segment override prefixes)???? … … 1775 1775 LogFlow(("RC: EMULATE: invlpg %RGv\n", pAddrGC)); 1776 1776 #endif 1777 rc = PGMInvalidatePage(pVCpu, pAddrGC);1777 VBOXSTRICTRC rc = PGMInvalidatePage(pVCpu, pAddrGC); 1778 1778 if ( rc == VINF_SUCCESS 1779 1779 || rc == VINF_PGM_SYNC_CR3 /* we can rely on the FF */) 1780 1780 return VINF_SUCCESS; 1781 1781 AssertMsgReturn(rc == VINF_EM_RAW_EMULATE_INSTR, 1782 ("%Rrc addr=%RGv\n", rc, pAddrGC),1782 ("%Rrc addr=%RGv\n", VBOXSTRICTRC_VAL(rc), pAddrGC), 1783 1783 VERR_EM_INTERPRETER); 1784 1784 return rc; … … 1789 1789 * INVLPG Emulation. 1790 1790 */ 1791 static intemInterpretInvlPg(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize)1791 static VBOXSTRICTRC emInterpretInvlPg(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize) 1792 1792 { 1793 1793 OP_PARAMVAL param1; 1794 1794 RTGCPTR addr; 1795 1795 1796 intrc = DISQueryParamVal(pRegFrame, pDis, &pDis->param1, ¶m1, PARAM_SOURCE);1796 VBOXSTRICTRC rc = DISQueryParamVal(pRegFrame, pDis, &pDis->param1, ¶m1, PARAM_SOURCE); 1797 1797 if(RT_FAILURE(rc)) 1798 1798 return VERR_EM_INTERPRETER; … … 1822 1822 return VINF_SUCCESS; 1823 1823 AssertMsgReturn(rc == VINF_EM_RAW_EMULATE_INSTR, 1824 ("%Rrc addr=%RGv\n", rc, addr),1824 ("%Rrc addr=%RGv\n", VBOXSTRICTRC_VAL(rc), addr), 1825 1825 VERR_EM_INTERPRETER); 1826 1826 return rc; … … 2426 2426 * HLT Emulation. 2427 2427 */ 2428 static int emInterpretHlt(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize) 2428 static VBOXSTRICTRC 2429 emInterpretHlt(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize) 2429 2430 { 2430 2431 return VINF_EM_HALT; … … 2573 2574 * MWAIT Emulation. 2574 2575 */ 2575 VMMDECL( int) EMInterpretMWait(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame)2576 VMMDECL(VBOXSTRICTRC) EMInterpretMWait(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame) 2576 2577 { 2577 2578 uint32_t u32Dummy, u32ExtFeatures, cpl, u32MWaitFeatures; … … 2617 2618 } 2618 2619 2619 static intemInterpretMWait(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize)2620 static VBOXSTRICTRC emInterpretMWait(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, uint32_t *pcbSize) 2620 2621 { 2621 2622 return EMInterpretMWait(pVM, pVCpu, pRegFrame); … … 2802 2803 * @copydoc EMInterpretInstructionCPU 2803 2804 */ 2804 DECLINLINE( int) emInterpretInstructionCPU(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault,2805 uint32_t *pcbSize, EMCODETYPE enmCodeType)2805 DECLINLINE(VBOXSTRICTRC) emInterpretInstructionCPU(PVM pVM, PVMCPU pVCpu, PDISCPUSTATE pDis, PCPUMCTXCORE pRegFrame, 2806 RTGCPTR pvFault, EMCODETYPE enmCodeType, uint32_t *pcbSize) 2806 2807 { 2807 2808 Assert(enmCodeType == EMCODETYPE_SUPERVISOR || enmCodeType == EMCODETYPE_ALL); … … 2942 2943 #endif 2943 2944 2944 intrc;2945 VBOXSTRICTRC rc; 2945 2946 #if (defined(VBOX_STRICT) || defined(LOG_ENABLED)) 2946 2947 LogFlow(("emInterpretInstructionCPU %s\n", emGetMnemonic(pDis))); -
trunk/src/VBox/VMM/VMMAll/PGMAll.cpp
r31565 r31636 694 694 * Emulation of the invlpg instruction (HC only actually). 695 695 * 696 * @returns VBox status code, special care required.696 * @returns Strict VBox status code, special care required. 697 697 * @retval VINF_PGM_SYNC_CR3 - handled. 698 698 * @retval VINF_EM_RAW_EMULATE_INSTR - not handled (RC only). … … 706 706 * 707 707 * @todo Flush page or page directory only if necessary! 708 * @todo VBOXSTRICTRC 708 709 */ 709 710 VMMDECL(int) PGMInvalidatePage(PVMCPU pVCpu, RTGCPTR GCPtrPage) … … 797 798 * @param pvFault Fault address. 798 799 */ 799 VMMDECL( int) PGMInterpretInstruction(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault)800 VMMDECL(VBOXSTRICTRC) PGMInterpretInstruction(PVM pVM, PVMCPU pVCpu, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault) 800 801 { 801 802 uint32_t cb; 802 intrc = EMInterpretInstruction(pVM, pVCpu, pRegFrame, pvFault, &cb);803 VBOXSTRICTRC rc = EMInterpretInstruction(pVM, pVCpu, pRegFrame, pvFault, &cb); 803 804 if (rc == VERR_EM_INTERPRETER) 804 805 rc = VINF_EM_RAW_EMULATE_INSTR; 805 806 if (rc != VINF_SUCCESS) 806 Log(("PGMInterpretInstruction: returns %Rrc (pvFault=%RGv)\n", rc, pvFault));807 Log(("PGMInterpretInstruction: returns %Rrc (pvFault=%RGv)\n", VBOXSTRICTRC_VAL(rc), pvFault)); 807 808 return rc; 808 809 } -
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r31612 r31636 385 385 * It's writing to an unhandled part of the LDT page several million times. 386 386 */ 387 rc = PGMInterpretInstruction(pVM, pVCpu, pRegFrame, pvFault);387 rc = VBOXSTRICTRC_TODO(PGMInterpretInstruction(pVM, pVCpu, pRegFrame, pvFault)); 388 388 LogFlow(("PGM: PGMInterpretInstruction -> rc=%d pPage=%R[pgmpage]\n", rc, pPage)); 389 389 STAM_STATS({ pVCpu->pgm.s.CTX_SUFF(pStatTrap0eAttribution) = &pVCpu->pgm.s.CTX_SUFF(pStats)->StatRZTrap0eTime2HndUnhandled; }); … … 799 799 our shadow page tables. (Required for e.g. Solaris guests; soft 800 800 ecc, random nr generator.) */ 801 rc = PGMInterpretInstruction(pVM, pVCpu, pRegFrame, pvFault);801 rc = VBOXSTRICTRC_TODO(PGMInterpretInstruction(pVM, pVCpu, pRegFrame, pvFault)); 802 802 LogFlow(("PGM: PGMInterpretInstruction balloon -> rc=%d pPage=%R[pgmpage]\n", rc, pPage)); 803 803 STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_SUFF(pStats)->CTX_MID_Z(Stat,PageOutOfSyncBallloon)); … … 946 946 { 947 947 Assert((uErr & (X86_TRAP_PF_RW | X86_TRAP_PF_P)) == (X86_TRAP_PF_RW | X86_TRAP_PF_P)); 948 rc = PGMInterpretInstruction(pVM, pVCpu, pRegFrame, pvFault);948 rc = VBOXSTRICTRC_TODO(PGMInterpretInstruction(pVM, pVCpu, pRegFrame, pvFault)); 949 949 if (RT_SUCCESS(rc)) 950 950 STAM_COUNTER_INC(&pVCpu->pgm.s.CTX_SUFF(pStats)->StatRZTrap0eWPEmulInRZ); -
trunk/src/VBox/VMM/VMMAll/PGMAllPool.cpp
r31593 r31636 120 120 * @param pPool The pool. 121 121 * @param pPage A page in the chain. 122 * @todo VBOXSTRICTRC 122 123 */ 123 124 int pgmPoolMonitorChainFlush(PPGMPOOL pPool, PPGMPOOLPAGE pPage) … … 852 853 * @param GCPhysFault The fault address as guest physical address. 853 854 * @param pvFault The fault address. 855 * @todo VBOXSTRICTRC 854 856 */ 855 857 static int pgmPoolAccessHandlerFlush(PVM pVM, PVMCPU pVCpu, PPGMPOOL pPool, PPGMPOOLPAGE pPage, PDISCPUSTATE pDis, … … 862 864 863 865 /* 864 * Emulate the instruction (xp/w2k problem, requires pc/cr2/sp detection). Must do this in raw mode (!); XP boot will fail otherwise 866 * Emulate the instruction (xp/w2k problem, requires pc/cr2/sp detection). 867 * Must do this in raw mode (!); XP boot will fail otherwise. 865 868 */ 866 869 uint32_t cbWritten; 867 int rc2 = EMInterpretInstructionCPUEx(pVM, pVCpu, pDis, pRegFrame, pvFault, &cbWritten, EMCODETYPE_ALL);870 VBOXSTRICTRC rc2 = EMInterpretInstructionCPU(pVM, pVCpu, pDis, pRegFrame, pvFault, EMCODETYPE_ALL, &cbWritten); 868 871 if (RT_SUCCESS(rc2)) 872 { 869 873 pRegFrame->rip += pDis->opsize; 874 AssertMsg(rc2 == VINF_SUCCESS, ("%Rrc\n", VBOXSTRICTRC_VAL(rc2))); /* ASSUMES no complicated stuff here. */ 875 } 870 876 else if (rc2 == VERR_EM_INTERPRETER) 871 877 { … … 886 892 } 887 893 else 888 rc = rc2;894 rc = VBOXSTRICTRC_VAL(rc2); 889 895 890 896 LogFlow(("pgmPoolAccessHandlerPT: returns %Rrc (flushed)\n", rc)); … … 1002 1008 */ 1003 1009 uint32_t cb; 1004 int rc = EMInterpretInstructionCPUEx(pVM, pVCpu, pDis, pRegFrame, pvFault, &cb, EMCODETYPE_ALL);1010 VBOXSTRICTRC rc = EMInterpretInstructionCPU(pVM, pVCpu, pDis, pRegFrame, pvFault, EMCODETYPE_ALL, &cb); 1005 1011 if (RT_SUCCESS(rc)) 1012 { 1006 1013 pRegFrame->rip += pDis->opsize; 1014 AssertMsg(rc == VINF_SUCCESS, ("%Rrc\n", VBOXSTRICTRC_VAL(rc))); /* ASSUMES no complicated stuff here. */ 1015 } 1007 1016 else if (rc == VERR_EM_INTERPRETER) 1008 1017 { … … 1043 1052 #endif 1044 1053 1045 LogFlow(("pgmPoolAccessHandlerSimple: returns %Rrc cb=%d\n", rc, cb));1046 return rc;1054 LogFlow(("pgmPoolAccessHandlerSimple: returns %Rrc cb=%d\n", VBOXSTRICTRC_VAL(rc), cb)); 1055 return VBOXSTRICTRC_VAL(rc); 1047 1056 } 1048 1057 -
trunk/src/VBox/VMM/VMMGC/TRPMGCHandlers.cpp
r31402 r31636 549 549 LogFlow(("TRPMGCTrap06Handler: -> EMInterpretInstructionCPU\n")); 550 550 uint32_t cbIgnored; 551 rc = EMInterpretInstructionCPU(pVM, pVCpu, &Cpu, pRegFrame, PC, &cbIgnored);551 rc = EMInterpretInstructionCPU(pVM, pVCpu, &Cpu, pRegFrame, PC, EMCODETYPE_SUPERVISOR, &cbIgnored); 552 552 if (RT_SUCCESS(rc)) 553 553 pRegFrame->eip += Cpu.opsize; … … 794 794 { 795 795 uint32_t cbIgnored; 796 rc = EMInterpretInstructionCPU(pVM, pVCpu, pCpu, pRegFrame, PC, &cbIgnored);796 rc = EMInterpretInstructionCPU(pVM, pVCpu, pCpu, pRegFrame, PC, EMCODETYPE_SUPERVISOR, &cbIgnored); 797 797 if (RT_SUCCESS(rc)) 798 798 pRegFrame->eip += pCpu->opsize; … … 873 873 { 874 874 uint32_t cbIgnored; 875 rc = EMInterpretInstructionCPU(pVM, pVCpu, pCpu, pRegFrame, PC, &cbIgnored);875 rc = EMInterpretInstructionCPU(pVM, pVCpu, pCpu, pRegFrame, PC, EMCODETYPE_SUPERVISOR, &cbIgnored); 876 876 if (RT_SUCCESS(rc)) 877 877 pRegFrame->eip += pCpu->opsize; -
trunk/src/VBox/VMM/VMMR0/HWVMXR0.cpp
r31569 r31636 3290 3290 3291 3291 default: 3292 rc = EMInterpretInstructionCPU(pVM, pVCpu, pDis, CPUMCTX2CORE(pCtx), 0, &cbSize);3292 rc = EMInterpretInstructionCPU(pVM, pVCpu, pDis, CPUMCTX2CORE(pCtx), 0, EMCODETYPE_SUPERVISOR, &cbSize); 3293 3293 break; 3294 3294 } -
trunk/src/recompiler/VBoxREMWrapper.cpp
r31161 r31636 518 518 }; 519 519 520 /* EMInterpretInstructionCPU Exargs */521 static const REMPARMDESC g_aArgsEMInterpretInstructionCPU Ex[] =520 /* EMInterpretInstructionCPU args */ 521 static const REMPARMDESC g_aArgsEMInterpretInstructionCPU[] = 522 522 { 523 523 { REMPARMDESC_FLAGS_INT, sizeof(PVM), NULL }, … … 526 526 { REMPARMDESC_FLAGS_INT, sizeof(PCPUMCTXCORE), NULL }, 527 527 { REMPARMDESC_FLAGS_GCPTR, sizeof(RTGCPTR), NULL }, 528 { REMPARMDESC_FLAGS_INT, sizeof( uint32_t *), NULL },529 { REMPARMDESC_FLAGS_INT, sizeof( EMCODETYPE), NULL }528 { REMPARMDESC_FLAGS_INT, sizeof(EMCODETYPE), NULL }, 529 { REMPARMDESC_FLAGS_INT, sizeof(uint32_t *), NULL } 530 530 }; 531 531 … … 1292 1292 { "VMR3GetVMCPUId", VMM_FN(VMR3GetVMCPUId), &g_aArgsVM[0], RT_ELEMENTS(g_aArgsVM), REMFNDESC_FLAGS_RET_INT, sizeof(int), NULL }, 1293 1293 { "VMR3GetVMCPUNativeThread", VMM_FN(VMR3GetVMCPUNativeThread), &g_aArgsVM[0], RT_ELEMENTS(g_aArgsVM), REMFNDESC_FLAGS_RET_INT, sizeof(void *), NULL }, 1294 { "EMInterpretInstructionCPU Ex", VMM_FN(EMInterpretInstructionCPUEx), &g_aArgsEMInterpretInstructionCPUEx[0], RT_ELEMENTS(g_aArgsEMInterpretInstructionCPUEx), REMFNDESC_FLAGS_RET_INT, sizeof(int), NULL },1294 { "EMInterpretInstructionCPU", VMM_FN(EMInterpretInstructionCPU), &g_aArgsEMInterpretInstructionCPU[0], RT_ELEMENTS(g_aArgsEMInterpretInstructionCPU), REMFNDESC_FLAGS_RET_INT, sizeof(int), NULL }, 1295 1295 // { "", VMM_FN(), &g_aArgsVM[0], RT_ELEMENTS(g_aArgsVM), REMFNDESC_FLAGS_RET_INT, sizeof(int), NULL }, 1296 1296 };
Note:
See TracChangeset
for help on using the changeset viewer.