Changeset 9220 in vbox for trunk/src/VBox
- Timestamp:
- May 29, 2008 12:34:27 PM (17 years ago)
- svn:sync-xref-src-repo-rev:
- 31390
- Location:
- trunk/src/VBox/VMM/PATM
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/VMM/PATM/CSAM.cpp
r9216 r9220 74 74 static DECLCALLBACK(int) CSAMCodePageInvalidate(PVM pVM, RTGCPTR GCPtr); 75 75 76 bool csamIsCodeScanned(PVM pVM, RTGCPTR pInstr, PCSAMPAGE *pPage);77 int csamR3CheckPageRecord(PVM pVM, RTGCPTR pInstr);78 static PCSAMPAGE csamCreatePageRecord(PVM pVM, RTGCPTR GCPtr, CSAMTAG enmTag, bool fCode32, bool fMonitorInvalidation = false);79 static int csamRemovePageRecord(PVM pVM, RTGCPTR GCPtr);76 bool csamIsCodeScanned(PVM pVM, RTGCPTR32 pInstr, PCSAMPAGE *pPage); 77 int csamR3CheckPageRecord(PVM pVM, RTGCPTR32 pInstr); 78 static PCSAMPAGE csamCreatePageRecord(PVM pVM, RTGCPTR32 GCPtr, CSAMTAG enmTag, bool fCode32, bool fMonitorInvalidation = false); 79 static int csamRemovePageRecord(PVM pVM, RTGCPTR32 GCPtr); 80 80 static int csamReinit(PVM pVM); 81 static void csamMarkCode(PVM pVM, PCSAMPAGE pPage, RTGCPTR pInstr, uint32_t opsize, bool fScanned);81 static void csamMarkCode(PVM pVM, PCSAMPAGE pPage, RTGCPTR32 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(RTGCPTR ), 0, MM_TAG_CSAM, (void **)&pVM->csam.s.pPDGCBitmapHC);120 rc = MMR3HyperAllocOnceNoRel(pVM, CSAM_PGDIRBMP_CHUNKS*sizeof(RTGCPTR32), 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); … … 605 605 PVM pVM = (PVM)pCpu->apvUserData[0]; 606 606 RTHCUINTPTR pInstrHC = (RTHCUINTPTR)pCpu->apvUserData[1]; 607 RTGCUINTPTR pInstrGC = (uintptr_t)pCpu->apvUserData[2];607 RTGCUINTPTR32 pInstrGC = (uintptr_t)pCpu->apvUserData[2]; 608 608 int orgsize = size; 609 609 … … 612 612 for (int i=0;i<orgsize;i++) 613 613 { 614 int rc = PATMR3QueryOpcode(pVM, (RTGCPTR )pSrc, pDest);614 int rc = PATMR3QueryOpcode(pVM, (RTGCPTR32)pSrc, pDest); 615 615 if (VBOX_SUCCESS(rc)) 616 616 { … … 642 642 } 643 643 644 inline int CSAMR3DISInstr(PVM pVM, DISCPUSTATE *pCpu, RTGCPTR InstrGC, uint8_t *InstrHC, uint32_t *pOpsize, char *pszOutput)644 inline int CSAMR3DISInstr(PVM pVM, DISCPUSTATE *pCpu, RTGCPTR32 InstrGC, uint8_t *InstrHC, uint32_t *pOpsize, char *pszOutput) 645 645 { 646 646 (pCpu)->pfnReadBytes = CSAMR3ReadBytes; … … 1270 1270 ) 1271 1271 { 1272 RTGCPTR pJumpTableGC = (RTGCPTR)cpu.param1.disp32;1272 RTGCPTR32 pJumpTableGC = (RTGCPTR32)cpu.param1.disp32; 1273 1273 uint8_t *pJumpTableHC; 1274 1274 int rc2; … … 1288 1288 break; 1289 1289 1290 addr = *(RTGCPTR *)(pJumpTableHC + cpu.param1.scale * i);1290 addr = *(RTGCPTR32 *)(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, RTGCPTR pInstr)1348 uint64_t csamR3CalcPageHash(PVM pVM, RTGCPTR32 pInstr) 1349 1349 { 1350 1350 uint64_t hash = 0; … … 1411 1411 * @param fRemovePage Page removal flag 1412 1412 */ 1413 static int csamFlushPage(PVM pVM, RTGCPTR addr, bool fRemovePage)1413 static int csamFlushPage(PVM pVM, RTGCPTR32 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, RTGCPTR addr)1520 CSAMR3DECL(int) CSAMR3FlushPage(PVM pVM, RTGCPTR32 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, RTGCPTR addr)1532 CSAMR3DECL(int) CSAMR3RemovePage(PVM pVM, RTGCPTR32 addr) 1533 1533 { 1534 1534 PCSAMPAGEREC pPageRec; … … 1555 1555 * @param pInstrGC GC instruction pointer 1556 1556 */ 1557 int csamR3CheckPageRecord(PVM pVM, RTGCPTR pInstrGC)1557 int csamR3CheckPageRecord(PVM pVM, RTGCPTR32 pInstrGC) 1558 1558 { 1559 1559 PCSAMPAGEREC pPageRec; … … 1602 1602 * @param fMonitorInvalidation Monitor page invalidation flag 1603 1603 */ 1604 static PCSAMPAGE csamCreatePageRecord(PVM pVM, RTGCPTR GCPtr, CSAMTAG enmTag, bool fCode32, bool fMonitorInvalidation)1604 static PCSAMPAGE csamCreatePageRecord(PVM pVM, RTGCPTR32 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, RTGCPTR pPageAddrGC, CSAMTAG enmTag)1705 CSAMR3DECL(int) CSAMR3MonitorPage(PVM pVM, RTGCPTR32 pPageAddrGC, CSAMTAG enmTag) 1706 1706 { 1707 1707 PCSAMPAGEREC pPageRec = NULL; … … 1825 1825 * @param enmTag Monitor tag 1826 1826 */ 1827 CSAMR3DECL(int) CSAMR3UnmonitorPage(PVM pVM, RTGCPTR pPageAddrGC, CSAMTAG enmTag)1827 CSAMR3DECL(int) CSAMR3UnmonitorPage(PVM pVM, RTGCPTR32 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, RTGCPTR GCPtr)1851 static int csamRemovePageRecord(PVM pVM, RTGCPTR32 GCPtr) 1852 1852 { 1853 1853 PCSAMPAGEREC pPageRec; … … 1984 1984 * @param pPage CSAM patch structure pointer 1985 1985 */ 1986 bool csamIsCodeScanned(PVM pVM, RTGCPTR pInstr, PCSAMPAGE *pPage)1986 bool csamIsCodeScanned(PVM pVM, RTGCPTR32 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, RTGCPTR pInstr, uint32_t opsize, bool fScanned)2038 static void csamMarkCode(PVM pVM, PCSAMPAGE pPage, RTGCPTR32 pInstr, uint32_t opsize, bool fScanned) 2039 2039 { 2040 2040 LogFlow(("csamMarkCodeAsScanned %VGv opsize=%d\n", pInstr, opsize)); … … 2075 2075 * @param fScanned Mark as scanned or not 2076 2076 */ 2077 CSAMR3DECL(int) CSAMR3MarkCode(PVM pVM, RTGCPTR pInstr, uint32_t opsize, bool fScanned)2077 CSAMR3DECL(int) CSAMR3MarkCode(PVM pVM, RTGCPTR32 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, RTGCPTR pInstrGC)2105 CSAMR3DECL(int) CSAMR3CheckCodeEx(PVM pVM, RTSEL Sel, CPUMSELREGHID *pHiddenSel, RTGCPTR32 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, RTGCPTR pInstrGC)2139 CSAMR3DECL(int) CSAMR3CheckCode(PVM pVM, RTGCPTR32 pInstrGC) 2140 2140 { 2141 2141 int rc; … … 2179 2179 int rc; 2180 2180 PCSAMPAGEREC pPageRec; 2181 RTGCPTR GCPtr = pVM->csam.s.pvDirtyBasePage[i];2181 RTGCPTR32 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 RTGCPTR GCPtr = pVM->csam.s.pvPossibleCodePage[i];2225 RTGCPTR32 GCPtr = pVM->csam.s.pvPossibleCodePage[i]; 2226 2226 2227 2227 GCPtr = GCPtr & PAGE_BASE_GC_MASK; … … 2262 2262 { 2263 2263 uint16_t cbIDT; 2264 RTGCPTR GCPtrIDT = CPUMGetGuestIDTR(pVM, &cbIDT);2264 RTGCPTR32 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 RTGCPTR pHandler = pVM->csam.s.pvCallInstruction[i];2297 RTGCPTR32 pHandler = pVM->csam.s.pvCallInstruction[i]; 2298 2298 2299 2299 if (pHandler) … … 2365 2365 ) 2366 2366 { 2367 RTGCPTR pHandler;2367 RTGCPTR32 pHandler; 2368 2368 CSAMP2GLOOKUPREC cacheRec = {0}; /* Cache record for PATMGCVirtToHCVirt. */ 2369 2369 PCSAMPAGE pPage = NULL; … … 2411 2411 PCPUMCTX pCtx; 2412 2412 DISCPUSTATE cpu; 2413 RTGCUINTPTR aOpenBsdPushCSOffset[3] = {0x03, /* OpenBSD 3.7 & 3.8 */2413 RTGCUINTPTR32 aOpenBsdPushCSOffset[3] = {0x03, /* OpenBSD 3.7 & 3.8 */ 2414 2414 0x2B, /* OpenBSD 4.0 installation ISO */ 2415 2415 0x2F}; /* OpenBSD 4.0 after install */ … … 2462 2462 Log(("Gate handler 0x%X is SAFE!\n", iGate)); 2463 2463 2464 RTGCPTR pNewHandlerGC = PATMR3QueryPatchGCPtr(pVM, pHandler);2464 RTGCPTR32 pNewHandlerGC = PATMR3QueryPatchGCPtr(pVM, pHandler); 2465 2465 if (pNewHandlerGC) 2466 2466 { … … 2483 2483 * @param GCPtrCall Call address 2484 2484 */ 2485 CSAMR3DECL(int) CSAMR3RecordCallAddress(PVM pVM, RTGCPTR GCPtrCall)2485 CSAMR3DECL(int) CSAMR3RecordCallAddress(PVM pVM, RTGCPTR32 GCPtrCall) 2486 2486 { 2487 2487 for (unsigned i=0;i<RT_ELEMENTS(pVM->csam.s.pvCallInstruction);i++) -
trunk/src/VBox/VMM/PATM/CSAMInternal.h
r9212 r9220 252 252 * @param pBranchInstrGC GC pointer of branch instruction 253 253 */ 254 inline RTGCPTR CSAMResolveBranch(PDISCPUSTATE pCpu, RTGCPTRpBranchInstrGC)254 inline RTGCPTR32 CSAMResolveBranch(PDISCPUSTATE pCpu, RTGCPTR32 pBranchInstrGC) 255 255 { 256 256 uint32_t disp; … … 275 275 } 276 276 #ifdef IN_GC 277 return (RTGCPTR )((uint8_t *)pBranchInstrGC + pCpu->opsize + disp);277 return (RTGCPTR32)((uint8_t *)pBranchInstrGC + pCpu->opsize + disp); 278 278 #else 279 279 return pBranchInstrGC + pCpu->opsize + disp; … … 282 282 283 283 __BEGIN_DECLS 284 CSAMGCDECL(int) CSAMGCCodePageWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTRpvRange, uintptr_t offRange);284 CSAMGCDECL(int) CSAMGCCodePageWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR32 pvFault, RTGCPTR32 pvRange, uintptr_t offRange); 285 285 __END_DECLS 286 286 -
trunk/src/VBox/VMM/PATM/PATM.cpp
r9216 r9220 64 64 *******************************************************************************/ 65 65 66 static int patmDisableUnusablePatch(PVM pVM, RTGCPTR pInstrGC, RTGCPTRpConflictAddr, PPATCHINFO pPatch);66 static int patmDisableUnusablePatch(PVM pVM, RTGCPTR32 pInstrGC, RTGCPTR32 pConflictAddr, PPATCHINFO pPatch); 67 67 static int patmActivateInt3Patch(PVM pVM, PPATCHINFO pPatch); 68 68 static int patmDeactivateInt3Patch(PVM pVM, PPATCHINFO pPatch); 69 69 70 70 #ifdef LOG_ENABLED // keep gcc quiet 71 static bool patmIsCommonIDTHandlerPatch(PVM pVM, RTGCPTR pInstrGC);71 static bool patmIsCommonIDTHandlerPatch(PVM pVM, RTGCPTR32 pInstrGC); 72 72 #endif 73 73 #ifdef VBOX_WITH_STATISTICS … … 409 409 PATMR3DECL(void) PATMR3Relocate(PVM pVM) 410 410 { 411 RTGCPTR GCPtrNew = MMHyperHC2GC(pVM, pVM->patm.s.pGCStateHC);411 RTGCPTR32 GCPtrNew = MMHyperHC2GC(pVM, pVM->patm.s.pGCStateHC); 412 412 RTGCINTPTR delta = GCPtrNew - pVM->patm.s.pGCStateGC; 413 413 … … 533 533 for (int i=0;i<orgsize;i++) 534 534 { 535 int rc = PATMR3QueryOpcode(pDisInfo->pVM, (RTGCPTR )pSrc, pDest);535 int rc = PATMR3QueryOpcode(pDisInfo->pVM, (RTGCPTR32)pSrc, pDest); 536 536 if (VBOX_SUCCESS(rc)) 537 537 { … … 635 635 { 636 636 case FIXUP_ABSOLUTE: 637 Log(("Absolute fixup at %VGv %VHv -> %VHv at %VGv\n", pRec->pSource, *(RTGCUINTPTR *)pRec->pRelocPos, *(RTGCINTPTR*)pRec->pRelocPos + delta, pRec->pRelocPos));637 Log(("Absolute fixup at %VGv %VHv -> %VHv at %VGv\n", pRec->pSource, *(RTGCUINTPTR32*)pRec->pRelocPos, *(RTGCINTPTR*)pRec->pRelocPos + delta, pRec->pRelocPos)); 638 638 if (!pRec->pSource || PATMIsPatchGCAddr(pVM, pRec->pSource)) 639 639 { 640 *(RTGCUINTPTR *)pRec->pRelocPos += delta;640 *(RTGCUINTPTR32 *)pRec->pRelocPos += delta; 641 641 } 642 642 else … … 649 649 650 650 memcpy(oldInstr, pPatch->patch.aPrivInstr, pPatch->patch.cbPrivInstr); 651 *(RTGCPTR *)&oldInstr[pPatch->patch.cbPrivInstr - sizeof(RTGCPTR)] = pRec->pDest;651 *(RTGCPTR32 *)&oldInstr[pPatch->patch.cbPrivInstr - sizeof(RTGCPTR32)] = pRec->pDest; 652 652 653 653 rc = PGMPhysReadGCPtr(pVM, curInstr, pPatch->patch.pPrivInstrGC, pPatch->patch.cbPrivInstr); 654 654 Assert(VBOX_SUCCESS(rc) || rc == VERR_PAGE_NOT_PRESENT || rc == VERR_PAGE_TABLE_NOT_PRESENT); 655 655 656 pRec->pDest = (RTGCPTR )((RTGCUINTPTR)pRec->pDest + delta);656 pRec->pDest = (RTGCPTR32)((RTGCUINTPTR32)pRec->pDest + delta); 657 657 658 658 if (rc == VERR_PAGE_NOT_PRESENT || rc == VERR_PAGE_TABLE_NOT_PRESENT) 659 659 { 660 RTGCPTR pPage = pPatch->patch.pPrivInstrGC & PAGE_BASE_GC_MASK;660 RTGCPTR32 pPage = pPatch->patch.pPrivInstrGC & PAGE_BASE_GC_MASK; 661 661 662 662 Log(("PATM: Patch page not present -> check later!\n")); … … 677 677 if (VBOX_SUCCESS(rc)) 678 678 { 679 *(RTGCPTR *)&curInstr[pPatch->patch.cbPrivInstr - sizeof(RTGCPTR)] = pRec->pDest;679 *(RTGCPTR32 *)&curInstr[pPatch->patch.cbPrivInstr - sizeof(RTGCPTR32)] = pRec->pDest; 680 680 rc = PGMPhysWriteGCPtrDirty(pVM, pRec->pSource, curInstr, pPatch->patch.cbPrivInstr); 681 681 AssertRC(rc); … … 686 686 case FIXUP_REL_JMPTOPATCH: 687 687 { 688 RTGCPTR pTarget = (RTGCPTR)((RTGCINTPTR)pRec->pDest + delta);688 RTGCPTR32 pTarget = (RTGCPTR32)((RTGCINTPTR)pRec->pDest + delta); 689 689 690 690 if ( pPatch->patch.uState == PATCH_ENABLED … … 693 693 uint8_t oldJump[SIZEOF_NEAR_COND_JUMP32]; 694 694 uint8_t temp[SIZEOF_NEAR_COND_JUMP32]; 695 RTGCPTR pJumpOffGC;695 RTGCPTR32 pJumpOffGC; 696 696 RTGCINTPTR displ = (RTGCINTPTR)pTarget - (RTGCINTPTR)pRec->pSource; 697 697 RTGCINTPTR displOld= (RTGCINTPTR)pRec->pDest - (RTGCINTPTR)pRec->pSource; … … 708 708 oldJump[0] = pPatch->patch.aPrivInstr[0]; 709 709 oldJump[1] = pPatch->patch.aPrivInstr[1]; 710 *(RTGCUINTPTR *)&oldJump[2] = displOld;710 *(RTGCUINTPTR32 *)&oldJump[2] = displOld; 711 711 } 712 712 else … … 716 716 pJumpOffGC = pPatch->patch.pPrivInstrGC + 1; //one byte opcode 717 717 oldJump[0] = 0xE9; 718 *(RTGCUINTPTR *)&oldJump[1] = displOld;718 *(RTGCUINTPTR32 *)&oldJump[1] = displOld; 719 719 } 720 720 else … … 733 733 if (rc == VERR_PAGE_NOT_PRESENT || rc == VERR_PAGE_TABLE_NOT_PRESENT) 734 734 { 735 RTGCPTR pPage = pPatch->patch.pPrivInstrGC & PAGE_BASE_GC_MASK;735 RTGCPTR32 pPage = pPatch->patch.pPrivInstrGC & PAGE_BASE_GC_MASK; 736 736 737 737 rc = PGMR3HandlerVirtualRegister(pVM, PGMVIRTHANDLERTYPE_ALL, pPage, pPage + (PAGE_SIZE - 1) /* inclusive! */, 0, patmVirtPageHandler, "PATMGCMonitorPage", 0, "PATMMonitorPatchJump"); … … 770 770 case FIXUP_REL_JMPTOGUEST: 771 771 { 772 RTGCPTR pSource = (RTGCPTR)((RTGCINTPTR)pRec->pSource + delta);772 RTGCPTR32 pSource = (RTGCPTR32)((RTGCINTPTR)pRec->pSource + delta); 773 773 RTGCINTPTR displ = (RTGCINTPTR)pRec->pDest - (RTGCINTPTR)pSource; 774 774 775 775 Assert(!(pPatch->patch.flags & PATMFL_GLOBAL_FUNCTIONS)); 776 776 Log(("Relative fixup (p2g) %08X -> %08X at %08X (source=%08x, target=%08x)\n", *(int32_t*)pRec->pRelocPos, displ, pRec->pRelocPos, pRec->pSource, pRec->pDest)); 777 *(RTGCUINTPTR *)pRec->pRelocPos = displ;777 *(RTGCUINTPTR32 *)pRec->pRelocPos = displ; 778 778 pRec->pSource = pSource; 779 779 break; … … 842 842 PPATMPATCHREC pPatch = (PPATMPATCHREC)pNode; 843 843 844 PATMR3EnablePatch((PVM)pVM, (RTGCPTR )pPatch->Core.Key);844 PATMR3EnablePatch((PVM)pVM, (RTGCPTR32)pPatch->Core.Key); 845 845 return 0; 846 846 } … … 862 862 PPATMPATCHREC pPatch = (PPATMPATCHREC)pNode; 863 863 864 PATMR3DisablePatch((PVM)pVM, (RTGCPTR )pPatch->Core.Key);864 PATMR3DisablePatch((PVM)pVM, (RTGCPTR32)pPatch->Core.Key); 865 865 return 0; 866 866 } … … 891 891 * @param pcb Size of the patch memory block 892 892 */ 893 PATMR3DECL(RTGCPTR ) PATMR3QueryPatchMemGC(PVM pVM, uint32_t *pcb)893 PATMR3DECL(RTGCPTR32) PATMR3QueryPatchMemGC(PVM pVM, uint32_t *pcb) 894 894 { 895 895 if (pcb) … … 946 946 * @param pAddrGC GC pointer 947 947 */ 948 PATMR3DECL(R3PTRTYPE(void *)) PATMR3GCPtrToHCPtr(PVM pVM, RTGCPTR pAddrGC)948 PATMR3DECL(R3PTRTYPE(void *)) PATMR3GCPtrToHCPtr(PVM pVM, RTGCPTR32 pAddrGC) 949 949 { 950 950 if (pVM->patm.s.pPatchMemGC <= pAddrGC && pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem > pAddrGC) … … 1057 1057 { 1058 1058 uint8_t *pPatchHC; 1059 RTGCPTR pPatchGC;1060 RTGCPTR pOrgInstrGC;1059 RTGCPTR32 pPatchGC; 1060 RTGCPTR32 pOrgInstrGC; 1061 1061 1062 1062 pOrgInstrGC = PATMR3PatchToGCPtr(pVM, pInstrGC, 0); … … 1090 1090 } 1091 1091 /* Our jumps *always* have a dword displacement (to make things easier). */ 1092 Assert(sizeof(uint32_t) == sizeof(RTGCPTR ));1093 displ = pBranchTargetGC - (pInstrGC + pRec->offDispl + sizeof(RTGCPTR ));1094 *(RTGCPTR *)(pRec->pJumpHC + pRec->offDispl) = displ;1095 Log(("Set branch target %d to %08X : %08x - (%08x + %d + %d)\n", nrJumpRecs, displ, pBranchTargetGC, pInstrGC, pRec->offDispl, sizeof(RTGCPTR )));1092 Assert(sizeof(uint32_t) == sizeof(RTGCPTR32)); 1093 displ = pBranchTargetGC - (pInstrGC + pRec->offDispl + sizeof(RTGCPTR32)); 1094 *(RTGCPTR32 *)(pRec->pJumpHC + pRec->offDispl) = displ; 1095 Log(("Set branch target %d to %08X : %08x - (%08x + %d + %d)\n", nrJumpRecs, displ, pBranchTargetGC, pInstrGC, pRec->offDispl, sizeof(RTGCPTR32))); 1096 1096 } 1097 1097 Assert(nrJumpRecs == pPatch->nrJumpRecs); … … 1107 1107 * 1108 1108 */ 1109 static void patmAddIllegalInstrRecord(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC)1109 static void patmAddIllegalInstrRecord(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC) 1110 1110 { 1111 1111 PAVLPVNODECORE pRec; … … 1120 1120 } 1121 1121 1122 static bool patmIsIllegalInstr(PPATCHINFO pPatch, RTGCPTR pInstrGC)1122 static bool patmIsIllegalInstr(PPATCHINFO pPatch, RTGCPTR32 pInstrGC) 1123 1123 { 1124 1124 PAVLPVNODECORE pRec; … … 1142 1142 */ 1143 1143 /** @note Be extremely careful with this function. Make absolutely sure the guest address is correct! (to avoid executing instructions twice!) */ 1144 void patmr3AddP2GLookupRecord(PVM pVM, PPATCHINFO pPatch, uint8_t *pPatchInstrHC, RTGCPTR pInstrGC, PATM_LOOKUP_TYPE enmType, bool fDirty)1144 void patmr3AddP2GLookupRecord(PVM pVM, PPATCHINFO pPatch, uint8_t *pPatchInstrHC, RTGCPTR32 pInstrGC, PATM_LOOKUP_TYPE enmType, bool fDirty) 1145 1145 { 1146 1146 bool ret; … … 1201 1201 * @param pPatchInstrGC Guest context pointer to patch block 1202 1202 */ 1203 void patmr3RemoveP2GLookupRecord(PVM pVM, PPATCHINFO pPatch, RTGCPTR pPatchInstrGC)1203 void patmr3RemoveP2GLookupRecord(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pPatchInstrGC) 1204 1204 { 1205 1205 PAVLU32NODECORE pNode; … … 1691 1691 case OP_STI: 1692 1692 { 1693 RTGCPTR pNextInstrGC = 0; /* by default no inhibit irq */1693 RTGCPTR32 pNextInstrGC = 0; /* by default no inhibit irq */ 1694 1694 1695 1695 /** In a sequence of instructions that inhibit irqs, only the first one actually inhibits irqs. */ … … 1855 1855 if (pPatch->flags & PATMFL_SUPPORT_INDIRECT_CALLS && pCpu->param1.size == 4 /* no far calls! */) 1856 1856 { 1857 rc = patmPatchGenCall(pVM, pPatch, pCpu, pCurInstrGC, (RTGCPTR )0xDEADBEEF, true);1857 rc = patmPatchGenCall(pVM, pPatch, pCpu, pCurInstrGC, (RTGCPTR32)0xDEADBEEF, true); 1858 1858 if (VBOX_SUCCESS(rc)) 1859 1859 { … … 1931 1931 { 1932 1932 int rc2; 1933 RTGCPTR pNextInstrGC = pCurInstrGC + pCpu->opsize;1933 RTGCPTR32 pNextInstrGC = pCurInstrGC + pCpu->opsize; 1934 1934 1935 1935 pPatch->flags &= ~PATMFL_INHIBIT_IRQS; … … 1960 1960 ) 1961 1961 { 1962 RTGCPTR pNextInstrGC = pCurInstrGC + pCpu->opsize;1962 RTGCPTR32 pNextInstrGC = pCurInstrGC + pCpu->opsize; 1963 1963 1964 1964 // The end marker for this kind of patch is any instruction at a location outside our patch jump … … 1982 1982 * 1983 1983 */ 1984 static void patmPatchAddDisasmJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC)1984 static void patmPatchAddDisasmJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC) 1985 1985 { 1986 1986 PAVLPVNODECORE pRec; … … 2002 2002 * 2003 2003 */ 2004 static bool patmIsKnownDisasmJump(PPATCHINFO pPatch, RTGCPTR pInstrGC)2004 static bool patmIsKnownDisasmJump(PPATCHINFO pPatch, RTGCPTR32 pInstrGC) 2005 2005 { 2006 2006 PAVLPVNODECORE pRec; … … 2032 2032 DISCPUSTATE cpu; 2033 2033 uint8_t *pOrgJumpHC; 2034 RTGCPTR pOrgJumpGC;2034 RTGCPTR32 pOrgJumpGC; 2035 2035 uint32_t dummy; 2036 2036 … … 2110 2110 if (PATMIsPatchGCAddr(pVM, pCurInstrGC)) 2111 2111 { 2112 RTGCPTR pOrgInstrGC = patmPatchGCPtr2GuestGCPtr(pVM, pPatch, pCurInstrGC);2112 RTGCPTR32 pOrgInstrGC = patmPatchGCPtr2GuestGCPtr(pVM, pPatch, pCurInstrGC); 2113 2113 2114 2114 if (pOrgInstrGC != pPatch->pTempInfo->pLastDisasmInstrGC) … … 2145 2145 ) 2146 2146 { 2147 RTGCPTR pTargetGC = PATMResolveBranch(&cpu, pCurInstrGC);2148 RTGCPTR pOrgTargetGC;2147 RTGCPTR32 pTargetGC = PATMResolveBranch(&cpu, pCurInstrGC); 2148 RTGCPTR32 pOrgTargetGC; 2149 2149 2150 2150 if (pTargetGC == 0) … … 2231 2231 * 2232 2232 */ 2233 PATMR3DECL(int) PATMR3DetectConflict(PVM pVM, RTGCPTR pInstrGC, RTGCPTRpConflictGC)2233 PATMR3DECL(int) PATMR3DetectConflict(PVM pVM, RTGCPTR32 pInstrGC, RTGCPTR32 pConflictGC) 2234 2234 { 2235 2235 PPATCHINFO pTargetPatch = PATMFindActivePatchByEntrypoint(pVM, pConflictGC, true /* include patch hints */); … … 2303 2303 uint32_t opsizenext; 2304 2304 uint8_t *pNextInstrHC; 2305 RTGCPTR pNextInstrGC = pCurInstrGC + opsize;2305 RTGCPTR32 pNextInstrGC = pCurInstrGC + opsize; 2306 2306 2307 2307 Log(("patmRecompileCodeStream: irqs inhibited by instruction %VGv\n", pNextInstrGC)); … … 2520 2520 } 2521 2521 temp[0] = 0xE9; //jmp 2522 *(uint32_t *)&temp[1] = (RTGCUINTPTR )PATCHCODE_PTR_GC(pPatch) - ((RTGCUINTPTR)pPatch->pPrivInstrGC + SIZEOF_NEARJUMP32); //return address2522 *(uint32_t *)&temp[1] = (RTGCUINTPTR32)PATCHCODE_PTR_GC(pPatch) - ((RTGCUINTPTR32)pPatch->pPrivInstrGC + SIZEOF_NEARJUMP32); //return address 2523 2523 } 2524 2524 rc = PGMPhysWriteGCPtrDirty(pVM, pPatch->pPrivInstrGC, temp, pPatch->cbPatchJump); … … 2593 2593 * @param pPatch Patch record 2594 2594 */ 2595 static int patmGenCallToPatch(PVM pVM, PPATCHINFO pPatch, RTGCPTR pTargetGC, bool fAddFixup = true)2595 static int patmGenCallToPatch(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pTargetGC, bool fAddFixup = true) 2596 2596 { 2597 2597 uint8_t temp[8]; … … 2640 2640 * 2641 2641 */ 2642 PATMR3DECL(int) PATMR3PatchBlock(PVM pVM, RTGCPTR pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC,2642 PATMR3DECL(int) PATMR3PatchBlock(PVM pVM, RTGCPTR32 pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, 2643 2643 uint32_t uOpcode, uint32_t uOpSize, PPATMPATCHREC pPatchRec) 2644 2644 { … … 2647 2647 DISCPUSTATE cpu; 2648 2648 uint32_t orgOffsetPatchMem = ~0; 2649 RTGCPTR pInstrStart;2649 RTGCPTR32 pInstrStart; 2650 2650 #ifdef LOG_ENABLED 2651 2651 uint32_t opsize; … … 2867 2867 * 2868 2868 */ 2869 static int patmIdtHandler(PVM pVM, RTGCPTR pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC,2869 static int patmIdtHandler(PVM pVM, RTGCPTR32 pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, 2870 2870 uint32_t uOpSize, PPATMPATCHREC pPatchRec) 2871 2871 { … … 2874 2874 DISCPUSTATE cpuPush, cpuJmp; 2875 2875 uint32_t opsize; 2876 RTGCPTR pCurInstrGC = pInstrGC;2876 RTGCPTR32 pCurInstrGC = pInstrGC; 2877 2877 uint8_t *pCurInstrHC = pInstrHC; 2878 2878 uint32_t orgOffsetPatchMem = ~0; … … 2888 2888 if (disret && cpuPush.pCurInstr->opcode == OP_PUSH) 2889 2889 { 2890 RTGCPTR pJmpInstrGC;2890 RTGCPTR32 pJmpInstrGC; 2891 2891 int rc; 2892 2892 … … 2994 2994 * 2995 2995 */ 2996 static int patmInstallTrapTrampoline(PVM pVM, RTGCPTR pInstrGC, PPATMPATCHREC pPatchRec)2996 static int patmInstallTrapTrampoline(PVM pVM, RTGCPTR32 pInstrGC, PPATMPATCHREC pPatchRec) 2997 2997 { 2998 2998 PPATCHINFO pPatch = &pPatchRec->patch; … … 3082 3082 * 3083 3083 */ 3084 static bool patmIsCommonIDTHandlerPatch(PVM pVM, RTGCPTR pInstrGC)3084 static bool patmIsCommonIDTHandlerPatch(PVM pVM, RTGCPTR32 pInstrGC) 3085 3085 { 3086 3086 PPATMPATCHREC pRec; … … 3103 3103 * 3104 3104 */ 3105 static int patmDuplicateFunction(PVM pVM, RTGCPTR pInstrGC, PPATMPATCHREC pPatchRec)3105 static int patmDuplicateFunction(PVM pVM, RTGCPTR32 pInstrGC, PPATMPATCHREC pPatchRec) 3106 3106 { 3107 3107 PPATCHINFO pPatch = &pPatchRec->patch; … … 3233 3233 * 3234 3234 */ 3235 static int patmCreateTrampoline(PVM pVM, RTGCPTR pInstrGC, PPATMPATCHREC pPatchRec)3235 static int patmCreateTrampoline(PVM pVM, RTGCPTR32 pInstrGC, PPATMPATCHREC pPatchRec) 3236 3236 { 3237 3237 PPATCHINFO pPatch = &pPatchRec->patch; 3238 RTGCPTR pPage, pPatchTargetGC = 0;3238 RTGCPTR32 pPage, pPatchTargetGC = 0; 3239 3239 uint32_t orgOffsetPatchMem = ~0; 3240 3240 int rc = VERR_PATCHING_REFUSED; … … 3248 3248 pPage = pInstrGC & PAGE_BASE_GC_MASK; 3249 3249 3250 PPATMPATCHPAGE pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(&pVM->patm.s.PatchLookupTreeHC->PatchTreeByPage, (RTGCPTR )pPage);3250 PPATMPATCHPAGE pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(&pVM->patm.s.PatchLookupTreeHC->PatchTreeByPage, (RTGCPTR32)pPage); 3251 3251 if (pPatchPage) 3252 3252 { … … 3367 3367 PATMR3DECL(int) PATMR3DuplicateFunctionRequest(PVM pVM, PCPUMCTX pCtx) 3368 3368 { 3369 RTGCPTR pBranchTarget, pPage;3369 RTGCPTR32 pBranchTarget, pPage; 3370 3370 int rc; 3371 RTGCPTR pPatchTargetGC = 0;3371 RTGCPTR32 pPatchTargetGC = 0; 3372 3372 3373 3373 pBranchTarget = pCtx->edx; … … 3377 3377 pPage = pBranchTarget & PAGE_BASE_GC_MASK; 3378 3378 3379 PPATMPATCHPAGE pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(&pVM->patm.s.PatchLookupTreeHC->PatchTreeByPage, (RTGCPTR )pPage);3379 PPATMPATCHPAGE pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(&pVM->patm.s.PatchLookupTreeHC->PatchTreeByPage, (RTGCPTR32)pPage); 3380 3380 if (pPatchPage) 3381 3381 { … … 3421 3421 { 3422 3422 pCtx->eax = pPatchTargetGC; 3423 pCtx->eax = pCtx->eax - (RTGCUINTPTR )pVM->patm.s.pPatchMemGC; /* make it relative */3423 pCtx->eax = pCtx->eax - (RTGCUINTPTR32)pVM->patm.s.pPatchMemGC; /* make it relative */ 3424 3424 } 3425 3425 else … … 3448 3448 * 3449 3449 */ 3450 static int patmReplaceFunctionCall(PVM pVM, DISCPUSTATE *pCpu, RTGCPTR pInstrGC, PPATCHINFO pPatch)3450 static int patmReplaceFunctionCall(PVM pVM, DISCPUSTATE *pCpu, RTGCPTR32 pInstrGC, PPATCHINFO pPatch) 3451 3451 { 3452 3452 int rc = VERR_PATCHING_REFUSED; 3453 3453 DISCPUSTATE cpu; 3454 RTGCPTR pTargetGC;3454 RTGCPTR32 pTargetGC; 3455 3455 PPATMPATCHREC pPatchFunction; 3456 3456 uint32_t opsize; … … 3560 3560 * 3561 3561 */ 3562 static int patmPatchMMIOInstr(PVM pVM, RTGCPTR pInstrGC, DISCPUSTATE *pCpu, PPATCHINFO pPatch)3562 static int patmPatchMMIOInstr(PVM pVM, RTGCPTR32 pInstrGC, DISCPUSTATE *pCpu, PPATCHINFO pPatch) 3563 3563 { 3564 3564 uint8_t *pPB; … … 3581 3581 3582 3582 /* Add relocation record for cached data access. */ 3583 if (patmPatchAddReloc32(pVM, pPatch, &pPB[pCpu->opsize - sizeof(RTGCPTR )], FIXUP_ABSOLUTE, pPatch->pPrivInstrGC, pVM->patm.s.mmio.pCachedData) != VINF_SUCCESS)3583 if (patmPatchAddReloc32(pVM, pPatch, &pPB[pCpu->opsize - sizeof(RTGCPTR32)], FIXUP_ABSOLUTE, pPatch->pPrivInstrGC, pVM->patm.s.mmio.pCachedData) != VINF_SUCCESS) 3584 3584 { 3585 3585 Log(("Relocation failed for cached mmio address!!\n")); … … 3599 3599 3600 3600 /* Replace address with that of the cached item. */ 3601 rc = PGMPhysWriteGCPtrDirty(pVM, pInstrGC + pCpu->opsize - sizeof(RTGCPTR ), &pVM->patm.s.mmio.pCachedData, sizeof(RTGCPTR));3601 rc = PGMPhysWriteGCPtrDirty(pVM, pInstrGC + pCpu->opsize - sizeof(RTGCPTR32), &pVM->patm.s.mmio.pCachedData, sizeof(RTGCPTR32)); 3602 3602 AssertRC(rc); 3603 3603 if (VBOX_FAILURE(rc)) … … 3635 3635 * 3636 3636 */ 3637 static int patmPatchPATMMMIOInstr(PVM pVM, RTGCPTR pInstrGC, PPATCHINFO pPatch)3637 static int patmPatchPATMMMIOInstr(PVM pVM, RTGCPTR32 pInstrGC, PPATCHINFO pPatch) 3638 3638 { 3639 3639 DISCPUSTATE cpu; … … 3667 3667 3668 3668 /* Add relocation record for cached data access. */ 3669 if (patmPatchAddReloc32(pVM, pPatch, &pInstrHC[cpu.opsize - sizeof(RTGCPTR )], FIXUP_ABSOLUTE) != VINF_SUCCESS)3669 if (patmPatchAddReloc32(pVM, pPatch, &pInstrHC[cpu.opsize - sizeof(RTGCPTR32)], FIXUP_ABSOLUTE) != VINF_SUCCESS) 3670 3670 { 3671 3671 Log(("Relocation failed for cached mmio address!!\n")); … … 3673 3673 } 3674 3674 /* Replace address with that of the cached item. */ 3675 *(RTGCPTR *)&pInstrHC[cpu.opsize - sizeof(RTGCPTR)] = pVM->patm.s.mmio.pCachedData;3675 *(RTGCPTR32 *)&pInstrHC[cpu.opsize - sizeof(RTGCPTR32)] = pVM->patm.s.mmio.pCachedData; 3676 3676 3677 3677 /* Lowest and highest address for write monitoring. */ … … 3748 3748 * 3749 3749 */ 3750 PATMR3DECL(int) PATMR3PatchInstrInt3(PVM pVM, RTGCPTR pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, DISCPUSTATE *pCpu, PPATCHINFO pPatch)3750 PATMR3DECL(int) PATMR3PatchInstrInt3(PVM pVM, RTGCPTR32 pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, DISCPUSTATE *pCpu, PPATCHINFO pPatch) 3751 3751 { 3752 3752 uint8_t ASMInt3 = 0xCC; … … 3803 3803 * 3804 3804 */ 3805 int patmPatchJump(PVM pVM, RTGCPTR pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, DISCPUSTATE *pCpu, PPATMPATCHREC pPatchRec)3805 int patmPatchJump(PVM pVM, RTGCPTR32 pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, DISCPUSTATE *pCpu, PPATMPATCHREC pPatchRec) 3806 3806 { 3807 3807 PPATCHINFO pPatch = &pPatchRec->patch; … … 3878 3878 * references the target instruction in the conflict patch. 3879 3879 */ 3880 RTGCPTR pJmpDest = PATMR3GuestGCPtrToPatchGCPtr(pVM, pInstrGC + pCpu->opsize + (int32_t)pCpu->param1.parval);3880 RTGCPTR32 pJmpDest = PATMR3GuestGCPtrToPatchGCPtr(pVM, pInstrGC + pCpu->opsize + (int32_t)pCpu->param1.parval); 3881 3881 3882 3882 AssertMsg(pJmpDest, ("PATMR3GuestGCPtrToPatchGCPtr failed for %VGv\n", pInstrGC + pCpu->opsize + (int32_t)pCpu->param1.parval)); … … 3924 3924 * @param flags Patch flags 3925 3925 */ 3926 PATMR3DECL(int) PATMR3AddHint(PVM pVM, RTGCPTR pInstrGC, uint32_t flags)3926 PATMR3DECL(int) PATMR3AddHint(PVM pVM, RTGCPTR32 pInstrGC, uint32_t flags) 3927 3927 { 3928 3928 Assert(pInstrGC); … … 3943 3943 * @note returns failure if patching is not allowed or possible 3944 3944 */ 3945 PATMR3DECL(int) PATMR3InstallPatch(PVM pVM, RTGCPTR pInstrGC, uint64_t flags)3945 PATMR3DECL(int) PATMR3InstallPatch(PVM pVM, RTGCPTR32 pInstrGC, uint64_t flags) 3946 3946 { 3947 3947 DISCPUSTATE cpu; … … 3986 3986 if (CPUMGetGuestCPL(pVM, CPUMCTX2CORE(pCtx)) == 0) 3987 3987 { 3988 RTGCPTR pInstrGCFlat = SELMToFlat(pVM, pCtx->eflags, pCtx->cs, &pCtx->csHid, pInstrGC);3988 RTGCPTR32 pInstrGCFlat = SELMToFlat(pVM, pCtx->eflags, pCtx->cs, &pCtx->csHid, pInstrGC); 3989 3989 if (pInstrGCFlat != pInstrGC) 3990 3990 { … … 4005 4005 && (flags & PATMFL_MMIO_ACCESS)) 4006 4006 { 4007 RTGCUINTPTR offset;4008 void *pvPatchCoreOffset;4007 RTGCUINTPTR32 offset; 4008 void *pvPatchCoreOffset; 4009 4009 4010 4010 /* Find the patch record. */ … … 4389 4389 * @param pInstrGC Instruction address 4390 4390 */ 4391 static uint32_t patmGetInstrSize(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC)4391 static uint32_t patmGetInstrSize(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC) 4392 4392 { 4393 4393 uint8_t *pInstrHC; … … 4416 4416 * @param pPatch Patch record 4417 4417 */ 4418 int patmAddPatchToPage(PVM pVM, RTGCUINTPTR pPage, PPATCHINFO pPatch)4418 int patmAddPatchToPage(PVM pVM, RTGCUINTPTR32 pPage, PPATCHINFO pPatch) 4419 4419 { 4420 4420 PPATMPATCHPAGE pPatchPage; … … 4481 4481 LogFlow(("patmAddPatchToPage: lowest patch page address %VGv current lowest %VGv\n", pGuestToPatchRec->Core.Key, pPatchPage->pLowestAddrGC)); 4482 4482 if ( pPatchPage->pLowestAddrGC == 0 4483 || pPatchPage->pLowestAddrGC > (RTGCPTR )pGuestToPatchRec->Core.Key)4484 { 4485 RTGCUINTPTR offset;4486 4487 pPatchPage->pLowestAddrGC = (RTGCPTR )pGuestToPatchRec->Core.Key;4483 || pPatchPage->pLowestAddrGC > (RTGCPTR32)pGuestToPatchRec->Core.Key) 4484 { 4485 RTGCUINTPTR32 offset; 4486 4487 pPatchPage->pLowestAddrGC = (RTGCPTR32)pGuestToPatchRec->Core.Key; 4488 4488 4489 4489 offset = pPatchPage->pLowestAddrGC & PAGE_OFFSET_MASK; … … 4496 4496 if (pGuestToPatchRec) 4497 4497 { 4498 uint32_t size = patmGetInstrSize(pVM, pPatch, (RTGCPTR )pGuestToPatchRec->Core.Key);4499 if ((RTGCUINTPTR )pGuestToPatchRec->Core.Key + size > pPage)4498 uint32_t size = patmGetInstrSize(pVM, pPatch, (RTGCPTR32)pGuestToPatchRec->Core.Key); 4499 if ((RTGCUINTPTR32)pGuestToPatchRec->Core.Key + size > pPage) 4500 4500 { 4501 4501 pPatchPage->pLowestAddrGC = pPage; … … 4514 4514 LogFlow(("patmAddPatchToPage: highest patch page address %VGv current lowest %VGv\n", pGuestToPatchRec->Core.Key, pPatchPage->pHighestAddrGC)); 4515 4515 if ( pPatchPage->pHighestAddrGC == 0 4516 || pPatchPage->pHighestAddrGC <= (RTGCPTR )pGuestToPatchRec->Core.Key)4517 { 4518 pPatchPage->pHighestAddrGC = (RTGCPTR )pGuestToPatchRec->Core.Key;4516 || pPatchPage->pHighestAddrGC <= (RTGCPTR32)pGuestToPatchRec->Core.Key) 4517 { 4518 pPatchPage->pHighestAddrGC = (RTGCPTR32)pGuestToPatchRec->Core.Key; 4519 4519 /* Increase by instruction size. */ 4520 4520 uint32_t size = patmGetInstrSize(pVM, pPatch, pPatchPage->pHighestAddrGC); … … 4536 4536 * @param pPatch Patch record 4537 4537 */ 4538 int patmRemovePatchFromPage(PVM pVM, RTGCUINTPTR pPage, PPATCHINFO pPatch)4538 int patmRemovePatchFromPage(PVM pVM, RTGCUINTPTR32 pPage, PPATCHINFO pPatch) 4539 4539 { 4540 4540 PPATMPATCHPAGE pPatchPage; … … 4601 4601 int patmInsertPatchPages(PVM pVM, PPATCHINFO pPatch) 4602 4602 { 4603 int rc;4604 RTGCUINTPTR pPatchPageStart, pPatchPageEnd, pPage;4603 int rc; 4604 RTGCUINTPTR32 pPatchPageStart, pPatchPageEnd, pPage; 4605 4605 4606 4606 /* Insert the pages that contain patched instructions into a lookup tree for detecting self-modifying code. */ 4607 pPatchPageStart = (RTGCUINTPTR )pPatch->pInstrGCLowest & PAGE_BASE_GC_MASK;4608 pPatchPageEnd = (RTGCUINTPTR )pPatch->pInstrGCHighest & PAGE_BASE_GC_MASK;4607 pPatchPageStart = (RTGCUINTPTR32)pPatch->pInstrGCLowest & PAGE_BASE_GC_MASK; 4608 pPatchPageEnd = (RTGCUINTPTR32)pPatch->pInstrGCHighest & PAGE_BASE_GC_MASK; 4609 4609 4610 4610 /** @todo optimize better (large gaps between current and next used page) */ … … 4636 4636 { 4637 4637 int rc; 4638 RTGCUINTPTR pPatchPageStart, pPatchPageEnd, pPage;4638 RTGCUINTPTR32 pPatchPageStart, pPatchPageEnd, pPage; 4639 4639 4640 4640 /* Insert the pages that contain patched instructions into a lookup tree for detecting self-modifying code. */ 4641 pPatchPageStart = (RTGCUINTPTR )pPatch->pInstrGCLowest & PAGE_BASE_GC_MASK;4642 pPatchPageEnd = (RTGCUINTPTR )pPatch->pInstrGCHighest & PAGE_BASE_GC_MASK;4641 pPatchPageStart = (RTGCUINTPTR32)pPatch->pInstrGCLowest & PAGE_BASE_GC_MASK; 4642 pPatchPageEnd = (RTGCUINTPTR32)pPatch->pInstrGCHighest & PAGE_BASE_GC_MASK; 4643 4643 4644 4644 for(pPage = pPatchPageStart; pPage <= pPatchPageEnd; pPage += PAGE_SIZE) … … 4668 4668 * 4669 4669 */ 4670 PATMR3DECL(int) PATMR3PatchWrite(PVM pVM, RTGCPTR GCPtr, uint32_t cbWrite)4671 { 4672 RTGCUINTPTR pWritePageStart, pWritePageEnd, pPage;4670 PATMR3DECL(int) PATMR3PatchWrite(PVM pVM, RTGCPTR32 GCPtr, uint32_t cbWrite) 4671 { 4672 RTGCUINTPTR32 pWritePageStart, pWritePageEnd, pPage; 4673 4673 4674 4674 Log(("PATMR3PatchWrite %VGv %x\n", GCPtr, cbWrite)); … … 4684 4684 STAM_PROFILE_ADV_START(&pVM->patm.s.StatPatchWrite, a); 4685 4685 4686 pWritePageStart = (RTGCUINTPTR )GCPtr & PAGE_BASE_GC_MASK;4687 pWritePageEnd = ((RTGCUINTPTR )GCPtr + cbWrite - 1) & PAGE_BASE_GC_MASK;4686 pWritePageStart = (RTGCUINTPTR32)GCPtr & PAGE_BASE_GC_MASK; 4687 pWritePageEnd = ((RTGCUINTPTR32)GCPtr + cbWrite - 1) & PAGE_BASE_GC_MASK; 4688 4688 4689 4689 for (pPage = pWritePageStart; pPage <= pWritePageEnd; pPage += PAGE_SIZE) 4690 4690 { 4691 4691 loop_start: 4692 PPATMPATCHPAGE pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(&pVM->patm.s.PatchLookupTreeHC->PatchTreeByPage, (RTGCPTR )pPage);4692 PPATMPATCHPAGE pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(&pVM->patm.s.PatchLookupTreeHC->PatchTreeByPage, (RTGCPTR32)pPage); 4693 4693 if (pPatchPage) 4694 4694 { … … 4697 4697 4698 4698 /* Quick check to see if the write is in the patched part of the page */ 4699 if ( pPatchPage->pLowestAddrGC > (RTGCPTR )((RTGCUINTPTR)GCPtr + cbWrite - 1)4699 if ( pPatchPage->pLowestAddrGC > (RTGCPTR32)((RTGCUINTPTR32)GCPtr + cbWrite - 1) 4700 4700 || pPatchPage->pHighestAddrGC < GCPtr) 4701 4701 { … … 4708 4708 { 4709 4709 PPATCHINFO pPatch = pPatchPage->aPatch[i]; 4710 RTGCPTR pPatchInstrGC;4710 RTGCPTR32 pPatchInstrGC; 4711 4711 //unused: bool fForceBreak = false; 4712 4712 … … 4715 4715 for (uint32_t j=0; j<cbWrite; j++) 4716 4716 { 4717 RTGCPTR pGuestPtrGC = (RTGCPTR)((RTGCUINTPTR)GCPtr + j);4717 RTGCPTR32 pGuestPtrGC = (RTGCPTR32)((RTGCUINTPTR32)GCPtr + j); 4718 4718 4719 4719 if ( pPatch->cbPatchJump … … 4734 4734 if (!pPatchInstrGC) 4735 4735 { 4736 RTGCPTR pClosestInstrGC;4736 RTGCPTR32 pClosestInstrGC; 4737 4737 uint32_t size; 4738 4738 … … 4795 4795 */ 4796 4796 invalid_write_loop_start: 4797 pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(&pVM->patm.s.PatchLookupTreeHC->PatchTreeByPage, (RTGCPTR )pPage);4797 pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(&pVM->patm.s.PatchLookupTreeHC->PatchTreeByPage, (RTGCPTR32)pPage); 4798 4798 4799 4799 if (pPatchPage) … … 4841 4841 /** @note Currently only called by CSAMR3FlushPage; optimization to avoid having to double check if the physical address has changed 4842 4842 */ 4843 PATMR3DECL(int) PATMR3FlushPage(PVM pVM, RTGCPTR addr)4843 PATMR3DECL(int) PATMR3FlushPage(PVM pVM, RTGCPTR32 addr) 4844 4844 { 4845 4845 addr &= PAGE_BASE_GC_MASK; … … 4873 4873 * @param pInstrGC Guest context pointer to instruction 4874 4874 */ 4875 PATMR3DECL(bool) PATMR3HasBeenPatched(PVM pVM, RTGCPTR pInstrGC)4875 PATMR3DECL(bool) PATMR3HasBeenPatched(PVM pVM, RTGCPTR32 pInstrGC) 4876 4876 { 4877 4877 PPATMPATCHREC pPatchRec; … … 4891 4891 * 4892 4892 */ 4893 PATMR3DECL(int) PATMR3QueryOpcode(PVM pVM, RTGCPTR pInstrGC, uint8_t *pByte)4893 PATMR3DECL(int) PATMR3QueryOpcode(PVM pVM, RTGCPTR32 pInstrGC, uint8_t *pByte) 4894 4894 { 4895 4895 PPATMPATCHREC pPatchRec; … … 4912 4912 && pInstrGC < pPatchRec->patch.pPrivInstrGC + pPatchRec->patch.cbPatchJump) 4913 4913 { 4914 RTGCPTR offset = pInstrGC - pPatchRec->patch.pPrivInstrGC;4914 RTGCPTR32 offset = pInstrGC - pPatchRec->patch.pPrivInstrGC; 4915 4915 *pByte = pPatchRec->patch.aPrivInstr[offset]; 4916 4916 … … 4935 4935 * 4936 4936 */ 4937 PATMR3DECL(int) PATMR3DisablePatch(PVM pVM, RTGCPTR pInstrGC)4937 PATMR3DECL(int) PATMR3DisablePatch(PVM pVM, RTGCPTR32 pInstrGC) 4938 4938 { 4939 4939 PPATMPATCHREC pPatchRec; … … 5000 5000 if (rc == VINF_SUCCESS) 5001 5001 { 5002 RTGCINTPTR displ = (RTGCUINTPTR )PATCHCODE_PTR_GC(pPatch) - ((RTGCUINTPTR)pPatch->pPrivInstrGC + SIZEOF_NEARJUMP32);5002 RTGCINTPTR displ = (RTGCUINTPTR32)PATCHCODE_PTR_GC(pPatch) - ((RTGCUINTPTR32)pPatch->pPrivInstrGC + SIZEOF_NEARJUMP32); 5003 5003 5004 5004 if ( temp[0] != 0xE9 /* jmp opcode */ … … 5090 5090 * 5091 5091 */ 5092 static int patmDisableUnusablePatch(PVM pVM, RTGCPTR pInstrGC, RTGCPTRpConflictAddr, PPATCHINFO pConflictPatch)5092 static int patmDisableUnusablePatch(PVM pVM, RTGCPTR32 pInstrGC, RTGCPTR32 pConflictAddr, PPATCHINFO pConflictPatch) 5093 5093 { 5094 5094 #ifdef PATM_RESOLVE_CONFLICTS_WITH_JUMP_PATCHES … … 5188 5188 * 5189 5189 */ 5190 PATMR3DECL(int) PATMR3EnablePatch(PVM pVM, RTGCPTR pInstrGC)5190 PATMR3DECL(int) PATMR3EnablePatch(PVM pVM, RTGCPTR32 pInstrGC) 5191 5191 { 5192 5192 PPATMPATCHREC pPatchRec; … … 5380 5380 PPATCHINFO pPatch; 5381 5381 int rc; 5382 RTGCPTR pInstrGC = pPatchRec->patch.pPrivInstrGC;5382 RTGCPTR32 pInstrGC = pPatchRec->patch.pPrivInstrGC; 5383 5383 5384 5384 Log(("patmR3RefreshPatch: attempt to refresh patch at %VGv\n", pInstrGC)); … … 5428 5428 if (VBOX_SUCCESS(rc)) 5429 5429 { 5430 RTGCPTR pPatchTargetGC;5430 RTGCPTR32 pPatchTargetGC; 5431 5431 PPATMPATCHREC pNewPatchRec; 5432 5432 … … 5492 5492 * 5493 5493 */ 5494 PPATCHINFO PATMFindActivePatchByEntrypoint(PVM pVM, RTGCPTR pInstrGC, bool fIncludeHints)5494 PPATCHINFO PATMFindActivePatchByEntrypoint(PVM pVM, RTGCPTR32 pInstrGC, bool fIncludeHints) 5495 5495 { 5496 5496 PPATMPATCHREC pPatchRec = (PPATMPATCHREC)RTAvloGCPtrGetBestFit(&pVM->patm.s.PatchLookupTreeHC->PatchTree, pInstrGC, false); … … 5528 5528 * @param pPatchAddr Guest context patch address (if true) 5529 5529 */ 5530 PATMR3DECL(bool) PATMR3IsInsidePatchJump(PVM pVM, RTGCPTR pAddr, PRTGCPTRpPatchAddr)5531 { 5532 RTGCPTR addr;5530 PATMR3DECL(bool) PATMR3IsInsidePatchJump(PVM pVM, RTGCPTR32 pAddr, PRTGCPTR32 pPatchAddr) 5531 { 5532 RTGCPTR32 addr; 5533 5533 PPATCHINFO pPatch; 5534 5534 … … 5559 5559 * 5560 5560 */ 5561 PATMR3DECL(int) PATMR3RemovePatch(PVM pVM, RTGCPTR pInstrGC)5561 PATMR3DECL(int) PATMR3RemovePatch(PVM pVM, RTGCPTR32 pInstrGC) 5562 5562 { 5563 5563 PPATMPATCHREC pPatchRec; … … 5625 5625 * @param pPatchGC GC address in patch block 5626 5626 */ 5627 RTGCPTR patmPatchGCPtr2GuestGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pPatchGC)5627 RTGCPTR32 patmPatchGCPtr2GuestGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pPatchGC) 5628 5628 { 5629 5629 Assert(pPatch->Patch2GuestAddrTree); … … 5644 5644 * 5645 5645 */ 5646 RTGCPTR patmGuestGCPtrToPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC)5646 RTGCPTR32 patmGuestGCPtrToPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC) 5647 5647 { 5648 5648 if (pPatch->Guest2PatchAddrTree) … … 5664 5664 * 5665 5665 */ 5666 RTGCPTR patmGuestGCPtrToClosestPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC)5666 RTGCPTR32 patmGuestGCPtrToClosestPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC) 5667 5667 { 5668 5668 PRECGUESTTOPATCH pGuestToPatchRec = (PRECGUESTTOPATCH)RTAvlGCPtrGetBestFit(&pPatch->Guest2PatchAddrTree, pInstrGC, false); … … 5680 5680 * 5681 5681 */ 5682 PATMR3DECL(RTGCPTR ) PATMR3GuestGCPtrToPatchGCPtr(PVM pVM, RCPTRTYPE(uint8_t*) pInstrGC)5682 PATMR3DECL(RTGCPTR32) PATMR3GuestGCPtrToPatchGCPtr(PVM pVM, RCPTRTYPE(uint8_t*) pInstrGC) 5683 5683 { 5684 5684 PPATMPATCHREC pPatchRec = (PPATMPATCHREC)RTAvloGCPtrGetBestFit(&pVM->patm.s.PatchLookupTreeHC->PatchTree, pInstrGC, false); … … 5699 5699 * 5700 5700 */ 5701 PATMR3DECL(RTGCPTR ) PATMR3PatchToGCPtr(PVM pVM, RTGCPTRpPatchGC, PATMTRANSSTATE *pEnmState)5701 PATMR3DECL(RTGCPTR32) PATMR3PatchToGCPtr(PVM pVM, RTGCPTR32 pPatchGC, PATMTRANSSTATE *pEnmState) 5702 5702 { 5703 5703 PPATMPATCHREC pPatchRec; 5704 5704 void *pvPatchCoreOffset; 5705 RTGCPTR pPrivInstrGC;5705 RTGCPTR32 pPrivInstrGC; 5706 5706 5707 5707 Assert(PATMIsPatchGCAddr(pVM, pPatchGC)); … … 5765 5765 * @param pAddrGC Guest context address 5766 5766 */ 5767 PATMR3DECL(RTGCPTR ) PATMR3QueryPatchGCPtr(PVM pVM, RTGCPTRpAddrGC)5767 PATMR3DECL(RTGCPTR32) PATMR3QueryPatchGCPtr(PVM pVM, RTGCPTR32 pAddrGC) 5768 5768 { 5769 5769 PPATMPATCHREC pPatchRec; … … 5788 5788 * @param pEip GC pointer of trapping instruction 5789 5789 */ 5790 static int patmR3HandleDirtyInstr(PVM pVM, PCPUMCTX pCtx, PPATMPATCHREC pPatch, PRECPATCHTOGUEST pPatchToGuestRec, RTGCPTR pEip)5790 static int patmR3HandleDirtyInstr(PVM pVM, PCPUMCTX pCtx, PPATMPATCHREC pPatch, PRECPATCHTOGUEST pPatchToGuestRec, RTGCPTR32 pEip) 5791 5791 { 5792 5792 DISCPUSTATE CpuOld, CpuNew; 5793 5793 uint8_t *pPatchInstrHC, *pCurPatchInstrHC; 5794 5794 int rc; 5795 RTGCPTR pCurInstrGC, pCurPatchInstrGC;5795 RTGCPTR32 pCurInstrGC, pCurPatchInstrGC; 5796 5796 uint32_t cbDirty; 5797 5797 PRECPATCHTOGUEST pRec; … … 5867 5867 ) 5868 5868 { 5869 RTGCPTR pTargetGC = PATMResolveBranch(&CpuNew, pCurInstrGC);5869 RTGCPTR32 pTargetGC = PATMResolveBranch(&CpuNew, pCurInstrGC); 5870 5870 5871 5871 if ( pTargetGC >= pPatchToGuestRec->pOrgInstrGC … … 5956 5956 * @param ppNewEip GC pointer to new instruction 5957 5957 */ 5958 PATMR3DECL(int) PATMR3HandleTrap(PVM pVM, PCPUMCTX pCtx, RTGCPTR pEip, RTGCPTR *ppNewEip)5958 PATMR3DECL(int) PATMR3HandleTrap(PVM pVM, PCPUMCTX pCtx, RTGCPTR32 pEip, RTGCPTR *ppNewEip) 5959 5959 { 5960 5960 PPATMPATCHREC pPatch = 0; 5961 5961 void *pvPatchCoreOffset; 5962 RTGCUINTPTR offset;5963 RTGCPTR pNewEip;5962 RTGCUINTPTR32 offset; 5963 RTGCPTR32 pNewEip; 5964 5964 int rc ; 5965 5965 PRECPATCHTOGUEST pPatchToGuestRec = 0; … … 6000 6000 if (pPatch->patch.uState == PATCH_DISABLE_PENDING) 6001 6001 { 6002 RTGCPTR pPrivInstrGC = pPatch->patch.pPrivInstrGC;6002 RTGCPTR32 pPrivInstrGC = pPatch->patch.pPrivInstrGC; 6003 6003 6004 6004 Log(("PATMR3HandleTrap: disable operation is pending for patch at %VGv\n", pPatch->patch.pPrivInstrGC)); … … 6134 6134 if (disret && cpu.pCurInstr->opcode == OP_RETN) 6135 6135 { 6136 RTGCPTR retaddr;6136 RTGCPTR32 retaddr; 6137 6137 PCPUMCTX pCtx; 6138 6138 int rc; … … 6145 6145 6146 6146 Log(("Return failed at %VGv (%VGv)\n", pEip, pNewEip)); 6147 Log(("Expected return address %VGv found address %VGv Psp=%x\n", pVM->patm.s.pGCStackHC[(pVM->patm.s.pGCStateHC->Psp+PATM_STACK_SIZE)/sizeof(RTGCPTR )], retaddr, pVM->patm.s.pGCStateHC->Psp));6147 Log(("Expected return address %VGv found address %VGv Psp=%x\n", pVM->patm.s.pGCStackHC[(pVM->patm.s.pGCStateHC->Psp+PATM_STACK_SIZE)/sizeof(RTGCPTR32)], retaddr, pVM->patm.s.pGCStateHC->Psp)); 6148 6148 } 6149 6149 } … … 6217 6217 PATMR3DECL(int) PATMR3HandleMonitoredPage(PVM pVM) 6218 6218 { 6219 RTGCPTR addr = pVM->patm.s.pvFaultMonitor;6219 RTGCPTR32 addr = pVM->patm.s.pvFaultMonitor; 6220 6220 6221 6221 addr &= PAGE_BASE_GC_MASK; … … 6359 6359 * @param pPatch Patch structure 6360 6360 */ 6361 RTGCPTR patmPatchQueryStatAddress(PVM pVM, PPATCHINFO pPatch)6361 RTGCPTR32 patmPatchQueryStatAddress(PVM pVM, PPATCHINFO pPatch) 6362 6362 { 6363 6363 Assert(pPatch->uPatchIdx != PATM_STAT_INDEX_NONE); -
trunk/src/VBox/VMM/PATM/PATMA.h
r8155 r9220 133 133 struct 134 134 { 135 RTGCPTR pInstrGC;136 RTGCUINTPTR pRelPatchGC; /* relative to patch base */135 RTGCPTR32 pInstrGC; 136 RTGCUINTPTR32 pRelPatchGC; /* relative to patch base */ 137 137 } Slot[1]; 138 138 } PATCHJUMPTABLE, *PPATCHJUMPTABLE; -
trunk/src/VBox/VMM/PATM/PATMGuest.cpp
r8155 r9220 97 97 * 98 98 */ 99 int PATMPatchSysenterXP(PVM pVM, RTGCPTR pInstrGC, PPATMPATCHREC pPatchRec)99 int PATMPatchSysenterXP(PVM pVM, RTGCPTR32 pInstrGC, PPATMPATCHREC pPatchRec) 100 100 { 101 101 PPATCHINFO pPatch = &pPatchRec->patch; 102 102 uint8_t uTemp[16]; 103 RTGCPTR lpfnKiFastSystemCall, lpfnKiIntSystemCall = 0; /* (initializing it to shut up warning.) */103 RTGCPTR32 lpfnKiFastSystemCall, lpfnKiIntSystemCall = 0; /* (initializing it to shut up warning.) */ 104 104 int rc, i; 105 105 … … 151 151 /* Now we simply jump from the fast version to the 'old and slow' system call */ 152 152 uTemp[0] = 0xE9; 153 *(RTGCPTR *)&uTemp[1] = lpfnKiIntSystemCall - (pInstrGC + SIZEOF_NEARJUMP32);153 *(RTGCPTR32 *)&uTemp[1] = lpfnKiIntSystemCall - (pInstrGC + SIZEOF_NEARJUMP32); 154 154 rc = PGMPhysWriteGCPtrDirty(pVM, pInstrGC, uTemp, SIZEOF_NEARJUMP32); 155 155 if (VBOX_FAILURE(rc)) … … 180 180 * 181 181 */ 182 int PATMPatchOpenBSDHandlerPrefix(PVM pVM, PDISCPUSTATE pCpu, RTGCPTR pInstrGC, uint8_t *pInstrHC, PPATMPATCHREC pPatchRec)182 int PATMPatchOpenBSDHandlerPrefix(PVM pVM, PDISCPUSTATE pCpu, RTGCPTR32 pInstrGC, uint8_t *pInstrHC, PPATMPATCHREC pPatchRec) 183 183 { 184 184 uint8_t uTemp[16]; … … 213 213 * 214 214 */ 215 int PATMInstallGuestSpecificPatch(PVM pVM, PDISCPUSTATE pCpu, RTGCPTR pInstrGC, uint8_t *pInstrHC, PPATMPATCHREC pPatchRec)215 int PATMInstallGuestSpecificPatch(PVM pVM, PDISCPUSTATE pCpu, RTGCPTR32 pInstrGC, uint8_t *pInstrHC, PPATMPATCHREC pPatchRec) 216 216 { 217 217 int rc; -
trunk/src/VBox/VMM/PATM/PATMInternal.h
r9216 r9220 236 236 RTGCPTR32 pPatchJumpDestGC; 237 237 238 RTGCUINTPTR 238 RTGCUINTPTR32 pPatchBlockOffset; 239 239 uint32_t cbPatchBlockSize; 240 240 uint32_t uCurPatchOffset; … … 293 293 } PATCHINFO, *PPATCHINFO; 294 294 295 #define PATCHCODE_PTR_GC(pPatch) (RTGCPTR ) (pVM->patm.s.pPatchMemGC + (pPatch)->pPatchBlockOffset)295 #define PATCHCODE_PTR_GC(pPatch) (RTGCPTR32) (pVM->patm.s.pPatchMemGC + (pPatch)->pPatchBlockOffset) 296 296 #define PATCHCODE_PTR_HC(pPatch) (uint8_t *)(pVM->patm.s.pPatchMemHC + (pPatch)->pPatchBlockOffset) 297 297 … … 529 529 530 530 #ifdef IN_RING3 531 RTGCPTR patmPatchGCPtr2GuestGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pPatchGC);532 RTGCPTR patmGuestGCPtrToPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC);533 RTGCPTR patmGuestGCPtrToClosestPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC);531 RTGCPTR32 patmPatchGCPtr2GuestGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pPatchGC); 532 RTGCPTR32 patmGuestGCPtrToPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC); 533 RTGCPTR32 patmGuestGCPtrToClosestPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC); 534 534 #endif 535 535 … … 544 544 * 545 545 */ 546 void patmr3AddP2GLookupRecord(PVM pVM, PPATCHINFO pPatch, uint8_t *pPatchInstrHC, RTGCPTR pInstrGC, PATM_LOOKUP_TYPE enmType, bool fDirty=false);546 void patmr3AddP2GLookupRecord(PVM pVM, PPATCHINFO pPatch, uint8_t *pPatchInstrHC, RTGCPTR32 pInstrGC, PATM_LOOKUP_TYPE enmType, bool fDirty=false); 547 547 548 548 /** … … 571 571 * @param pPatch Patch structure 572 572 */ 573 RTGCPTR patmPatchQueryStatAddress(PVM pVM, PPATCHINFO pPatch);573 RTGCPTR32 patmPatchQueryStatAddress(PVM pVM, PPATCHINFO pPatch); 574 574 575 575 /** … … 607 607 * 608 608 */ 609 int PATMInstallGuestSpecificPatch(PVM pVM, PDISCPUSTATE pCpu, RTGCPTR pInstrGC, uint8_t *pInstrHC, PPATMPATCHREC pPatchRec);609 int PATMInstallGuestSpecificPatch(PVM pVM, PDISCPUSTATE pCpu, RTGCPTR32 pInstrGC, uint8_t *pInstrHC, PPATMPATCHREC pPatchRec); 610 610 611 611 /** … … 631 631 * 632 632 */ 633 PATMDECL(PPATMPATCHREC) PATMQueryFunctionPatch(PVM pVM, RTGCPTR pInstrGC);633 PATMDECL(PPATMPATCHREC) PATMQueryFunctionPatch(PVM pVM, RTGCPTR32 pInstrGC); 634 634 635 635 … … 690 690 PPATCHINFO pPatchInfo; 691 691 R3PTRTYPE(uint8_t *) pInstrHC; 692 RTGCPTR pInstrGC;692 RTGCPTR32 pInstrGC; 693 693 uint32_t fReadFlags; 694 694 } PATMDISASM, *PPATMDISASM; 695 695 696 inline bool PATMR3DISInstr(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR InstrGC,696 inline bool PATMR3DISInstr(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 InstrGC, 697 697 uint8_t *InstrHC, uint32_t *pOpsize, char *pszOutput, 698 698 uint32_t fReadFlags = PATMREAD_ORGCODE) … … 734 734 * 735 735 */ 736 PPATCHINFO PATMFindActivePatchByEntrypoint(PVM pVM, RTGCPTR pInstrGC, bool fIncludeHints=false);736 PPATCHINFO PATMFindActivePatchByEntrypoint(PVM pVM, RTGCPTR32 pInstrGC, bool fIncludeHints=false); 737 737 738 738 /** … … 750 750 * 751 751 */ 752 PATMR3DECL(int) PATMR3PatchBlock(PVM pVM, RTGCPTR pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC,752 PATMR3DECL(int) PATMR3PatchBlock(PVM pVM, RTGCPTR32 pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, 753 753 uint32_t uOpcode, uint32_t uOpSize, PPATMPATCHREC pPatchRec); 754 754 … … 767 767 * 768 768 */ 769 PATMR3DECL(int) PATMR3PatchInstrInt3(PVM pVM, RTGCPTR pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, DISCPUSTATE *pCpu, PPATCHINFO pPatch);769 PATMR3DECL(int) PATMR3PatchInstrInt3(PVM pVM, RTGCPTR32 pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, DISCPUSTATE *pCpu, PPATCHINFO pPatch); 770 770 771 771 /** … … 788 788 * @param pBranchInstrGC GC pointer of branch instruction 789 789 */ 790 inline RTGCPTR PATMResolveBranch(PDISCPUSTATE pCpu, RTGCPTRpBranchInstrGC)790 inline RTGCPTR32 PATMResolveBranch(PDISCPUSTATE pCpu, RTGCPTR32 pBranchInstrGC) 791 791 { 792 792 uint32_t disp; … … 811 811 } 812 812 #ifdef IN_GC 813 return (RTGCPTR )((uint8_t *)pBranchInstrGC + pCpu->opsize + disp);813 return (RTGCPTR32)((uint8_t *)pBranchInstrGC + pCpu->opsize + disp); 814 814 #else 815 815 return pBranchInstrGC + pCpu->opsize + disp; -
trunk/src/VBox/VMM/PATM/PATMPatch.cpp
r9212 r9220 59 59 typedef struct 60 60 { 61 RTGCPTR 62 RTGCPTR 63 RTGCPTR 64 RTGCPTR 61 RTGCPTR32 pTargetGC; 62 RTGCPTR32 pCurInstrGC; 63 RTGCPTR32 pNextInstrGC; 64 RTGCPTR32 pReturnGC; 65 65 } PATMCALLINFO, *PPATMCALLINFO; 66 66 67 int patmPatchAddReloc32(PVM pVM, PPATCHINFO pPatch, uint8_t *pRelocHC, uint32_t uType, RTGCPTR pSource, RTGCPTRpDest)67 int patmPatchAddReloc32(PVM pVM, PPATCHINFO pPatch, uint8_t *pRelocHC, uint32_t uType, RTGCPTR32 pSource, RTGCPTR32 pDest) 68 68 { 69 69 PRELOCREC pRec; … … 88 88 } 89 89 90 int patmPatchAddJump(PVM pVM, PPATCHINFO pPatch, uint8_t *pJumpHC, uint32_t offset, RTGCPTR pTargetGC, uint32_t opcode)90 int patmPatchAddJump(PVM pVM, PPATCHINFO pPatch, uint8_t *pJumpHC, uint32_t offset, RTGCPTR32 pTargetGC, uint32_t opcode) 91 91 { 92 92 PJUMPREC pRec; … … 168 168 case PATM_FIXUP: 169 169 /* Offset in uReloc[i+1] is from the base of the function. */ 170 dest = (RTGCUINTPTR )pVM->patm.s.pPatchMemGC + pAsmRecord->uReloc[i+1] + (RTGCUINTPTR)(pPB - pVM->patm.s.pPatchMemHC);170 dest = (RTGCUINTPTR32)pVM->patm.s.pPatchMemGC + pAsmRecord->uReloc[i+1] + (RTGCUINTPTR32)(pPB - pVM->patm.s.pPatchMemHC); 171 171 break; 172 172 #ifdef VBOX_WITH_STATISTICS … … 306 306 case PATM_LOOKUP_AND_CALL_FUNCTION: 307 307 { 308 RTGCPTR pInstrAfterCall = pVM->patm.s.pPatchMemGC + (RTGCUINTPTR)(&pPB[j] + sizeof(RTGCPTR) - pVM->patm.s.pPatchMemHC);308 RTGCPTR32 pInstrAfterCall = pVM->patm.s.pPatchMemGC + (RTGCUINTPTR32)(&pPB[j] + sizeof(RTGCPTR32) - pVM->patm.s.pPatchMemHC); 309 309 Assert(pVM->patm.s.pfnHelperCallGC); 310 Assert(sizeof(uint32_t) == sizeof(RTGCPTR ));310 Assert(sizeof(uint32_t) == sizeof(RTGCPTR32)); 311 311 312 312 /* Relative value is target minus address of instruction after the actual call instruction. */ … … 317 317 case PATM_RETURN_FUNCTION: 318 318 { 319 RTGCPTR pInstrAfterCall = pVM->patm.s.pPatchMemGC + (RTGCUINTPTR)(&pPB[j] + sizeof(RTGCPTR) - pVM->patm.s.pPatchMemHC);319 RTGCPTR32 pInstrAfterCall = pVM->patm.s.pPatchMemGC + (RTGCUINTPTR32)(&pPB[j] + sizeof(RTGCPTR32) - pVM->patm.s.pPatchMemHC); 320 320 Assert(pVM->patm.s.pfnHelperRetGC); 321 Assert(sizeof(uint32_t) == sizeof(RTGCPTR ));321 Assert(sizeof(uint32_t) == sizeof(RTGCPTR32)); 322 322 323 323 /* Relative value is target minus address of instruction after the actual call instruction. */ … … 328 328 case PATM_IRET_FUNCTION: 329 329 { 330 RTGCPTR pInstrAfterCall = pVM->patm.s.pPatchMemGC + (RTGCUINTPTR)(&pPB[j] + sizeof(RTGCPTR) - pVM->patm.s.pPatchMemHC);330 RTGCPTR32 pInstrAfterCall = pVM->patm.s.pPatchMemGC + (RTGCUINTPTR32)(&pPB[j] + sizeof(RTGCPTR32) - pVM->patm.s.pPatchMemHC); 331 331 Assert(pVM->patm.s.pfnHelperIretGC); 332 Assert(sizeof(uint32_t) == sizeof(RTGCPTR ));332 Assert(sizeof(uint32_t) == sizeof(RTGCPTR32)); 333 333 334 334 /* Relative value is target minus address of instruction after the actual call instruction. */ … … 339 339 case PATM_LOOKUP_AND_JUMP_FUNCTION: 340 340 { 341 RTGCPTR pInstrAfterCall = pVM->patm.s.pPatchMemGC + (RTGCUINTPTR)(&pPB[j] + sizeof(RTGCPTR) - pVM->patm.s.pPatchMemHC);341 RTGCPTR32 pInstrAfterCall = pVM->patm.s.pPatchMemGC + (RTGCUINTPTR32)(&pPB[j] + sizeof(RTGCPTR32) - pVM->patm.s.pPatchMemHC); 342 342 Assert(pVM->patm.s.pfnHelperJumpGC); 343 Assert(sizeof(uint32_t) == sizeof(RTGCPTR ));343 Assert(sizeof(uint32_t) == sizeof(RTGCPTR32)); 344 344 345 345 /* Relative value is target minus address of instruction after the actual call instruction. */ … … 354 354 } 355 355 356 *(RTGCPTR *)&pPB[j] = dest;356 *(RTGCPTR32 *)&pPB[j] = dest; 357 357 if (pAsmRecord->uReloc[i] < PATM_NO_FIXUP) 358 358 { … … 393 393 394 394 /* Read bytes and check for overwritten instructions. */ 395 static int patmPatchReadBytes(PVM pVM, uint8_t *pDest, RTGCPTR pSrc, uint32_t cb)395 static int patmPatchReadBytes(PVM pVM, uint8_t *pDest, RTGCPTR32 pSrc, uint32_t cb) 396 396 { 397 397 int rc = PGMPhysReadGCPtr(pVM, pDest, pSrc, cb); … … 426 426 } 427 427 428 int patmPatchGenIret(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, bool fSizeOverride)428 int patmPatchGenIret(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC, bool fSizeOverride) 429 429 { 430 430 uint32_t size; … … 457 457 * Generate an STI patch 458 458 */ 459 int patmPatchGenSti(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, RTGCPTRpNextInstrGC)459 int patmPatchGenSti(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC, RTGCPTR32 pNextInstrGC) 460 460 { 461 461 PATMCALLINFO callInfo; … … 564 564 } 565 565 566 *(RTGCPTR *)&pPB[pPatchAsmRec->offRelJump] = 0xDEADBEEF;566 *(RTGCPTR32 *)&pPB[pPatchAsmRec->offRelJump] = 0xDEADBEEF; 567 567 568 568 patmPatchAddJump(pVM, pPatch, &pPB[pPatchAsmRec->offRelJump - 1], 1, pTargetGC, opcode); … … 657 657 else offset++; 658 658 659 *(RTGCPTR *)&pPB[offset] = 0xDEADBEEF;659 *(RTGCPTR32 *)&pPB[offset] = 0xDEADBEEF; 660 660 661 661 patmPatchAddJump(pVM, pPatch, pPB, offset, pTargetGC, opcode); 662 662 663 offset += sizeof(RTGCPTR );663 offset += sizeof(RTGCPTR32); 664 664 665 665 PATCHGEN_EPILOG(pPatch, offset); … … 670 670 * Rewrite call to dynamic or currently unknown function (on-demand patching of function) 671 671 */ 672 int patmPatchGenCall(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC, RTGCPTRpTargetGC, bool fIndirect)672 int patmPatchGenCall(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC, RTGCPTR32 pTargetGC, bool fIndirect) 673 673 { 674 674 PATMCALLINFO callInfo; … … 710 710 i++; //skip segment prefix 711 711 712 rc = patmPatchReadBytes(pVM, &pPB[offset], (RTGCPTR )((RTGCUINTPTR)pCurInstrGC + i), pCpu->opsize - i);712 rc = patmPatchReadBytes(pVM, &pPB[offset], (RTGCPTR32)((RTGCUINTPTR32)pCurInstrGC + i), pCpu->opsize - i); 713 713 AssertRCReturn(rc, rc); 714 714 offset += (pCpu->opsize - i); … … 730 730 offset = 0; 731 731 pPB[offset++] = 0x68; // push %Iv 732 *(RTGCPTR *)&pPB[offset] = pTargetGC;733 offset += sizeof(RTGCPTR );732 *(RTGCPTR32 *)&pPB[offset] = pTargetGC; 733 offset += sizeof(RTGCPTR32); 734 734 } 735 735 … … 771 771 * @param pCurInstrGC Current instruction address 772 772 */ 773 int patmPatchGenJump(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC)773 int patmPatchGenJump(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC) 774 774 { 775 775 PATMCALLINFO callInfo; … … 807 807 i++; //skip segment prefix 808 808 809 rc = patmPatchReadBytes(pVM, &pPB[offset], (RTGCPTR )((RTGCUINTPTR)pCurInstrGC + i), pCpu->opsize - i);809 rc = patmPatchReadBytes(pVM, &pPB[offset], (RTGCPTR32)((RTGCUINTPTR32)pCurInstrGC + i), pCpu->opsize - i); 810 810 AssertRCReturn(rc, rc); 811 811 offset += (pCpu->opsize - i); … … 846 846 { 847 847 int size = 0, rc; 848 RTGCPTR pPatchRetInstrGC;848 RTGCPTR32 pPatchRetInstrGC; 849 849 850 850 /* Remember start of this patch for below. */ … … 970 970 * 971 971 */ 972 int patmPatchGenCheckIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC)972 int patmPatchGenCheckIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC) 973 973 { 974 974 uint32_t size; … … 995 995 * 996 996 */ 997 int patmPatchGenSetPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC)997 int patmPatchGenSetPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC) 998 998 { 999 999 PATCHGEN_PROLOG(pVM, pPatch); … … 1016 1016 * 1017 1017 */ 1018 int patmPatchGenClearPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC)1018 int patmPatchGenClearPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC) 1019 1019 { 1020 1020 PATCHGEN_PROLOG(pVM, pPatch); … … 1037 1037 * @param pNextInstrGC Next guest instruction 1038 1038 */ 1039 int patmPatchGenClearInhibitIRQ(PVM pVM, PPATCHINFO pPatch, RTGCPTR pNextInstrGC)1039 int patmPatchGenClearInhibitIRQ(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pNextInstrGC) 1040 1040 { 1041 1041 int size; … … 1070 1070 ** @todo must check if virtual IF is already cleared on entry!!!!!!!!!!!!!!!!!!!!!!! 1071 1071 */ 1072 int patmPatchGenIntEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR pIntHandlerGC)1072 int patmPatchGenIntEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pIntHandlerGC) 1073 1073 { 1074 1074 uint32_t size; … … 1102 1102 * @param pTrapHandlerGC IDT handler address 1103 1103 */ 1104 int patmPatchGenTrapEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR pTrapHandlerGC)1104 int patmPatchGenTrapEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pTrapHandlerGC) 1105 1105 { 1106 1106 uint32_t size; … … 1121 1121 1122 1122 #ifdef VBOX_WITH_STATISTICS 1123 int patmPatchGenStats(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC)1123 int patmPatchGenStats(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC) 1124 1124 { 1125 1125 uint32_t size; … … 1213 1213 break; 1214 1214 } 1215 *(RTGCPTR *)&pPB[2] = pVM->patm.s.pCPUMCtxGC + offset;1215 *(RTGCPTR32 *)&pPB[2] = pVM->patm.s.pCPUMCtxGC + offset; 1216 1216 patmPatchAddReloc32(pVM, pPatch, &pPB[2], FIXUP_ABSOLUTE); 1217 1217 1218 PATCHGEN_EPILOG(pPatch, 2 + sizeof(RTGCPTR ));1218 PATCHGEN_EPILOG(pPatch, 2 + sizeof(RTGCPTR32)); 1219 1219 return rc; 1220 1220 } … … 1279 1279 break; 1280 1280 } 1281 *(RTGCPTR *)&pPB[2] = pVM->patm.s.pCPUMCtxGC + offset;1281 *(RTGCPTR32 *)&pPB[2] = pVM->patm.s.pCPUMCtxGC + offset; 1282 1282 patmPatchAddReloc32(pVM, pPatch, &pPB[2], FIXUP_ABSOLUTE); 1283 1283 1284 PATCHGEN_EPILOG(pPatch, 2 + sizeof(RTGCPTR ));1284 PATCHGEN_EPILOG(pPatch, 2 + sizeof(RTGCPTR32)); 1285 1285 return rc; 1286 1286 } … … 1289 1289 * mov GPR, SS 1290 1290 */ 1291 int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC)1291 int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC) 1292 1292 { 1293 1293 uint32_t size, offset; … … 1340 1340 * @param pCurInstrGC Guest instruction address 1341 1341 */ 1342 int patmPatchGenSldtStr(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC)1342 int patmPatchGenSldtStr(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC) 1343 1343 { 1344 1344 // sldt %Ew … … 1365 1365 if (pCpu->pCurInstr->opcode == OP_STR) 1366 1366 { 1367 *(RTGCPTR *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, tr);1367 *(RTGCPTR32 *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, tr); 1368 1368 } 1369 1369 else 1370 1370 { 1371 *(RTGCPTR *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, ldtr);1371 *(RTGCPTR32 *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, ldtr); 1372 1372 } 1373 1373 patmPatchAddReloc32(pVM, pPatch, &pPB[offset], FIXUP_ABSOLUTE); 1374 offset += sizeof(RTGCPTR );1374 offset += sizeof(RTGCPTR32); 1375 1375 } 1376 1376 else … … 1402 1402 i++; //skip segment prefix 1403 1403 1404 rc = patmPatchReadBytes(pVM, &pPB[offset], (RTGCPTR )((RTGCUINTPTR)pCurInstrGC + i), pCpu->opsize - i);1404 rc = patmPatchReadBytes(pVM, &pPB[offset], (RTGCPTR32)((RTGCUINTPTR32)pCurInstrGC + i), pCpu->opsize - i); 1405 1405 AssertRCReturn(rc, rc); 1406 1406 offset += (pCpu->opsize - i); … … 1410 1410 if (pCpu->pCurInstr->opcode == OP_STR) 1411 1411 { 1412 *(RTGCPTR *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, tr);1412 *(RTGCPTR32 *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, tr); 1413 1413 } 1414 1414 else 1415 1415 { 1416 *(RTGCPTR *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, ldtr);1416 *(RTGCPTR32 *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, ldtr); 1417 1417 } 1418 1418 patmPatchAddReloc32(pVM, pPatch, &pPB[offset], FIXUP_ABSOLUTE); 1419 offset += sizeof(RTGCPTR );1419 offset += sizeof(RTGCPTR32); 1420 1420 1421 1421 pPB[offset++] = 0x66; // mov word ptr [edx],ax … … 1441 1441 * @param pCurInstrGC Guest instruction address 1442 1442 */ 1443 int patmPatchGenSxDT(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC)1443 int patmPatchGenSxDT(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC) 1444 1444 { 1445 1445 int rc = VINF_SUCCESS; … … 1496 1496 if (pCpu->prefix == PREFIX_SEG) 1497 1497 i++; //skip segment prefix 1498 rc = patmPatchReadBytes(pVM, &pPB[offset], (RTGCPTR )((RTGCUINTPTR)pCurInstrGC + i), pCpu->opsize - i);1498 rc = patmPatchReadBytes(pVM, &pPB[offset], (RTGCPTR32)((RTGCUINTPTR32)pCurInstrGC + i), pCpu->opsize - i); 1499 1499 AssertRCReturn(rc, rc); 1500 1500 offset += (pCpu->opsize - i); … … 1502 1502 pPB[offset++] = 0x66; // mov ax, CPUMCTX.gdtr.limit 1503 1503 pPB[offset++] = 0xA1; 1504 *(RTGCPTR *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + offset_limit;1504 *(RTGCPTR32 *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + offset_limit; 1505 1505 patmPatchAddReloc32(pVM, pPatch, &pPB[offset], FIXUP_ABSOLUTE); 1506 offset += sizeof(RTGCPTR );1506 offset += sizeof(RTGCPTR32); 1507 1507 1508 1508 pPB[offset++] = 0x66; // mov word ptr [edx],ax … … 1511 1511 1512 1512 pPB[offset++] = 0xA1; // mov eax, CPUMCTX.gdtr.base 1513 *(RTGCPTR *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + offset_base;1513 *(RTGCPTR32 *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + offset_base; 1514 1514 patmPatchAddReloc32(pVM, pPatch, &pPB[offset], FIXUP_ABSOLUTE); 1515 offset += sizeof(RTGCPTR );1515 offset += sizeof(RTGCPTR32); 1516 1516 1517 1517 pPB[offset++] = 0x89; // mov dword ptr [edx+2],eax … … 1535 1535 * @param pCurInstrGC Guest instruction address 1536 1536 */ 1537 int patmPatchGenCpuid(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC)1537 int patmPatchGenCpuid(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC) 1538 1538 { 1539 1539 uint32_t size; … … 1583 1583 * Relative jump from patch code to patch code (no fixup required) 1584 1584 */ 1585 int patmPatchGenPatchJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, RCPTRTYPE(uint8_t *) pPatchAddrGC, bool fAddLookupRecord)1585 int patmPatchGenPatchJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC, RCPTRTYPE(uint8_t *) pPatchAddrGC, bool fAddLookupRecord) 1586 1586 { 1587 1587 int32_t displ; -
trunk/src/VBox/VMM/PATM/PATMPatch.h
r9212 r9220 22 22 #define ___PATMPATCH_H 23 23 24 int patmPatchAddReloc32(PVM pVM, PPATCHINFO pPatch, uint8_t *pRelocHC, uint32_t uType, RTGCPTR pSource = 0, RTGCPTRpDest = 0);25 int patmPatchAddJump(PVM pVM, PPATCHINFO pPatch, uint8_t *pJumpHC, uint32_t offset, RTGCPTR pTargetGC, uint32_t opcode);24 int patmPatchAddReloc32(PVM pVM, PPATCHINFO pPatch, uint8_t *pRelocHC, uint32_t uType, RTGCPTR32 pSource = 0, RTGCPTR32 pDest = 0); 25 int patmPatchAddJump(PVM pVM, PPATCHINFO pPatch, uint8_t *pJumpHC, uint32_t offset, RTGCPTR32 pTargetGC, uint32_t opcode); 26 26 27 int patmPatchGenCpuid(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC);28 int patmPatchGenSxDT(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC);29 int patmPatchGenSldtStr(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC);27 int patmPatchGenCpuid(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC); 28 int patmPatchGenSxDT(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC); 29 int patmPatchGenSldtStr(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC); 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, RTGCPTR pCurInstrGC);32 int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC); 33 33 int patmPatchGenRelJump(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pTargetGC, uint32_t opcode, bool fSizeOverride); 34 34 int patmPatchGenLoop(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pTargetGC, uint32_t opcode, bool fSizeOverride); 35 35 int patmPatchGenPushf(PVM pVM, PPATCHINFO pPatch, bool fSizeOverride); 36 36 int patmPatchGenPopf(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pReturnAddrGC, bool fSizeOverride, bool fGenJumpBack); 37 int patmPatchGenSti(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, RTGCPTRpNextInstrGC);37 int patmPatchGenSti(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC, RTGCPTR32 pNextInstrGC); 38 38 39 39 int patmPatchGenCli(PVM pVM, PPATCHINFO pPatch); 40 int patmPatchGenIret(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, bool fSizeOverride);40 int patmPatchGenIret(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC, bool fSizeOverride); 41 41 int patmPatchGenDuplicate(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pCurInstrGC); 42 42 int patmPatchGenPushCS(PVM pVM, PPATCHINFO pPatch); 43 43 44 int patmPatchGenStats(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC);44 int patmPatchGenStats(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC); 45 45 46 int patmPatchGenCall(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pInstrGC, RTGCPTRpTargetGC, bool fIndirect);46 int patmPatchGenCall(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pInstrGC, RTGCPTR32 pTargetGC, bool fIndirect); 47 47 int patmPatchGenRet(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pCurInstrGC); 48 48 49 int patmPatchGenPatchJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, RCPTRTYPE(uint8_t *) pPatchAddrGC, bool fAddLookupRecord = true);49 int patmPatchGenPatchJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC, RCPTRTYPE(uint8_t *) pPatchAddrGC, bool fAddLookupRecord = true); 50 50 51 51 /** … … 58 58 * @param pCurInstrGC Current instruction address 59 59 */ 60 int patmPatchGenJump(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC);60 int patmPatchGenJump(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC); 61 61 62 62 /** … … 68 68 * @param pTrapHandlerGC IDT handler address 69 69 */ 70 int patmPatchGenTrapEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR pTrapHandlerGC);70 int patmPatchGenTrapEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pTrapHandlerGC); 71 71 72 72 /** … … 78 78 * @param pIntHandlerGC IDT handler address 79 79 */ 80 int patmPatchGenIntEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR pIntHandlerGC);80 int patmPatchGenIntEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pIntHandlerGC); 81 81 82 82 /** … … 110 110 * 111 111 */ 112 int patmPatchGenSetPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC);112 int patmPatchGenSetPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC); 113 113 114 114 /** … … 121 121 * 122 122 */ 123 int patmPatchGenClearPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC);123 int patmPatchGenClearPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC); 124 124 125 125 /** … … 131 131 * @param pNextInstrGC Next guest instruction 132 132 */ 133 int patmPatchGenClearInhibitIRQ(PVM pVM, PPATCHINFO pPatch, RTGCPTR pNextInstrGC);133 int patmPatchGenClearInhibitIRQ(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pNextInstrGC); 134 134 135 135 /** … … 142 142 * 143 143 */ 144 int patmPatchGenCheckIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC);144 int patmPatchGenCheckIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC); 145 145 146 146 /** -
trunk/src/VBox/VMM/PATM/VMMAll/CSAMAll.cpp
r9212 r9220 53 53 * @param pvFault Fault address 54 54 */ 55 CSAMDECL(int) CSAMExecFault(PVM pVM, RTGCPTR pvFault)55 CSAMDECL(int) CSAMExecFault(PVM pVM, RTGCPTR32 pvFault) 56 56 { 57 57 if(!CSAMIsEnabled(pVM)) … … 80 80 * @param pPage GC page address 81 81 */ 82 CSAMDECL(bool) CSAMIsPageScanned(PVM pVM, RTGCPTR pPage)82 CSAMDECL(bool) CSAMIsPageScanned(PVM pVM, RTGCPTR32 pPage) 83 83 { 84 84 int pgdir, bit; … … 108 108 * 109 109 */ 110 CSAMDECL(int) CSAMMarkPage(PVM pVM, RTGCPTR pPage, bool fScanned)110 CSAMDECL(int) CSAMMarkPage(PVM pVM, RTGCPTR32 pPage, bool fScanned) 111 111 { 112 112 int pgdir, bit; … … 177 177 * @param GCPtr GC pointer of page 178 178 */ 179 CSAMDECL(bool) CSAMDoesPageNeedScanning(PVM pVM, RTGCPTR GCPtr)179 CSAMDECL(bool) CSAMDoesPageNeedScanning(PVM pVM, RTGCPTR32 GCPtr) 180 180 { 181 181 if(!CSAMIsEnabled(pVM)) … … 200 200 * @param GCPtr GC pointer of page 201 201 */ 202 CSAMDECL(void) CSAMMarkPossibleCodePage(PVM pVM, RTGCPTR GCPtr)202 CSAMDECL(void) CSAMMarkPossibleCodePage(PVM pVM, RTGCPTR32 GCPtr) 203 203 { 204 204 if (pVM->csam.s.cPossibleCodePages < RT_ELEMENTS(pVM->csam.s.pvPossibleCodePage)) … … 247 247 * @param GCPtr GC pointer of page table entry 248 248 */ 249 CSAMDECL(bool) CSAMIsKnownDangerousInstr(PVM pVM, RTGCPTR GCPtr)249 CSAMDECL(bool) CSAMIsKnownDangerousInstr(PVM pVM, RTGCPTR32 GCPtr) 250 250 { 251 251 for (uint32_t i=0;i<pVM->csam.s.cDangerousInstr;i++) -
trunk/src/VBox/VMM/PATM/VMMAll/PATMAll.cpp
r9212 r9220 52 52 PATMDECL(void) PATMRawEnter(PVM pVM, PCPUMCTXCORE pCtxCore) 53 53 { 54 bool fPatchCode = PATMIsPatchGCAddr(pVM, (RTGCPTR )pCtxCore->eip);54 bool fPatchCode = PATMIsPatchGCAddr(pVM, (RTGCPTR32)pCtxCore->eip); 55 55 56 56 /* … … 81 81 ) 82 82 { 83 if (pVM->patm.s.pfnSysEnterGC != (RTGCPTR )pCtx->SysEnter.eip)83 if (pVM->patm.s.pfnSysEnterGC != (RTGCPTR32)pCtx->SysEnter.eip) 84 84 { 85 85 pVM->patm.s.pfnSysEnterPatchGC = 0; … … 94 94 { 95 95 pVM->patm.s.pfnSysEnterPatchGC = PATMR3QueryPatchGCPtr(pVM, pCtx->SysEnter.eip); 96 pVM->patm.s.pfnSysEnterGC = (RTGCPTR )pCtx->SysEnter.eip;96 pVM->patm.s.pfnSysEnterGC = (RTGCPTR32)pCtx->SysEnter.eip; 97 97 Assert(pVM->patm.s.pfnSysEnterPatchGC); 98 98 } 99 99 } 100 100 else 101 pVM->patm.s.pfnSysEnterGC = (RTGCPTR )pCtx->SysEnter.eip;101 pVM->patm.s.pfnSysEnterGC = (RTGCPTR32)pCtx->SysEnter.eip; 102 102 } 103 103 } … … 126 126 PATMDECL(void) PATMRawLeave(PVM pVM, PCPUMCTXCORE pCtxCore, int rawRC) 127 127 { 128 bool fPatchCode = PATMIsPatchGCAddr(pVM, (RTGCPTR )pCtxCore->eip);128 bool fPatchCode = PATMIsPatchGCAddr(pVM, (RTGCPTR32)pCtxCore->eip); 129 129 /* 130 130 * We will only be called if PATMRawEnter was previously called. … … 157 157 { 158 158 PATMTRANSSTATE enmState; 159 RTGCPTR pOrgInstrGC = PATMR3PatchToGCPtr(pVM, pCtxCore->eip, &enmState);159 RTGCPTR32 pOrgInstrGC = PATMR3PatchToGCPtr(pVM, pCtxCore->eip, &enmState); 160 160 161 161 AssertRelease(pOrgInstrGC); … … 191 191 if (!fPatchCode) 192 192 { 193 if (CTXSUFF(pVM->patm.s.pGCState)->GCPtrInhibitInterrupts == (RTGCPTR )pCtxCore->eip)193 if (CTXSUFF(pVM->patm.s.pGCState)->GCPtrInhibitInterrupts == (RTGCPTR32)pCtxCore->eip) 194 194 { 195 195 EMSetInhibitInterruptsPC(pVM, pCtxCore->eip); … … 246 246 * @param pAddrGC Guest context address 247 247 */ 248 PATMDECL(bool) PATMShouldUseRawMode(PVM pVM, RTGCPTR pAddrGC)248 PATMDECL(bool) PATMShouldUseRawMode(PVM pVM, RTGCPTR32 pAddrGC) 249 249 { 250 250 return ( PATMIsEnabled(pVM) 251 && ((pAddrGC >= (RTGCPTR )pVM->patm.s.pPatchMemGC && pAddrGC < (RTGCPTR)pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem))) ? true : false;251 && ((pAddrGC >= (RTGCPTR32)pVM->patm.s.pPatchMemGC && pAddrGC < (RTGCPTR32)pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem))) ? true : false; 252 252 } 253 253 … … 270 270 * @param pAddrGC Guest context address 271 271 */ 272 PATMDECL(bool) PATMIsPatchGCAddr(PVM pVM, RTGCPTR pAddrGC)272 PATMDECL(bool) PATMIsPatchGCAddr(PVM pVM, RTGCPTR32 pAddrGC) 273 273 { 274 274 RTGCPTR32 pAddrGG32 = (RTGCPTR32)pAddrGC; 275 275 276 return (PATMIsEnabled(pVM) && pAddrGG32 >= (RTGCPTR )pVM->patm.s.pPatchMemGC && pAddrGG32 < (RTGCPTR)pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem) ? true : false;276 return (PATMIsEnabled(pVM) && pAddrGG32 >= (RTGCPTR32)pVM->patm.s.pPatchMemGC && pAddrGG32 < (RTGCPTR32)pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem) ? true : false; 277 277 } 278 278 … … 285 285 * @param pCachedData GC pointer to cached data 286 286 */ 287 PATMDECL(int) PATMSetMMIOPatchInfo(PVM pVM, RTGCPHYS GCPhys, RTGCPTR pCachedData)287 PATMDECL(int) PATMSetMMIOPatchInfo(PVM pVM, RTGCPHYS GCPhys, RTGCPTR32 pCachedData) 288 288 { 289 289 pVM->patm.s.mmio.GCPhys = GCPhys; … … 325 325 if (PATMIsEnabled(pVM)) 326 326 { 327 if (PATMIsPatchGCAddr(pVM, (RTGCPTR )pCtxCore->eip))327 if (PATMIsPatchGCAddr(pVM, (RTGCPTR32)pCtxCore->eip)) 328 328 return false; 329 329 } … … 339 339 * 340 340 */ 341 PATMDECL(PPATMPATCHREC) PATMQueryFunctionPatch(PVM pVM, RTGCPTR pInstrGC)341 PATMDECL(PPATMPATCHREC) PATMQueryFunctionPatch(PVM pVM, RTGCPTR32 pInstrGC) 342 342 { 343 343 PPATMPATCHREC pRec; … … 362 362 * @param pSize Original instruction size (out, optional) 363 363 */ 364 PATMDECL(bool) PATMIsInt3Patch(PVM pVM, RTGCPTR pInstrGC, uint32_t *pOpcode, uint32_t *pSize)364 PATMDECL(bool) PATMIsInt3Patch(PVM pVM, RTGCPTR32 pInstrGC, uint32_t *pOpcode, uint32_t *pSize) 365 365 { 366 366 PPATMPATCHREC pRec; … … 467 467 * @param pRelBranchPatch Relative duplicated function address 468 468 */ 469 PATMDECL(int) PATMAddBranchToLookupCache(PVM pVM, RTGCPTR pJumpTableGC, RTGCPTRpBranchTarget, RTGCUINTPTR pRelBranchPatch)469 PATMDECL(int) PATMAddBranchToLookupCache(PVM pVM, RTGCPTR32 pJumpTableGC, RTGCPTR32 pBranchTarget, RTGCUINTPTR pRelBranchPatch) 470 470 { 471 471 PPATCHJUMPTABLE pJumpTable; -
trunk/src/VBox/VMM/PATM/VMMGC/CSAMGC.cpp
r9212 r9220 66 66 { 67 67 PPATMGCSTATE pPATMGCState; 68 bool fPatchCode = PATMIsPatchGCAddr(pVM, (RTGCPTR )pRegFrame->eip);68 bool fPatchCode = PATMIsPatchGCAddr(pVM, (RTGCPTR32)pRegFrame->eip); 69 69 int rc; 70 70 … … 103 103 if (cpl != 3) 104 104 { 105 rc = PATMGCHandleWriteToPatchPage(pVM, pRegFrame, (RTGCPTR )((RTGCUINTPTR)pvRange + offRange), 4 /** @todo */);105 rc = PATMGCHandleWriteToPatchPage(pVM, pRegFrame, (RTGCPTR32)((RTGCUINTPTR)pvRange + offRange), 4 /** @todo */); 106 106 if (rc == VINF_SUCCESS) 107 107 return rc; -
trunk/src/VBox/VMM/PATM/VMMGC/PATMGC.cpp
r9212 r9220 63 63 * (If it's a EIP range this's the EIP, if not it's pvFault.) 64 64 */ 65 PATMGCDECL(int) PATMGCMonitorPage(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, void *pvFault, void *pvRange, uintptr_t offRange)65 PATMGCDECL(int) PATMGCMonitorPage(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange) 66 66 { 67 67 pVM->patm.s.pvFaultMonitor = (RTGCPTR32)pvFault; … … 81 81 * 82 82 */ 83 PATMGCDECL(int) PATMGCHandleWriteToPatchPage(PVM pVM, PCPUMCTXCORE pRegFrame, RTGCPTR GCPtr, uint32_t cbWrite)83 PATMGCDECL(int) PATMGCHandleWriteToPatchPage(PVM pVM, PCPUMCTXCORE pRegFrame, RTGCPTR32 GCPtr, uint32_t cbWrite) 84 84 { 85 85 RTGCUINTPTR pWritePageStart, pWritePageEnd; … … 97 97 pWritePageEnd = ((RTGCUINTPTR)GCPtr + cbWrite - 1) & PAGE_BASE_GC_MASK; 98 98 99 pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(CTXSUFF(&pVM->patm.s.PatchLookupTree)->PatchTreeByPage, (RTGCPTR )pWritePageStart);99 pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(CTXSUFF(&pVM->patm.s.PatchLookupTree)->PatchTreeByPage, (RTGCPTR32)pWritePageStart); 100 100 if ( !pPatchPage 101 101 && pWritePageStart != pWritePageEnd 102 102 ) 103 103 { 104 pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(CTXSUFF(&pVM->patm.s.PatchLookupTree)->PatchTreeByPage, (RTGCPTR )pWritePageEnd);104 pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(CTXSUFF(&pVM->patm.s.PatchLookupTree)->PatchTreeByPage, (RTGCPTR32)pWritePageEnd); 105 105 } 106 106 … … 162 162 /* Very important check -> otherwise we have a security leak. */ 163 163 AssertReturn(!pRegFrame->eflags.Bits.u1VM && (pRegFrame->ss & X86_SEL_RPL) == 1, VERR_ACCESS_DENIED); 164 Assert(PATMIsPatchGCAddr(pVM, (RTGCPTR )pRegFrame->eip));164 Assert(PATMIsPatchGCAddr(pVM, (RTGCPTR32)pRegFrame->eip)); 165 165 166 166 /* OP_ILLUD2 in PATM generated code? */ … … 188 188 * edi = PATCHJUMPTABLE ptr 189 189 */ 190 AssertMsg(!pRegFrame->edi || PATMIsPatchGCAddr(pVM, (RTGCPTR )pRegFrame->edi), ("edx = %VGv\n", pRegFrame->edi));190 AssertMsg(!pRegFrame->edi || PATMIsPatchGCAddr(pVM, (RTGCPTR32)pRegFrame->edi), ("edx = %VGv\n", pRegFrame->edi)); 191 191 192 192 Log(("PATMGC: lookup %VGv jump table=%VGv\n", pRegFrame->edx, pRegFrame->edi)); 193 193 194 pRec = PATMQueryFunctionPatch(pVM, (RTGCPTR )(pRegFrame->edx));194 pRec = PATMQueryFunctionPatch(pVM, (RTGCPTR32)(pRegFrame->edx)); 195 195 if (pRec) 196 196 { … … 198 198 { 199 199 RTGCUINTPTR pRelAddr = pRec->patch.pPatchBlockOffset; /* make it relative */ 200 rc = PATMAddBranchToLookupCache(pVM, (RTGCPTR )pRegFrame->edi, (RTGCPTR)pRegFrame->edx, pRelAddr);200 rc = PATMAddBranchToLookupCache(pVM, (RTGCPTR32)pRegFrame->edi, (RTGCPTR32)pRegFrame->edx, pRelAddr); 201 201 if (rc == VINF_SUCCESS) 202 202 { … … 457 457 458 458 /* Int 3 in PATM generated code? (most common case) */ 459 if (PATMIsPatchGCAddr(pVM, (RTGCPTR )pRegFrame->eip))459 if (PATMIsPatchGCAddr(pVM, (RTGCPTR32)pRegFrame->eip)) 460 460 { 461 461 /* @note hardcoded assumption about it being a single byte int 3 instruction. */ … … 465 465 466 466 /** @todo could use simple caching here to speed things up. */ 467 pRec = (PPATMPATCHREC)RTAvloGCPtrGet(&CTXSUFF(pVM->patm.s.PatchLookupTree)->PatchTree, (RTGCPTR )(pRegFrame->eip - 1)); /* eip is pointing to the instruction *after* 'int 3' already */467 pRec = (PPATMPATCHREC)RTAvloGCPtrGet(&CTXSUFF(pVM->patm.s.PatchLookupTree)->PatchTree, (RTGCPTR32)(pRegFrame->eip - 1)); /* eip is pointing to the instruction *after* 'int 3' already */ 468 468 if (pRec && pRec->patch.uState == PATCH_ENABLED) 469 469 {
Note:
See TracChangeset
for help on using the changeset viewer.