Changeset 20344 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Jun 5, 2009 3:54:01 PM (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/VMMR0/HWSVMR0.cpp
r20343 r20344 2406 2406 static int svmR0ReplaceTprInstr(PVM pVM, PVMCPU pVCpu, PCPUMCTX pCtx) 2407 2407 { 2408 RTGCPTR oldrip = pCtx->rip; 2408 2409 DISCPUSTATE Cpu; 2409 unsigned cbOp;2410 unsigned cbOp; 2410 2411 2411 2412 Log(("Replace TPR access at %RGv\n", pCtx->rip)); … … 2416 2417 && Cpu.pCurInstr->opcode == OP_MOV) 2417 2418 { 2418 rc = svmR0EmulateTprMov(pVCpu, &Cpu, pCtx, cbOp);2419 if (rc != VINF_SUCCESS)2420 return rc;2421 2422 2419 uint8_t szInstr[15]; 2423 2420 if ( cbOp == 10 … … 2441 2438 * it does, then we can safely use it ourselves. 2442 2439 */ 2440 pCtx->rip += cbOp; 2443 2441 rc = EMInterpretDisasOne(pVM, pVCpu, CPUMCTX2CORE(pCtx), &Cpu, &cbOp); 2442 pCtx->rip = oldrip; 2444 2443 if ( rc == VINF_SUCCESS 2445 2444 && Cpu.pCurInstr->opcode == OP_MOV … … 2480 2479 * mov ecx, dword [fffe0080] (5 bytes) 2481 2480 */ 2481 pCtx->rip += cbOp; 2482 2482 rc = EMInterpretDisasOne(pVM, pVCpu, CPUMCTX2CORE(pCtx), &Cpu, &cbOp); 2483 pCtx->rip = oldrip; 2483 2484 if ( rc == VINF_SUCCESS 2484 2485 && Cpu.pCurInstr->opcode == OP_MOV … … 2527 2528 * shr eax, 4 2528 2529 */ 2530 pCtx->rip += cbOp; 2529 2531 rc = EMInterpretDisasOne(pVM, pVCpu, CPUMCTX2CORE(pCtx), &Cpu, &cbOp); 2532 pCtx->rip = oldrip; 2530 2533 if ( rc == VINF_SUCCESS 2531 2534 && Cpu.pCurInstr->opcode == OP_SHR … … 2551 2554 } 2552 2555 } 2556 rc = svmR0EmulateTprMov(pVCpu, &Cpu, pCtx, cbOp); 2557 if (rc != VINF_SUCCESS) 2558 return rc; 2559 2553 2560 /* Emulated successfully, so continue. */ 2554 2561 return VINF_SUCCESS;
Note:
See TracChangeset
for help on using the changeset viewer.