- Timestamp:
- May 23, 2016 10:10:30 PM (9 years ago)
- Location:
- trunk
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/VBox/vmm/iem.h
r60907 r61143 106 106 VMMDECL(VBOXSTRICTRC) IEMExecOneBypassWithPrefetchedByPC(PVMCPU pVCpu, PCPUMCTXCORE pCtxCore, uint64_t OpcodeBytesPC, 107 107 const void *pvOpcodeBytes, size_t cbOpcodeBytes); 108 VMMDECL(VBOXSTRICTRC) IEMExecOneBypassWithPrefetchedByPCWritten(PVMCPU pVCpu, PCPUMCTXCORE pCtxCore, uint64_t OpcodeBytesPC, 109 const void *pvOpcodeBytes, size_t cbOpcodeBytes, 110 uint32_t *pcbWritten); 108 111 VMMDECL(VBOXSTRICTRC) IEMExecLots(PVMCPU pVCpu); 109 112 VMMDECL(VBOXSTRICTRC) IEMInjectTrpmEvent(PVMCPU pVCpu); -
trunk/src/VBox/VMM/VMMAll/IEMAll.cpp
r61068 r61143 11426 11426 11427 11427 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 */ 11441 VMMDECL(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 11428 11475 VMMDECL(VBOXSTRICTRC) IEMExecLots(PVMCPU pVCpu) 11429 11476 {
Note:
See TracChangeset
for help on using the changeset viewer.