- Timestamp:
- Apr 12, 2007 1:23:27 PM (18 years ago)
- Location:
- trunk/src/VBox/VMM/PATM
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PATM/PATM.cpp
r2043 r2046 1652 1652 1653 1653 case OP_MOV: 1654 if (pCpu->pCurInstr->optype & OPTYPE_INHIBIT_IRQS) 1655 { 1656 Assert(pCpu->pCurInstr->param1 == OP_PARM_Sw && (pCpu->param1.flags & USE_REG_SEG)); 1657 1654 if (pCpu->pCurInstr->optype & OPTYPE_POTENTIALLY_DANGEROUS) 1655 { 1658 1656 /* mov ss, src? */ 1659 1657 if ( (pCpu->param1.flags & USE_REG_SEG) … … 1664 1662 /** @todo this could cause a fault (ring 0 selector being loaded in ring 1) */ 1665 1663 } 1666 #if 01667 1664 else 1668 1665 if ( (pCpu->param2.flags & USE_REG_SEG) … … 1671 1668 { 1672 1669 /* mov GPR, ss */ 1673 rc = patmPatchGenMovFromSS(pVM, pPatch, pCpu );1670 rc = patmPatchGenMovFromSS(pVM, pPatch, pCpu, pCurInstrGC); 1674 1671 if (VBOX_SUCCESS(rc)) 1675 1672 rc = VWRN_CONTINUE_RECOMPILE; 1676 1673 break; 1677 1674 } 1678 #endif1679 1675 } 1680 1676 goto duplicate_instr; -
trunk/src/VBox/VMM/PATM/PATMA.asm
r2043 r2046 2557 2557 DD 0 2558 2558 DD 0 2559 DD 0 2559 2560 DD PATMMovFromSS_Start_End - PATMMovFromSS_Start 2560 DD 02561 2561 DD 0 2562 2562 DD 0ffffffffh -
trunk/src/VBox/VMM/PATM/PATMPatch.cpp
r2043 r2046 1281 1281 * mov GPR, SS 1282 1282 */ 1283 int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu )1283 int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC) 1284 1284 { 1285 1285 uint32_t size, offset; 1286 1286 1287 PATCHGEN_PROLOG(pVM, pPatch); 1288 size = patmPatchGenCode(pVM, pPatch, pPB, &PATMSetPIFRecord, 0, false); 1287 Log(("patmPatchGenMovFromSS %VGv\n", pCurInstrGC)); 1288 1289 PATCHGEN_PROLOG(pVM, pPatch); 1290 size = patmPatchGenCode(pVM, pPatch, pPB, &PATMClearPIFRecord, 0, false); 1289 1291 PATCHGEN_EPILOG(pPatch, size); 1290 1292 … … 1299 1301 if (pPatch->flags & PATMFL_CODE32) 1300 1302 pPB[offset++] = 0x66; /* size override -> 16 bits pop */ 1301 pPB[offset++] = 0x5 0+ pCpu->param1.base.reg_gen32;1303 pPB[offset++] = 0x58 + pCpu->param1.base.reg_gen32; 1302 1304 PATCHGEN_EPILOG(pPatch, offset); 1303 1305 1304 1306 1305 1307 PATCHGEN_PROLOG_NODEF(pVM, pPatch); 1306 size = patmPatchGenCode(pVM, pPatch, pPB, &PATM ClearPIFRecord, 0, false);1308 size = patmPatchGenCode(pVM, pPatch, pPB, &PATMSetPIFRecord, 0, false); 1307 1309 PATCHGEN_EPILOG(pPatch, size); 1308 1310 -
trunk/src/VBox/VMM/PATM/PATMPatch.h
r2043 r2046 30 30 int patmPatchGenMovControl(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu); 31 31 int patmPatchGenMovDebug(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu); 32 int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu );32 int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC); 33 33 int patmPatchGenRelJump(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *)pTargetGC, uint32_t opcode, bool fSizeOverride); 34 34 int patmPatchGenLoop(PVM pVM, PPATCHINFO pPatch, GCPTRTYPE(uint8_t *)pTargetGC, uint32_t opcode, bool fSizeOverride);
Note:
See TracChangeset
for help on using the changeset viewer.