Changeset 9344 in vbox for trunk/src/VBox/VMM
- Timestamp:
- Jun 3, 2008 9:49:14 AM (17 years ago)
- svn:sync-xref-src-repo-rev:
- 31559
- Location:
- trunk/src/VBox/VMM
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PATM/CSAM.cpp
r9228 r9344 74 74 static DECLCALLBACK(int) CSAMCodePageInvalidate(PVM pVM, RTGCPTR GCPtr); 75 75 76 bool csamIsCodeScanned(PVM pVM, RT GCPTR32pInstr, PCSAMPAGE *pPage);77 int csamR3CheckPageRecord(PVM pVM, RT GCPTR32pInstr);78 static PCSAMPAGE csamCreatePageRecord(PVM pVM, RT GCPTR32GCPtr, CSAMTAG enmTag, bool fCode32, bool fMonitorInvalidation = false);79 static int csamRemovePageRecord(PVM pVM, RT GCPTR32GCPtr);76 bool csamIsCodeScanned(PVM pVM, RTRCPTR pInstr, PCSAMPAGE *pPage); 77 int csamR3CheckPageRecord(PVM pVM, RTRCPTR pInstr); 78 static PCSAMPAGE csamCreatePageRecord(PVM pVM, RTRCPTR GCPtr, CSAMTAG enmTag, bool fCode32, bool fMonitorInvalidation = false); 79 static int csamRemovePageRecord(PVM pVM, RTRCPTR GCPtr); 80 80 static int csamReinit(PVM pVM); 81 static void csamMarkCode(PVM pVM, PCSAMPAGE pPage, RT GCPTR32pInstr, uint32_t opsize, bool fScanned);81 static void csamMarkCode(PVM pVM, PCSAMPAGE pPage, RTRCPTR pInstr, uint32_t opsize, bool fScanned); 82 82 static int csamAnalyseCodeStream(PVM pVM, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, bool fCode32, 83 83 PFN_CSAMR3ANALYSE pfnCSAMR3Analyse, void *pUserData, PCSAMP2GLOOKUPREC pCacheRec); … … 118 118 rc = MMR3HyperAllocOnceNoRel(pVM, CSAM_PGDIRBMP_CHUNKS*sizeof(RTHCPTR), 0, MM_TAG_CSAM, (void **)&pVM->csam.s.pPDBitmapHC); 119 119 AssertRCReturn(rc, rc); 120 rc = MMR3HyperAllocOnceNoRel(pVM, CSAM_PGDIRBMP_CHUNKS*sizeof(RT GCPTR32), 0, MM_TAG_CSAM, (void **)&pVM->csam.s.pPDGCBitmapHC);120 rc = MMR3HyperAllocOnceNoRel(pVM, CSAM_PGDIRBMP_CHUNKS*sizeof(RTRCPTR), 0, MM_TAG_CSAM, (void **)&pVM->csam.s.pPDGCBitmapHC); 121 121 AssertRCReturn(rc, rc); 122 122 pVM->csam.s.pPDBitmapGC = MMHyperHC2GC(pVM, pVM->csam.s.pPDGCBitmapHC); … … 612 612 for (int i=0;i<orgsize;i++) 613 613 { 614 int rc = PATMR3QueryOpcode(pVM, (RT GCPTR32)pSrc, pDest);614 int rc = PATMR3QueryOpcode(pVM, (RTRCPTR)pSrc, pDest); 615 615 if (VBOX_SUCCESS(rc)) 616 616 { … … 642 642 } 643 643 644 inline int CSAMR3DISInstr(PVM pVM, DISCPUSTATE *pCpu, RT GCPTR32InstrGC, uint8_t *InstrHC, uint32_t *pOpsize, char *pszOutput)644 inline int CSAMR3DISInstr(PVM pVM, DISCPUSTATE *pCpu, RTRCPTR InstrGC, uint8_t *InstrHC, uint32_t *pOpsize, char *pszOutput) 645 645 { 646 646 (pCpu)->pfnReadBytes = CSAMR3ReadBytes; … … 1270 1270 ) 1271 1271 { 1272 RT GCPTR32 pJumpTableGC = (RTGCPTR32)cpu.param1.disp32;1272 RTRCPTR pJumpTableGC = (RTRCPTR)cpu.param1.disp32; 1273 1273 uint8_t *pJumpTableHC; 1274 1274 int rc2; … … 1288 1288 break; 1289 1289 1290 addr = *(RT GCPTR32*)(pJumpTableHC + cpu.param1.scale * i);1290 addr = *(RTRCPTR *)(pJumpTableHC + cpu.param1.scale * i); 1291 1291 1292 1292 rc2 = PGMGstGetPage(pVM, addr, &fFlags, NULL); … … 1346 1346 * @param pInstr Page address 1347 1347 */ 1348 uint64_t csamR3CalcPageHash(PVM pVM, RT GCPTR32pInstr)1348 uint64_t csamR3CalcPageHash(PVM pVM, RTRCPTR pInstr) 1349 1349 { 1350 1350 uint64_t hash = 0; … … 1411 1411 * @param fRemovePage Page removal flag 1412 1412 */ 1413 static int csamFlushPage(PVM pVM, RT GCPTR32addr, bool fRemovePage)1413 static int csamFlushPage(PVM pVM, RTRCPTR addr, bool fRemovePage) 1414 1414 { 1415 1415 PCSAMPAGEREC pPageRec; … … 1518 1518 * @param addr GC address of the page to flush 1519 1519 */ 1520 CSAMR3DECL(int) CSAMR3FlushPage(PVM pVM, RT GCPTR32addr)1520 CSAMR3DECL(int) CSAMR3FlushPage(PVM pVM, RTRCPTR addr) 1521 1521 { 1522 1522 return csamFlushPage(pVM, addr, true /* remove page record */); … … 1530 1530 * @param addr GC address of the page to flush 1531 1531 */ 1532 CSAMR3DECL(int) CSAMR3RemovePage(PVM pVM, RT GCPTR32addr)1532 CSAMR3DECL(int) CSAMR3RemovePage(PVM pVM, RTRCPTR addr) 1533 1533 { 1534 1534 PCSAMPAGEREC pPageRec; … … 1555 1555 * @param pInstrGC GC instruction pointer 1556 1556 */ 1557 int csamR3CheckPageRecord(PVM pVM, RT GCPTR32pInstrGC)1557 int csamR3CheckPageRecord(PVM pVM, RTRCPTR pInstrGC) 1558 1558 { 1559 1559 PCSAMPAGEREC pPageRec; … … 1602 1602 * @param fMonitorInvalidation Monitor page invalidation flag 1603 1603 */ 1604 static PCSAMPAGE csamCreatePageRecord(PVM pVM, RT GCPTR32GCPtr, CSAMTAG enmTag, bool fCode32, bool fMonitorInvalidation)1604 static PCSAMPAGE csamCreatePageRecord(PVM pVM, RTRCPTR GCPtr, CSAMTAG enmTag, bool fCode32, bool fMonitorInvalidation) 1605 1605 { 1606 1606 PCSAMPAGEREC pPage; … … 1703 1703 * @param enmTag Monitor tag 1704 1704 */ 1705 CSAMR3DECL(int) CSAMR3MonitorPage(PVM pVM, RT GCPTR32pPageAddrGC, CSAMTAG enmTag)1705 CSAMR3DECL(int) CSAMR3MonitorPage(PVM pVM, RTRCPTR pPageAddrGC, CSAMTAG enmTag) 1706 1706 { 1707 1707 PCSAMPAGEREC pPageRec = NULL; … … 1825 1825 * @param enmTag Monitor tag 1826 1826 */ 1827 CSAMR3DECL(int) CSAMR3UnmonitorPage(PVM pVM, RT GCPTR32pPageAddrGC, CSAMTAG enmTag)1827 CSAMR3DECL(int) CSAMR3UnmonitorPage(PVM pVM, RTRCPTR pPageAddrGC, CSAMTAG enmTag) 1828 1828 { 1829 1829 pPageAddrGC &= PAGE_BASE_GC_MASK; … … 1849 1849 * @param GCPtr Page address 1850 1850 */ 1851 static int csamRemovePageRecord(PVM pVM, RT GCPTR32GCPtr)1851 static int csamRemovePageRecord(PVM pVM, RTRCPTR GCPtr) 1852 1852 { 1853 1853 PCSAMPAGEREC pPageRec; … … 1911 1911 * @param cbBuf How much it's reading/writing. 1912 1912 */ 1913 static DECLCALLBACK(void) CSAMDelayedWriteHandler(PVM pVM, RT GCPTR32GCPtr, size_t cbBuf)1913 static DECLCALLBACK(void) CSAMDelayedWriteHandler(PVM pVM, RTRCPTR GCPtr, size_t cbBuf) 1914 1914 { 1915 1915 int rc = PATMR3PatchWrite(pVM, GCPtr, cbBuf); … … 1951 1951 */ 1952 1952 Log(("CSAMCodePageWriteHandler: delayed write!\n")); 1953 AssertCompileSize(RT GCPTR32, 4);1953 AssertCompileSize(RTRCPTR, 4); 1954 1954 rc = VMR3ReqCallEx(pVM, NULL, 0, VMREQFLAGS_NO_WAIT | VMREQFLAGS_VOID, 1955 (PFNRT)CSAMDelayedWriteHandler, 3, pVM, (RT GCPTR32)GCPtr, cbBuf);1955 (PFNRT)CSAMDelayedWriteHandler, 3, pVM, (RTRCPTR)GCPtr, cbBuf); 1956 1956 } 1957 1957 AssertRC(rc); … … 1984 1984 * @param pPage CSAM patch structure pointer 1985 1985 */ 1986 bool csamIsCodeScanned(PVM pVM, RT GCPTR32pInstr, PCSAMPAGE *pPage)1986 bool csamIsCodeScanned(PVM pVM, RTRCPTR pInstr, PCSAMPAGE *pPage) 1987 1987 { 1988 1988 PCSAMPAGEREC pPageRec; … … 2036 2036 * @param fScanned Mark as scanned or not 2037 2037 */ 2038 static void csamMarkCode(PVM pVM, PCSAMPAGE pPage, RT GCPTR32pInstr, uint32_t opsize, bool fScanned)2038 static void csamMarkCode(PVM pVM, PCSAMPAGE pPage, RTRCPTR pInstr, uint32_t opsize, bool fScanned) 2039 2039 { 2040 2040 LogFlow(("csamMarkCodeAsScanned %VRv opsize=%d\n", pInstr, opsize)); … … 2075 2075 * @param fScanned Mark as scanned or not 2076 2076 */ 2077 CSAMR3DECL(int) CSAMR3MarkCode(PVM pVM, RT GCPTR32pInstr, uint32_t opsize, bool fScanned)2077 CSAMR3DECL(int) CSAMR3MarkCode(PVM pVM, RTRCPTR pInstr, uint32_t opsize, bool fScanned) 2078 2078 { 2079 2079 PCSAMPAGE pPage = 0; … … 2103 2103 * @param pInstrGC Instruction pointer 2104 2104 */ 2105 CSAMR3DECL(int) CSAMR3CheckCodeEx(PVM pVM, RTSEL Sel, CPUMSELREGHID *pHiddenSel, RT GCPTR32pInstrGC)2105 CSAMR3DECL(int) CSAMR3CheckCodeEx(PVM pVM, RTSEL Sel, CPUMSELREGHID *pHiddenSel, RTRCPTR pInstrGC) 2106 2106 { 2107 2107 if (EMIsRawRing0Enabled(pVM) == false || PATMIsPatchGCAddr(pVM, pInstrGC) == true) … … 2137 2137 * @param pInstrGC Instruction pointer (0:32 virtual address) 2138 2138 */ 2139 CSAMR3DECL(int) CSAMR3CheckCode(PVM pVM, RT GCPTR32pInstrGC)2139 CSAMR3DECL(int) CSAMR3CheckCode(PVM pVM, RTRCPTR pInstrGC) 2140 2140 { 2141 2141 int rc; … … 2179 2179 int rc; 2180 2180 PCSAMPAGEREC pPageRec; 2181 RT GCPTR32GCPtr = pVM->csam.s.pvDirtyBasePage[i];2181 RTRCPTR GCPtr = pVM->csam.s.pvDirtyBasePage[i]; 2182 2182 2183 2183 GCPtr = GCPtr & PAGE_BASE_GC_MASK; … … 2223 2223 for (uint32_t i=0;i<pVM->csam.s.cPossibleCodePages;i++) 2224 2224 { 2225 RT GCPTR32GCPtr = pVM->csam.s.pvPossibleCodePage[i];2225 RTRCPTR GCPtr = pVM->csam.s.pvPossibleCodePage[i]; 2226 2226 2227 2227 GCPtr = GCPtr & PAGE_BASE_GC_MASK; … … 2262 2262 { 2263 2263 uint16_t cbIDT; 2264 RT GCPTR32GCPtrIDT = CPUMGetGuestIDTR(pVM, &cbIDT);2264 RTRCPTR GCPtrIDT = CPUMGetGuestIDTR(pVM, &cbIDT); 2265 2265 uint32_t iGateEnd; 2266 2266 uint32_t maxGates; … … 2295 2295 for (unsigned i=0;i<RT_ELEMENTS(pVM->csam.s.pvCallInstruction);i++) 2296 2296 { 2297 RT GCPTR32pHandler = pVM->csam.s.pvCallInstruction[i];2297 RTRCPTR pHandler = pVM->csam.s.pvCallInstruction[i]; 2298 2298 2299 2299 if (pHandler) … … 2365 2365 ) 2366 2366 { 2367 RT GCPTR32pHandler;2367 RTRCPTR pHandler; 2368 2368 CSAMP2GLOOKUPREC cacheRec = {0}; /* Cache record for PATMGCVirtToHCVirt. */ 2369 2369 PCSAMPAGE pPage = NULL; … … 2462 2462 Log(("Gate handler 0x%X is SAFE!\n", iGate)); 2463 2463 2464 RT GCPTR32pNewHandlerGC = PATMR3QueryPatchGCPtr(pVM, pHandler);2464 RTRCPTR pNewHandlerGC = PATMR3QueryPatchGCPtr(pVM, pHandler); 2465 2465 if (pNewHandlerGC) 2466 2466 { … … 2483 2483 * @param GCPtrCall Call address 2484 2484 */ 2485 CSAMR3DECL(int) CSAMR3RecordCallAddress(PVM pVM, RT GCPTR32GCPtrCall)2485 CSAMR3DECL(int) CSAMR3RecordCallAddress(PVM pVM, RTRCPTR GCPtrCall) 2486 2486 { 2487 2487 for (unsigned i=0;i<RT_ELEMENTS(pVM->csam.s.pvCallInstruction);i++) -
trunk/src/VBox/VMM/PATM/CSAMInternal.h
r9300 r9344 68 68 typedef struct 69 69 { 70 RT GCPTR32pInstrAfterRetGC[CSAM_MAX_CALLEXIT_RET];70 RTRCPTR pInstrAfterRetGC[CSAM_MAX_CALLEXIT_RET]; 71 71 uint32_t cInstrAfterRet; 72 72 } CSAMCALLEXITREC, *PCSAMCALLEXITREC; … … 84 84 typedef struct 85 85 { 86 RT GCPTR32pPageGC;86 RTRCPTR pPageGC; 87 87 RTGCPHYS GCPhys; 88 88 uint64_t fFlags; … … 103 103 { 104 104 // GC Patch pointer 105 RT GCPTR32pInstrGC;105 RTRCPTR pInstrGC; 106 106 107 107 // Disassembly state for original instruction … … 155 155 * switch back to ring 3 each time we encounter them in GC. 156 156 */ 157 RT GCPTR32aDangerousInstr[CSAM_MAX_DANGR_INSTR];157 RTRCPTR aDangerousInstr[CSAM_MAX_DANGR_INSTR]; 158 158 uint32_t cDangerousInstr; 159 159 uint32_t iDangerousInstr; 160 160 161 RCPTRTYPE(RT GCPTR32*) pPDBitmapGC;161 RCPTRTYPE(RTRCPTR *) pPDBitmapGC; 162 162 RCPTRTYPE(RTHCPTR *) pPDHCBitmapGC; 163 163 R3PTRTYPE(uint8_t **) pPDBitmapHC; 164 R3PTRTYPE(RT GCPTR32*) pPDGCBitmapHC;164 R3PTRTYPE(RTRCPTR *) pPDGCBitmapHC; 165 165 166 166 /* Temporary storage during load/save state */ … … 179 179 /* To keep track of possible code pages */ 180 180 uint32_t cPossibleCodePages; 181 RT GCPTR32pvPossibleCodePage[CSAM_MAX_CODE_PAGES_FLUSH];181 RTRCPTR pvPossibleCodePage[CSAM_MAX_CODE_PAGES_FLUSH]; 182 182 183 183 /* call addresses reported by the recompiler */ 184 RT GCPTR32pvCallInstruction[16];184 RTRCPTR pvCallInstruction[16]; 185 185 RTUINT iCallInstruction; 186 186 … … 252 252 * @param pBranchInstrGC GC pointer of branch instruction 253 253 */ 254 inline RT GCPTR32 CSAMResolveBranch(PDISCPUSTATE pCpu, RTGCPTR32pBranchInstrGC)254 inline RTRCPTR CSAMResolveBranch(PDISCPUSTATE pCpu, RTRCPTR pBranchInstrGC) 255 255 { 256 256 uint32_t disp; … … 275 275 } 276 276 #ifdef IN_GC 277 return (RT GCPTR32)((uint8_t *)pBranchInstrGC + pCpu->opsize + disp);277 return (RTRCPTR)((uint8_t *)pBranchInstrGC + pCpu->opsize + disp); 278 278 #else 279 279 return pBranchInstrGC + pCpu->opsize + disp; -
trunk/src/VBox/VMM/PATM/PATMPatch.cpp
r9341 r9344 71 71 Assert(uType == FIXUP_ABSOLUTE || ((uType == FIXUP_REL_JMPTOPATCH || uType == FIXUP_REL_JMPTOGUEST) && pSource && pDest)); 72 72 73 LogFlow(("patmPatchAddReloc32 type=%d pRelocGC=%V Gv source=%VGv dest=%VGv\n", uType, pRelocHC - pVM->patm.s.pPatchMemGC + pVM->patm.s.pPatchMemGC , pSource, pDest));73 LogFlow(("patmPatchAddReloc32 type=%d pRelocGC=%VRv source=%VRv dest=%VRv\n", uType, pRelocHC - pVM->patm.s.pPatchMemGC + pVM->patm.s.pPatchMemGC , pSource, pDest)); 74 74 75 75 pRec = (PRELOCREC)MMR3HeapAllocZ(pVM, MM_TAG_PATM_PATCH, sizeof(*pRec)); -
trunk/src/VBox/VMM/PATM/VMMAll/CSAMAll.cpp
r9220 r9344 53 53 * @param pvFault Fault address 54 54 */ 55 CSAMDECL(int) CSAMExecFault(PVM pVM, RT GCPTR32pvFault)55 CSAMDECL(int) CSAMExecFault(PVM pVM, RTRCPTR pvFault) 56 56 { 57 57 if(!CSAMIsEnabled(pVM)) … … 80 80 * @param pPage GC page address 81 81 */ 82 CSAMDECL(bool) CSAMIsPageScanned(PVM pVM, RT GCPTR32pPage)82 CSAMDECL(bool) CSAMIsPageScanned(PVM pVM, RTRCPTR pPage) 83 83 { 84 84 int pgdir, bit; … … 108 108 * 109 109 */ 110 CSAMDECL(int) CSAMMarkPage(PVM pVM, RT GCPTR32pPage, bool fScanned)110 CSAMDECL(int) CSAMMarkPage(PVM pVM, RTRCPTR pPage, bool fScanned) 111 111 { 112 112 int pgdir, bit; … … 115 115 #ifdef LOG_ENABLED 116 116 if (fScanned && !CSAMIsPageScanned(pVM, pPage)) 117 Log(("CSAMMarkPage %V Gv\n", pPage));117 Log(("CSAMMarkPage %VRv\n", pPage)); 118 118 #endif 119 119 … … 141 141 if (!pVM->csam.s.pPDHCBitmapGC[pgdir]) 142 142 { 143 Log(("MMHyperHC2GC failed for %V Gv\n", pVM->csam.s.pPDBitmapGC[pgdir]));143 Log(("MMHyperHC2GC failed for %VRv\n", pVM->csam.s.pPDBitmapGC[pgdir])); 144 144 return rc; 145 145 } … … 177 177 * @param GCPtr GC pointer of page 178 178 */ 179 CSAMDECL(bool) CSAMDoesPageNeedScanning(PVM pVM, RT GCPTR32GCPtr)179 CSAMDECL(bool) CSAMDoesPageNeedScanning(PVM pVM, RTRCPTR GCPtr) 180 180 { 181 181 if(!CSAMIsEnabled(pVM)) … … 200 200 * @param GCPtr GC pointer of page 201 201 */ 202 CSAMDECL(void) CSAMMarkPossibleCodePage(PVM pVM, RT GCPTR32GCPtr)202 CSAMDECL(void) CSAMMarkPossibleCodePage(PVM pVM, RTRCPTR GCPtr) 203 203 { 204 204 if (pVM->csam.s.cPossibleCodePages < RT_ELEMENTS(pVM->csam.s.pvPossibleCodePage)) 205 205 { 206 pVM->csam.s.pvPossibleCodePage[pVM->csam.s.cPossibleCodePages++] = (RT GCPTR32)GCPtr;206 pVM->csam.s.pvPossibleCodePage[pVM->csam.s.cPossibleCodePages++] = (RTRCPTR)GCPtr; 207 207 VM_FF_SET(pVM, VM_FF_CSAM_PENDING_ACTION); 208 208 } … … 247 247 * @param GCPtr GC pointer of page table entry 248 248 */ 249 CSAMDECL(bool) CSAMIsKnownDangerousInstr(PVM pVM, RT GCPTR32GCPtr)249 CSAMDECL(bool) CSAMIsKnownDangerousInstr(PVM pVM, RTRCPTR GCPtr) 250 250 { 251 251 for (uint32_t i=0;i<pVM->csam.s.cDangerousInstr;i++) 252 252 { 253 if (pVM->csam.s.aDangerousInstr[i] == (RT GCPTR32)GCPtr)253 if (pVM->csam.s.aDangerousInstr[i] == (RTRCPTR)GCPtr) 254 254 { 255 255 STAM_COUNTER_INC(&pVM->csam.s.StatInstrCacheHit); … … 258 258 } 259 259 /* Record that we're about to process it in ring 3. */ 260 pVM->csam.s.aDangerousInstr[pVM->csam.s.iDangerousInstr++] = (RT GCPTR32)GCPtr;260 pVM->csam.s.aDangerousInstr[pVM->csam.s.iDangerousInstr++] = (RTRCPTR)GCPtr; 261 261 pVM->csam.s.iDangerousInstr &= CSAM_MAX_DANGR_INSTR_MASK; 262 262 -
trunk/src/VBox/VMM/PATM/VMMAll/PATMAll.cpp
r9228 r9344 60 60 register uint32_t efl = pCtxCore->eflags.u32; 61 61 CTXSUFF(pVM->patm.s.pGCState)->uVMFlags = efl & PATM_VIRTUAL_FLAGS_MASK; 62 AssertMsg((efl & X86_EFL_IF) || PATMShouldUseRawMode(pVM, (RTRCPTR)pCtxCore->eip), ("X86_EFL_IF is clear and PATM is disabled! (eip=%V Gv eflags=%08x fPATM=%d pPATMGC=%VGv-%VGv\n", pCtxCore->eip, pCtxCore->eflags.u32, PATMIsEnabled(pVM), pVM->patm.s.pPatchMemGC, pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem));63 64 AssertReleaseMsg(CTXSUFF(pVM->patm.s.pGCState)->fPIF || fPatchCode, ("fPIF=%d eip=%V Gv\n", CTXSUFF(pVM->patm.s.pGCState)->fPIF, pCtxCore->eip));62 AssertMsg((efl & X86_EFL_IF) || PATMShouldUseRawMode(pVM, (RTRCPTR)pCtxCore->eip), ("X86_EFL_IF is clear and PATM is disabled! (eip=%VRv eflags=%08x fPATM=%d pPATMGC=%VGv-%VGv\n", pCtxCore->eip, pCtxCore->eflags.u32, PATMIsEnabled(pVM), pVM->patm.s.pPatchMemGC, pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem)); 63 64 AssertReleaseMsg(CTXSUFF(pVM->patm.s.pGCState)->fPIF || fPatchCode, ("fPIF=%d eip=%VRv\n", CTXSUFF(pVM->patm.s.pGCState)->fPIF, pCtxCore->eip)); 65 65 66 66 efl &= ~PATM_VIRTUAL_FLAGS_MASK; … … 86 86 pVM->patm.s.pfnSysEnterGC = 0; 87 87 88 Log2(("PATMRawEnter: installing sysenter patch for %V Gv\n", pCtx->SysEnter.eip));88 Log2(("PATMRawEnter: installing sysenter patch for %VRv\n", pCtx->SysEnter.eip)); 89 89 pVM->patm.s.pfnSysEnterPatchGC = PATMR3QueryPatchGCPtr(pVM, pCtx->SysEnter.eip); 90 90 if (pVM->patm.s.pfnSysEnterPatchGC == 0) … … 135 135 CTXSUFF(pVM->patm.s.pGCState)->uVMFlags = X86_EFL_IF; 136 136 137 AssertReleaseMsg((efl & X86_EFL_IF) || fPatchCode || rawRC == VINF_PATM_PENDING_IRQ_AFTER_IRET || VBOX_FAILURE(rawRC), ("Inconsistent state at %V Gv rc=%Vrc\n", pCtxCore->eip, rawRC));138 AssertReleaseMsg(CTXSUFF(pVM->patm.s.pGCState)->fPIF || fPatchCode || VBOX_FAILURE(rawRC), ("fPIF=%d eip=%V Gv rc=%Vrc\n", CTXSUFF(pVM->patm.s.pGCState)->fPIF, pCtxCore->eip, rawRC));137 AssertReleaseMsg((efl & X86_EFL_IF) || fPatchCode || rawRC == VINF_PATM_PENDING_IRQ_AFTER_IRET || VBOX_FAILURE(rawRC), ("Inconsistent state at %VRv rc=%Vrc\n", pCtxCore->eip, rawRC)); 138 AssertReleaseMsg(CTXSUFF(pVM->patm.s.pGCState)->fPIF || fPatchCode || VBOX_FAILURE(rawRC), ("fPIF=%d eip=%VRv rc=%Vrc\n", CTXSUFF(pVM->patm.s.pGCState)->fPIF, pCtxCore->eip, rawRC)); 139 139 140 140 #ifdef IN_RING3 … … 165 165 { 166 166 Assert(!PATMFindActivePatchByEntrypoint(pVM, pOrgInstrGC)); 167 Log(("Switchback from %V Gv to %VGv (Psp=%x)\n", pCtxCore->eip, pOrgInstrGC, CTXSUFF(pVM->patm.s.pGCState)->Psp));167 Log(("Switchback from %VRv to %VRv (Psp=%x)\n", pCtxCore->eip, pOrgInstrGC, CTXSUFF(pVM->patm.s.pGCState)->Psp)); 168 168 STAM_COUNTER_INC(&pVM->patm.s.StatSwitchBack); 169 169 pCtxCore->eip = pOrgInstrGC; … … 174 174 else 175 175 { 176 LogFlow(("Patch address %V Gv can't be interrupted (state=%d)!\n", pCtxCore->eip, enmState));176 LogFlow(("Patch address %VRv can't be interrupted (state=%d)!\n", pCtxCore->eip, enmState)); 177 177 STAM_COUNTER_INC(&pVM->patm.s.StatSwitchBackFail); 178 178 } … … 180 180 else 181 181 { 182 LogFlow(("Patch address %V Gv can't be interrupted (fPIF=%d)!\n", pCtxCore->eip, CTXSUFF(pVM->patm.s.pGCState)->fPIF));182 LogFlow(("Patch address %VRv can't be interrupted (fPIF=%d)!\n", pCtxCore->eip, CTXSUFF(pVM->patm.s.pGCState)->fPIF)); 183 183 STAM_COUNTER_INC(&pVM->patm.s.StatSwitchBackFail); 184 184 } … … 405 405 goto end; 406 406 407 Log2(("PATMSysCall: sysenter from %V Gv to %VGv\n", pRegFrame->eip, pVM->patm.s.pfnSysEnterPatchGC));407 Log2(("PATMSysCall: sysenter from %VRv to %VRv\n", pRegFrame->eip, pVM->patm.s.pfnSysEnterPatchGC)); 408 408 /** @todo the base and limit are forced to 0 & 4G-1 resp. We assume the selector is wide open here. */ 409 409 /** @note The Intel manual suggests that the OS is responsible for this. */ … … 431 431 goto end; 432 432 433 Log2(("PATMSysCall: sysexit from %V Gv to %VGv\n", pRegFrame->eip, pRegFrame->edx));433 Log2(("PATMSysCall: sysexit from %VRv to %VRv\n", pRegFrame->eip, pRegFrame->edx)); 434 434 435 435 pRegFrame->cs = ((pCtx->SysEnter.cs + 16) & ~X86_SEL_RPL) | 3; … … 466 466 * @param pRelBranchPatch Relative duplicated function address 467 467 */ 468 PATMDECL(int) PATMAddBranchToLookupCache(PVM pVM, RTRCPTR pJumpTableGC, RTRCPTR pBranchTarget, RT GCUINTPTR pRelBranchPatch)468 PATMDECL(int) PATMAddBranchToLookupCache(PVM pVM, RTRCPTR pJumpTableGC, RTRCPTR pBranchTarget, RTRCUINTPTR pRelBranchPatch) 469 469 { 470 470 PPATCHJUMPTABLE pJumpTable; 471 471 472 Log(("PATMAddBranchToLookupCache: Adding (%V Gv->%VGv (%VGv)) to table %VGv\n", pBranchTarget, pRelBranchPatch + pVM->patm.s.pPatchMemGC, pRelBranchPatch, pJumpTableGC));472 Log(("PATMAddBranchToLookupCache: Adding (%VRv->%VRv (%VRv)) to table %VRv\n", pBranchTarget, pRelBranchPatch + pVM->patm.s.pPatchMemGC, pRelBranchPatch, pJumpTableGC)); 473 473 474 474 AssertReturn(PATMIsPatchGCAddr(pVM, pJumpTableGC), VERR_INVALID_PARAMETER); … … 523 523 524 524 525 #if defined(VBOX_WITH_STATISTICS) || defined(LOG_ENABLED) 525 526 /** 526 527 * Return the name of the patched instruction … … 660 661 return pszInstr; 661 662 } 663 #endif -
trunk/src/VBox/VMM/VMMAll/PGMAllBth.h
r9341 r9344 601 601 PGMGstGetPage(pVM, pvFault, &fPageGst, &GCPhys); 602 602 Log(("Page out of sync: %VGv eip=%08x PdeSrc.n.u1User=%d fPageGst=%08llx GCPhys=%VGp scan=%d\n", 603 pvFault, pRegFrame->eip, PdeSrc.n.u1User, fPageGst, GCPhys, CSAMDoesPageNeedScanning(pVM, (RT GCPTR)pRegFrame->eip)));603 pvFault, pRegFrame->eip, PdeSrc.n.u1User, fPageGst, GCPhys, CSAMDoesPageNeedScanning(pVM, (RTRCPTR)pRegFrame->eip))); 604 604 # endif /* LOG_ENABLED */ 605 605 … … 617 617 # ifdef CSAM_DETECT_NEW_CODE_PAGES 618 618 || ( !PATMIsPatchGCAddr(pVM, (RTGCPTR)pRegFrame->eip) 619 && CSAMDoesPageNeedScanning(pVM, (RT GCPTR)pRegFrame->eip)) /* any new code we encounter here */619 && CSAMDoesPageNeedScanning(pVM, (RTRCPTR)pRegFrame->eip)) /* any new code we encounter here */ 620 620 # endif /* CSAM_DETECT_NEW_CODE_PAGES */ 621 621 ) 622 622 { 623 623 LogFlow(("CSAMExecFault %VGv\n", pRegFrame->eip)); 624 rc = CSAMExecFault(pVM, (RT GCPTR)pRegFrame->eip);624 rc = CSAMExecFault(pVM, (RTRCPTR)pRegFrame->eip); 625 625 if (rc != VINF_SUCCESS) 626 626 { … … 678 678 /** @todo not correct for pages that contain both code and data!! */ 679 679 Log2(("CSAMMarkPage %VGv; scanned=%d\n", pvFault, true)); 680 CSAMMarkPage(pVM, pvFault, true);680 CSAMMarkPage(pVM, (RTRCPTR)pvFault, true); 681 681 } 682 682 } … … 1531 1531 if ( ((PdeSrc.u & PteSrc.u) & (X86_PTE_RW | X86_PTE_US)) 1532 1532 || iPTDst == ((GCPtrPage >> SHW_PT_SHIFT) & SHW_PT_MASK) /* always sync GCPtrPage */ 1533 || !CSAMDoesPageNeedScanning(pVM, (RT GCPTR)GCPtrCurPage)1533 || !CSAMDoesPageNeedScanning(pVM, (RTRCPTR)GCPtrCurPage) 1534 1534 || ( (pPage = pgmPhysGetPage(&pVM->pgm.s, PteSrc.u & GST_PTE_PG_MASK)) 1535 1535 && PGM_PAGE_HAS_ACTIVE_HANDLERS(pPage)) … … 2279 2279 PPGMPAGE pPage; 2280 2280 if ( ((PdeSrc.u & pPTSrc->a[iPTSrc].u) & (X86_PTE_RW | X86_PTE_US)) 2281 || !CSAMDoesPageNeedScanning(pVM, (RT GCPTR)((iPDSrc << GST_PD_SHIFT) | (iPTSrc << PAGE_SHIFT)))2281 || !CSAMDoesPageNeedScanning(pVM, (RTRCPTR)((iPDSrc << GST_PD_SHIFT) | (iPTSrc << PAGE_SHIFT))) 2282 2282 || ( (pPage = pgmPhysGetPage(&pVM->pgm.s, PteSrc.u & GST_PTE_PG_MASK)) 2283 2283 && PGM_PAGE_HAS_ACTIVE_HANDLERS(pPage)) … … 2395 2395 */ 2396 2396 else if ( !PdeSrc.n.u1User 2397 && CSAMDoesPageNeedScanning(pVM, (RT GCPTR)(GCPtr | (iPTDst << SHW_PT_SHIFT))))2397 && CSAMDoesPageNeedScanning(pVM, (RTRCPTR)(GCPtr | (iPTDst << SHW_PT_SHIFT)))) 2398 2398 PteDst.u = 0; 2399 2399 # endif … … 2614 2614 /** @todo not correct for pages that contain both code and data!! */ 2615 2615 Log(("CSAMMarkPage %VGv; scanned=%d\n", GCPtrPage, true)); 2616 CSAMMarkPage(pVM, (RT GCPTR)GCPtrPage, true);2616 CSAMMarkPage(pVM, (RTRCPTR)GCPtrPage, true); 2617 2617 } 2618 2618 # endif -
trunk/src/VBox/VMM/VMMGC/TRPMGCHandlers.cpp
r9300 r9344 617 617 /* We can safely emulate control/debug register move instructions in patched code. */ 618 618 if ( !PATMIsPatchGCAddr(pVM, (RTRCPTR)PC) 619 && !CSAMIsKnownDangerousInstr(pVM, PC))619 && !CSAMIsKnownDangerousInstr(pVM, (RTRCPTR)PC)) 620 620 break; 621 621 case OP_INVLPG:
Note:
See TracChangeset
for help on using the changeset viewer.