Changeset 9675 in vbox for trunk/src/VBox/VMM/PATM
- Timestamp:
- Jun 13, 2008 9:49:54 AM (17 years ago)
- svn:sync-xref-src-repo-rev:
- 32013
- Location:
- trunk/src/VBox/VMM/PATM
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PATM/CSAM.cpp
r9659 r9675 2099 2099 * @returns VBox status code. 2100 2100 * @param pVM The VM to operate on. 2101 * @param Sel selector 2102 * @param pHiddenSel The hidden selector register. 2101 * @param pCtxCore CPU context 2103 2102 * @param pInstrGC Instruction pointer 2104 2103 */ 2105 CSAMR3DECL(int) CSAMR3CheckCodeEx(PVM pVM, RTSEL Sel, CPUMSELREGHID *pHiddenSel, RTRCPTR pInstrGC)2104 CSAMR3DECL(int) CSAMR3CheckCodeEx(PVM pVM, PCPUMCTXCORE pCtxCore, RTRCPTR pInstrGC) 2106 2105 { 2107 2106 if (EMIsRawRing0Enabled(pVM) == false || PATMIsPatchGCAddr(pVM, pInstrGC) == true) … … 2113 2112 if (CSAMIsEnabled(pVM)) 2114 2113 { 2115 X86EFLAGS fakeflags;2116 2117 /* we're not in v86 mode here */2118 fakeflags.u32 = 0;2119 2120 2114 /* Assuming 32 bits code for now. */ 2121 Assert(SELMGetCpuModeFromSelector(pVM, fakeflags, Sel, pHiddenSel) == CPUMODE_32BIT); 2122 2123 pInstrGC = SELMToFlat(pVM, fakeflags, Sel, pHiddenSel, pInstrGC); 2124 2115 Assert(SELMGetCpuModeFromSelector(pVM, pCtxCore->eflags, pCtxCore->cs, &pCtxCore->csHid) == CPUMODE_32BIT); 2116 2117 pInstrGC = SELMToFlat(pVM, DIS_SELREG_CS, pCtxCore, pInstrGC); 2125 2118 return CSAMR3CheckCode(pVM, pInstrGC); 2126 2119 } … … 2366 2359 CSAMP2GLOOKUPREC cacheRec = {0}; /* Cache record for PATMGCVirtToHCVirt. */ 2367 2360 PCSAMPAGE pPage = NULL; 2368 X86EFLAGS fakeflags;2369 2361 SELMSELINFO selInfo; 2370 2362 2371 /* we're not in v86 mode here */2372 fakeflags.u32 = 0;2373 2374 2363 pHandler = VBOXIDTE_OFFSET(*pGuestIdte); 2375 pHandler = SELMToFlat (pVM, fakeflags, pGuestIdte->Gen.u16SegSel, 0, pHandler);2364 pHandler = SELMToFlatBySel(pVM, pGuestIdte->Gen.u16SegSel, pHandler); 2376 2365 2377 2366 rc = SELMR3GetSelectorInfo(pVM, pGuestIdte->Gen.u16SegSel, &selInfo); -
trunk/src/VBox/VMM/PATM/PATM.cpp
r9228 r9675 1658 1658 /* mov ss, src? */ 1659 1659 if ( (pCpu->param1.flags & USE_REG_SEG) 1660 && (pCpu->param1.base.reg_seg == USE_REG_SS))1660 && (pCpu->param1.base.reg_seg == DIS_SELREG_SS)) 1661 1661 { 1662 1662 Log(("Force recompilation of next instruction for OP_MOV at %VRv\n", pCurInstrGC)); … … 3373 3373 3374 3374 pBranchTarget = pCtx->edx; 3375 pBranchTarget = SELMToFlat(pVM, pCtx->eflags, pCtx->cs, &pCtx->csHid, pBranchTarget);3375 pBranchTarget = SELMToFlat(pVM, DIS_SELREG_CS, CPUMCTX2CORE(pCtx), pBranchTarget); 3376 3376 3377 3377 /* First we check if the duplicate function target lies in some existing function patch already. Will save some space. */ … … 3987 3987 if (CPUMGetGuestCPL(pVM, CPUMCTX2CORE(pCtx)) == 0) 3988 3988 { 3989 RTRCPTR pInstrGCFlat = SELMToFlat(pVM, pCtx->eflags, pCtx->cs, &pCtx->csHid, pInstrGC);3989 RTRCPTR pInstrGCFlat = SELMToFlat(pVM, DIS_SELREG_CS, CPUMCTX2CORE(pCtx), pInstrGC); 3990 3990 if (pInstrGCFlat != pInstrGC) 3991 3991 { … … 6052 6052 6053 6053 /* continue at the original instruction */ 6054 *ppNewEip = pNewEip - SELMToFlat(pVM, pCtx->eflags, pCtx->cs, &pCtx->csHid, 0);6054 *ppNewEip = pNewEip - SELMToFlat(pVM, DIS_SELREG_CS, CPUMCTX2CORE(pCtx), 0); 6055 6055 STAM_PROFILE_ADV_STOP(&pVM->patm.s.StatHandleTrap, a); 6056 6056 return VINF_SUCCESS; … … 6119 6119 } 6120 6120 6121 *ppNewEip = pNewEip - SELMToFlat(pVM, pCtx->eflags, pCtx->cs, &pCtx->csHid, 0);6121 *ppNewEip = pNewEip - SELMToFlat(pVM, DIS_SELREG_CS, CPUMCTX2CORE(pCtx), 0); 6122 6122 STAM_PROFILE_ADV_STOP(&pVM->patm.s.StatHandleTrap, a); 6123 6123 return rc; … … 6152 6152 6153 6153 /* Return original address, correct by subtracting the CS base address. */ 6154 *ppNewEip = pNewEip - SELMToFlat(pVM, pCtx->eflags, pCtx->cs, &pCtx->csHid, 0);6154 *ppNewEip = pNewEip - SELMToFlat(pVM, DIS_SELREG_CS, CPUMCTX2CORE(pCtx), 0); 6155 6155 6156 6156 /* Reset the PATM stack. */
Note:
See TracChangeset
for help on using the changeset viewer.