VirtualBox

Changeset 61143 in vbox for trunk


Ignore:
Timestamp:
May 23, 2016 10:10:30 PM (9 years ago)
Author:
vboxsync
Message:

IEM: Added IEMExecOneBypassWithPrefetchedByPCWritten for debugging DISGetParamSize. Leaving in case it's useful later.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/vmm/iem.h

    r60907 r61143  
    106106VMMDECL(VBOXSTRICTRC)       IEMExecOneBypassWithPrefetchedByPC(PVMCPU pVCpu, PCPUMCTXCORE pCtxCore, uint64_t OpcodeBytesPC,
    107107                                                               const void *pvOpcodeBytes, size_t cbOpcodeBytes);
     108VMMDECL(VBOXSTRICTRC)       IEMExecOneBypassWithPrefetchedByPCWritten(PVMCPU pVCpu, PCPUMCTXCORE pCtxCore, uint64_t OpcodeBytesPC,
     109                                                                      const void *pvOpcodeBytes, size_t cbOpcodeBytes,
     110                                                                      uint32_t *pcbWritten);
    108111VMMDECL(VBOXSTRICTRC)       IEMExecLots(PVMCPU pVCpu);
    109112VMMDECL(VBOXSTRICTRC)       IEMInjectTrpmEvent(PVMCPU pVCpu);
  • trunk/src/VBox/VMM/VMMAll/IEMAll.cpp

    r61068 r61143  
    1142611426
    1142711427
     11428/**
     11429 * For debugging DISGetParamSize, may come in handy.
     11430 *
     11431 * @returns Strict VBox status code.
     11432 * @param   pVCpu           The cross context virtual CPU structure of the
     11433 *                          calling EMT.
     11434 * @param   pCtxCore        The context core structure.
     11435 * @param   OpcodeBytesPC   The PC of the opcode bytes.
     11436 * @param   pvOpcodeBytes   Prefeched opcode bytes.
     11437 * @param   cbOpcodeBytes   Number of prefetched bytes.
     11438 * @param   pcbWritten      Where to return the number of bytes written.
     11439 *                          Optional.
     11440 */
     11441VMMDECL(VBOXSTRICTRC)       IEMExecOneBypassWithPrefetchedByPCWritten(PVMCPU pVCpu, PCPUMCTXCORE pCtxCore, uint64_t OpcodeBytesPC,
     11442                                                                      const void *pvOpcodeBytes, size_t cbOpcodeBytes,
     11443                                                                      uint32_t *pcbWritten)
     11444{
     11445    PIEMCPU  pIemCpu = &pVCpu->iem.s;
     11446    PCPUMCTX pCtx    = pVCpu->iem.s.CTX_SUFF(pCtx);
     11447    AssertReturn(CPUMCTX2CORE(pCtx) == pCtxCore, VERR_IEM_IPE_3);
     11448
     11449    uint32_t const cbOldWritten = pIemCpu->cbWritten;
     11450    VBOXSTRICTRC rcStrict;
     11451    if (   cbOpcodeBytes
     11452        && pCtx->rip == OpcodeBytesPC)
     11453    {
     11454        iemInitDecoder(pIemCpu, true);
     11455        pIemCpu->cbOpcode = (uint8_t)RT_MIN(cbOpcodeBytes, sizeof(pIemCpu->abOpcode));
     11456        memcpy(pIemCpu->abOpcode, pvOpcodeBytes, pIemCpu->cbOpcode);
     11457        rcStrict = VINF_SUCCESS;
     11458    }
     11459    else
     11460        rcStrict = iemInitDecoderAndPrefetchOpcodes(pIemCpu, true);
     11461    if (rcStrict == VINF_SUCCESS)
     11462    {
     11463        rcStrict = iemExecOneInner(pVCpu, pIemCpu, false);
     11464        if (pcbWritten)
     11465            *pcbWritten = pIemCpu->cbWritten - cbOldWritten;
     11466    }
     11467
     11468#ifdef IN_RC
     11469    rcStrict = iemRCRawMaybeReenter(pIemCpu, pVCpu, pCtx, rcStrict);
     11470#endif
     11471    return rcStrict;
     11472}
     11473
     11474
    1142811475VMMDECL(VBOXSTRICTRC) IEMExecLots(PVMCPU pVCpu)
    1142911476{
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