VirtualBox

Changeset 46948 in vbox for trunk


Ignore:
Timestamp:
Jul 3, 2013 5:53:48 PM (12 years ago)
Author:
vboxsync
Message:

IEM: Interrupt fix for --execute-all-in-iem.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAll.cpp

    r46486 r46948  
    85908590VMMDECL(VBOXSTRICTRC) IEMExecLots(PVMCPU pVCpu)
    85918591{
    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;
    85938668}
    85948669
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette