- Timestamp:
- Jul 3, 2013 5:53:48 PM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r46486 r46948 8590 8590 VMMDECL(VBOXSTRICTRC) IEMExecLots(PVMCPU pVCpu) 8591 8591 { 8592 return IEMExecOne(pVCpu); 8592 PIEMCPU pIemCpu = &pVCpu->iem.s; 8593 PCPUMCTX pCtx = pIemCpu->CTX_SUFF(pCtx); 8594 8595 /* 8596 * See if there is an interrupt pending in TRPM and inject it if we can. 8597 */ 8598 #ifdef IEM_VERIFICATION_MODE_FULL 8599 pIemCpu->uInjectCpl = UINT8_MAX; 8600 #endif 8601 if ( pCtx->eflags.Bits.u1IF 8602 && TRPMHasTrap(pVCpu) 8603 && EMGetInhibitInterruptsPC(pVCpu) != pCtx->rip) 8604 { 8605 uint8_t u8TrapNo; 8606 TRPMEVENT enmType; 8607 RTGCUINT uErrCode; 8608 RTGCPTR uCr2; 8609 int rc2 = TRPMQueryTrapAll(pVCpu, &u8TrapNo, &enmType, &uErrCode, &uCr2, NULL /* pu8InstLen */); AssertRC(rc2); 8610 IEMInjectTrap(pVCpu, u8TrapNo, enmType, (uint16_t)uErrCode, uCr2); 8611 if (!IEM_VERIFICATION_ENABLED(pIemCpu)) 8612 TRPMResetTrap(pVCpu); 8613 } 8614 8615 /* 8616 * Log the state. 8617 */ 8618 #ifdef LOG_ENABLED 8619 # ifdef IN_RING3 8620 if (LogIs2Enabled()) 8621 { 8622 char szInstr[256]; 8623 uint32_t cbInstr = 0; 8624 DBGFR3DisasInstrEx(pVCpu->pVMR3->pUVM, pVCpu->idCpu, 0, 0, 8625 DBGF_DISAS_FLAGS_CURRENT_GUEST | DBGF_DISAS_FLAGS_DEFAULT_MODE, 8626 szInstr, sizeof(szInstr), &cbInstr); 8627 8628 Log3(("**** " 8629 " eax=%08x ebx=%08x ecx=%08x edx=%08x esi=%08x edi=%08x\n" 8630 " eip=%08x esp=%08x ebp=%08x iopl=%d\n" 8631 " cs=%04x ss=%04x ds=%04x es=%04x fs=%04x gs=%04x efl=%08x\n" 8632 " fsw=%04x fcw=%04x ftw=%02x mxcsr=%04x/%04x\n" 8633 " %s\n" 8634 , 8635 pCtx->eax, pCtx->ebx, pCtx->ecx, pCtx->edx, pCtx->esi, pCtx->edi, 8636 pCtx->eip, pCtx->esp, pCtx->ebp, pCtx->eflags.Bits.u2IOPL, 8637 pCtx->cs.Sel, pCtx->ss.Sel, pCtx->ds.Sel, pCtx->es.Sel, 8638 pCtx->fs.Sel, pCtx->gs.Sel, pCtx->eflags.u, 8639 pCtx->fpu.FSW, pCtx->fpu.FCW, pCtx->fpu.FTW, pCtx->fpu.MXCSR, pCtx->fpu.MXCSR_MASK, 8640 szInstr)); 8641 8642 if (LogIs3Enabled()) 8643 DBGFR3Info(pVCpu->pVMR3->pUVM, "cpumguest", "verbose", NULL); 8644 } 8645 else 8646 # endif 8647 LogFlow(("IEMExecOne: cs:rip=%04x:%08RX64 ss:rsp=%04x:%08RX64 EFL=%06x\n", 8648 pCtx->cs.Sel, pCtx->rip, pCtx->ss.Sel, pCtx->rsp, pCtx->eflags.u)); 8649 #endif 8650 8651 /* 8652 * Do the decoding and emulation. 8653 */ 8654 VBOXSTRICTRC rcStrict = iemInitDecoderAndPrefetchOpcodes(pIemCpu, false); 8655 if (rcStrict == VINF_SUCCESS) 8656 rcStrict = iemExecOneInner(pVCpu, pIemCpu, true); 8657 8658 /* 8659 * Maybe re-enter raw-mode and log. 8660 */ 8661 #ifdef IN_RC 8662 rcStrict = iemRCRawMaybeReenter(pIemCpu, pVCpu, pIemCpu->CTX_SUFF(pCtx), rcStrict); 8663 #endif 8664 if (rcStrict != VINF_SUCCESS) 8665 LogFlow(("IEMExecOne: cs:rip=%04x:%08RX64 ss:rsp=%04x:%08RX64 EFL=%06x - rcStrict=%Rrc\n", 8666 pCtx->cs.Sel, pCtx->rip, pCtx->ss.Sel, pCtx->rsp, pCtx->eflags.u, VBOXSTRICTRC_VAL(rcStrict))); 8667 return rcStrict; 8593 8668 } 8594 8669
Note:
See TracChangeset
for help on using the changeset viewer.