VirtualBox

Changeset 9220 in vbox for trunk/src/VBox


Ignore:
Timestamp:
May 29, 2008 12:34:27 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
31390
Message:

Default to 32 bits virtual addresses in CSAM & PATM.

Location:
trunk/src/VBox/VMM/PATM
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/PATM/CSAM.cpp

    r9216 r9220  
    7474static DECLCALLBACK(int) CSAMCodePageInvalidate(PVM pVM, RTGCPTR GCPtr);
    7575
    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);
     76bool                csamIsCodeScanned(PVM pVM, RTGCPTR32 pInstr, PCSAMPAGE *pPage);
     77int                 csamR3CheckPageRecord(PVM pVM, RTGCPTR32 pInstr);
     78static PCSAMPAGE    csamCreatePageRecord(PVM pVM, RTGCPTR32 GCPtr, CSAMTAG enmTag, bool fCode32, bool fMonitorInvalidation = false);
     79static int          csamRemovePageRecord(PVM pVM, RTGCPTR32 GCPtr);
    8080static int          csamReinit(PVM pVM);
    81 static void         csamMarkCode(PVM pVM, PCSAMPAGE pPage, RTGCPTR pInstr, uint32_t opsize, bool fScanned);
     81static void         csamMarkCode(PVM pVM, PCSAMPAGE pPage, RTGCPTR32 pInstr, uint32_t opsize, bool fScanned);
    8282static int          csamAnalyseCodeStream(PVM pVM, RCPTRTYPE(uint8_t *) pInstrGC, RCPTRTYPE(uint8_t *) pCurInstrGC, bool fCode32,
    8383                                          PFN_CSAMR3ANALYSE pfnCSAMR3Analyse, void *pUserData, PCSAMP2GLOOKUPREC pCacheRec);
     
    118118    rc = MMR3HyperAllocOnceNoRel(pVM, CSAM_PGDIRBMP_CHUNKS*sizeof(RTHCPTR), 0, MM_TAG_CSAM, (void **)&pVM->csam.s.pPDBitmapHC);
    119119    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);
    121121    AssertRCReturn(rc, rc);
    122122    pVM->csam.s.pPDBitmapGC   = MMHyperHC2GC(pVM, pVM->csam.s.pPDGCBitmapHC);
     
    605605    PVM           pVM      = (PVM)pCpu->apvUserData[0];
    606606    RTHCUINTPTR   pInstrHC = (RTHCUINTPTR)pCpu->apvUserData[1];
    607     RTGCUINTPTR   pInstrGC = (uintptr_t)pCpu->apvUserData[2];
     607    RTGCUINTPTR32   pInstrGC = (uintptr_t)pCpu->apvUserData[2];
    608608    int           orgsize  = size;
    609609
     
    612612    for (int i=0;i<orgsize;i++)
    613613    {
    614         int rc = PATMR3QueryOpcode(pVM, (RTGCPTR)pSrc, pDest);
     614        int rc = PATMR3QueryOpcode(pVM, (RTGCPTR32)pSrc, pDest);
    615615        if (VBOX_SUCCESS(rc))
    616616        {
     
    642642}
    643643
    644 inline int CSAMR3DISInstr(PVM pVM, DISCPUSTATE *pCpu, RTGCPTR InstrGC, uint8_t *InstrHC, uint32_t *pOpsize, char *pszOutput)
     644inline int CSAMR3DISInstr(PVM pVM, DISCPUSTATE *pCpu, RTGCPTR32 InstrGC, uint8_t *InstrHC, uint32_t *pOpsize, char *pszOutput)
    645645{
    646646    (pCpu)->pfnReadBytes  = CSAMR3ReadBytes;
     
    12701270           )
    12711271        {
    1272             RTGCPTR  pJumpTableGC = (RTGCPTR)cpu.param1.disp32;
     1272            RTGCPTR32  pJumpTableGC = (RTGCPTR32)cpu.param1.disp32;
    12731273            uint8_t *pJumpTableHC;
    12741274            int      rc2;
     
    12881288                        break;
    12891289
    1290                     addr = *(RTGCPTR *)(pJumpTableHC + cpu.param1.scale * i);
     1290                    addr = *(RTGCPTR32 *)(pJumpTableHC + cpu.param1.scale * i);
    12911291
    12921292                    rc2 = PGMGstGetPage(pVM, addr, &fFlags, NULL);
     
    13461346 * @param   pInstr      Page address
    13471347 */
    1348 uint64_t csamR3CalcPageHash(PVM pVM, RTGCPTR pInstr)
     1348uint64_t csamR3CalcPageHash(PVM pVM, RTGCPTR32 pInstr)
    13491349{
    13501350    uint64_t hash   = 0;
     
    14111411 * @param   fRemovePage Page removal flag
    14121412 */
    1413 static int csamFlushPage(PVM pVM, RTGCPTR addr, bool fRemovePage)
     1413static int csamFlushPage(PVM pVM, RTGCPTR32 addr, bool fRemovePage)
    14141414{
    14151415    PCSAMPAGEREC pPageRec;
     
    15181518 * @param   addr        GC address of the page to flush
    15191519 */
    1520 CSAMR3DECL(int) CSAMR3FlushPage(PVM pVM, RTGCPTR addr)
     1520CSAMR3DECL(int) CSAMR3FlushPage(PVM pVM, RTGCPTR32 addr)
    15211521{
    15221522    return csamFlushPage(pVM, addr, true /* remove page record */);
     
    15301530 * @param   addr        GC address of the page to flush
    15311531 */
    1532 CSAMR3DECL(int) CSAMR3RemovePage(PVM pVM, RTGCPTR addr)
     1532CSAMR3DECL(int) CSAMR3RemovePage(PVM pVM, RTGCPTR32 addr)
    15331533{
    15341534    PCSAMPAGEREC pPageRec;
     
    15551555 * @param   pInstrGC    GC instruction pointer
    15561556 */
    1557 int csamR3CheckPageRecord(PVM pVM, RTGCPTR pInstrGC)
     1557int csamR3CheckPageRecord(PVM pVM, RTGCPTR32 pInstrGC)
    15581558{
    15591559    PCSAMPAGEREC pPageRec;
     
    16021602 * @param   fMonitorInvalidation    Monitor page invalidation flag
    16031603 */
    1604 static PCSAMPAGE csamCreatePageRecord(PVM pVM, RTGCPTR GCPtr, CSAMTAG enmTag, bool fCode32, bool fMonitorInvalidation)
     1604static PCSAMPAGE csamCreatePageRecord(PVM pVM, RTGCPTR32 GCPtr, CSAMTAG enmTag, bool fCode32, bool fMonitorInvalidation)
    16051605{
    16061606    PCSAMPAGEREC pPage;
     
    17031703 * @param   enmTag      Monitor tag
    17041704 */
    1705 CSAMR3DECL(int) CSAMR3MonitorPage(PVM pVM, RTGCPTR pPageAddrGC, CSAMTAG enmTag)
     1705CSAMR3DECL(int) CSAMR3MonitorPage(PVM pVM, RTGCPTR32 pPageAddrGC, CSAMTAG enmTag)
    17061706{
    17071707    PCSAMPAGEREC pPageRec = NULL;
     
    18251825 * @param   enmTag      Monitor tag
    18261826 */
    1827 CSAMR3DECL(int) CSAMR3UnmonitorPage(PVM pVM, RTGCPTR pPageAddrGC, CSAMTAG enmTag)
     1827CSAMR3DECL(int) CSAMR3UnmonitorPage(PVM pVM, RTGCPTR32 pPageAddrGC, CSAMTAG enmTag)
    18281828{
    18291829    pPageAddrGC &= PAGE_BASE_GC_MASK;
     
    18491849 * @param   GCPtr       Page address
    18501850 */
    1851 static int csamRemovePageRecord(PVM pVM, RTGCPTR GCPtr)
     1851static int csamRemovePageRecord(PVM pVM, RTGCPTR32 GCPtr)
    18521852{
    18531853    PCSAMPAGEREC pPageRec;
     
    19841984 * @param   pPage       CSAM patch structure pointer
    19851985 */
    1986 bool csamIsCodeScanned(PVM pVM, RTGCPTR pInstr, PCSAMPAGE *pPage)
     1986bool csamIsCodeScanned(PVM pVM, RTGCPTR32 pInstr, PCSAMPAGE *pPage)
    19871987{
    19881988    PCSAMPAGEREC pPageRec;
     
    20362036 * @param   fScanned    Mark as scanned or not
    20372037 */
    2038 static void csamMarkCode(PVM pVM, PCSAMPAGE pPage, RTGCPTR pInstr, uint32_t opsize, bool fScanned)
     2038static void csamMarkCode(PVM pVM, PCSAMPAGE pPage, RTGCPTR32 pInstr, uint32_t opsize, bool fScanned)
    20392039{
    20402040    LogFlow(("csamMarkCodeAsScanned %VGv opsize=%d\n", pInstr, opsize));
     
    20752075 * @param   fScanned    Mark as scanned or not
    20762076 */
    2077 CSAMR3DECL(int) CSAMR3MarkCode(PVM pVM, RTGCPTR pInstr, uint32_t opsize, bool fScanned)
     2077CSAMR3DECL(int) CSAMR3MarkCode(PVM pVM, RTGCPTR32 pInstr, uint32_t opsize, bool fScanned)
    20782078{
    20792079    PCSAMPAGE pPage = 0;
     
    21032103 * @param   pInstrGC    Instruction pointer
    21042104 */
    2105 CSAMR3DECL(int) CSAMR3CheckCodeEx(PVM pVM, RTSEL Sel, CPUMSELREGHID *pHiddenSel, RTGCPTR pInstrGC)
     2105CSAMR3DECL(int) CSAMR3CheckCodeEx(PVM pVM, RTSEL Sel, CPUMSELREGHID *pHiddenSel, RTGCPTR32 pInstrGC)
    21062106{
    21072107    if (EMIsRawRing0Enabled(pVM) == false || PATMIsPatchGCAddr(pVM, pInstrGC) == true)
     
    21372137 * @param   pInstrGC    Instruction pointer (0:32 virtual address)
    21382138 */
    2139 CSAMR3DECL(int) CSAMR3CheckCode(PVM pVM, RTGCPTR pInstrGC)
     2139CSAMR3DECL(int) CSAMR3CheckCode(PVM pVM, RTGCPTR32 pInstrGC)
    21402140{
    21412141    int rc;
     
    21792179        int          rc;
    21802180        PCSAMPAGEREC pPageRec;
    2181         RTGCPTR      GCPtr = pVM->csam.s.pvDirtyBasePage[i];
     2181        RTGCPTR32      GCPtr = pVM->csam.s.pvDirtyBasePage[i];
    21822182
    21832183        GCPtr = GCPtr & PAGE_BASE_GC_MASK;
     
    22232223    for (uint32_t i=0;i<pVM->csam.s.cPossibleCodePages;i++)
    22242224    {
    2225         RTGCPTR      GCPtr = pVM->csam.s.pvPossibleCodePage[i];
     2225        RTGCPTR32      GCPtr = pVM->csam.s.pvPossibleCodePage[i];
    22262226
    22272227        GCPtr = GCPtr & PAGE_BASE_GC_MASK;
     
    22622262{
    22632263    uint16_t    cbIDT;
    2264     RTGCPTR     GCPtrIDT = CPUMGetGuestIDTR(pVM, &cbIDT);
     2264    RTGCPTR32     GCPtrIDT = CPUMGetGuestIDTR(pVM, &cbIDT);
    22652265    uint32_t    iGateEnd;
    22662266    uint32_t    maxGates;
     
    22952295        for (unsigned i=0;i<RT_ELEMENTS(pVM->csam.s.pvCallInstruction);i++)
    22962296        {
    2297             RTGCPTR pHandler = pVM->csam.s.pvCallInstruction[i];
     2297            RTGCPTR32 pHandler = pVM->csam.s.pvCallInstruction[i];
    22982298
    22992299            if (pHandler)
     
    23652365           )
    23662366        {
    2367             RTGCPTR pHandler;
     2367            RTGCPTR32 pHandler;
    23682368            CSAMP2GLOOKUPREC cacheRec = {0};            /* Cache record for PATMGCVirtToHCVirt. */
    23692369            PCSAMPAGE pPage = NULL;
     
    24112411                PCPUMCTX    pCtx;
    24122412                DISCPUSTATE cpu;
    2413                 RTGCUINTPTR aOpenBsdPushCSOffset[3] = {0x03,       /* OpenBSD 3.7 & 3.8 */
     2413                RTGCUINTPTR32 aOpenBsdPushCSOffset[3] = {0x03,       /* OpenBSD 3.7 & 3.8 */
    24142414                                                       0x2B,       /* OpenBSD 4.0 installation ISO */
    24152415                                                       0x2F};      /* OpenBSD 4.0 after install */
     
    24622462                Log(("Gate handler 0x%X is SAFE!\n", iGate));
    24632463
    2464                 RTGCPTR pNewHandlerGC = PATMR3QueryPatchGCPtr(pVM, pHandler);
     2464                RTGCPTR32 pNewHandlerGC = PATMR3QueryPatchGCPtr(pVM, pHandler);
    24652465                if (pNewHandlerGC)
    24662466                {
     
    24832483 * @param   GCPtrCall   Call address
    24842484 */
    2485 CSAMR3DECL(int) CSAMR3RecordCallAddress(PVM pVM, RTGCPTR GCPtrCall)
     2485CSAMR3DECL(int) CSAMR3RecordCallAddress(PVM pVM, RTGCPTR32 GCPtrCall)
    24862486{
    24872487    for (unsigned i=0;i<RT_ELEMENTS(pVM->csam.s.pvCallInstruction);i++)
  • trunk/src/VBox/VMM/PATM/CSAMInternal.h

    r9212 r9220  
    252252 * @param   pBranchInstrGC  GC pointer of branch instruction
    253253 */
    254 inline RTGCPTR CSAMResolveBranch(PDISCPUSTATE pCpu, RTGCPTR pBranchInstrGC)
     254inline RTGCPTR32 CSAMResolveBranch(PDISCPUSTATE pCpu, RTGCPTR32 pBranchInstrGC)
    255255{
    256256    uint32_t disp;
     
    275275    }
    276276#ifdef IN_GC
    277     return (RTGCPTR)((uint8_t *)pBranchInstrGC + pCpu->opsize + disp);
     277    return (RTGCPTR32)((uint8_t *)pBranchInstrGC + pCpu->opsize + disp);
    278278#else
    279279    return pBranchInstrGC + pCpu->opsize + disp;
     
    282282
    283283__BEGIN_DECLS
    284 CSAMGCDECL(int) CSAMGCCodePageWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange);
     284CSAMGCDECL(int) CSAMGCCodePageWriteHandler(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR32 pvFault, RTGCPTR32 pvRange, uintptr_t offRange);
    285285__END_DECLS
    286286
  • trunk/src/VBox/VMM/PATM/PATM.cpp

    r9216 r9220  
    6464*******************************************************************************/
    6565
    66 static int          patmDisableUnusablePatch(PVM pVM, RTGCPTR pInstrGC, RTGCPTR pConflictAddr, PPATCHINFO pPatch);
     66static int          patmDisableUnusablePatch(PVM pVM, RTGCPTR32 pInstrGC, RTGCPTR32 pConflictAddr, PPATCHINFO pPatch);
    6767static int          patmActivateInt3Patch(PVM pVM, PPATCHINFO pPatch);
    6868static int          patmDeactivateInt3Patch(PVM pVM, PPATCHINFO pPatch);
    6969
    7070#ifdef LOG_ENABLED // keep gcc quiet
    71 static bool         patmIsCommonIDTHandlerPatch(PVM pVM, RTGCPTR pInstrGC);
     71static bool         patmIsCommonIDTHandlerPatch(PVM pVM, RTGCPTR32 pInstrGC);
    7272#endif
    7373#ifdef VBOX_WITH_STATISTICS
     
    409409PATMR3DECL(void) PATMR3Relocate(PVM pVM)
    410410{
    411     RTGCPTR         GCPtrNew = MMHyperHC2GC(pVM, pVM->patm.s.pGCStateHC);
     411    RTGCPTR32         GCPtrNew = MMHyperHC2GC(pVM, pVM->patm.s.pGCStateHC);
    412412    RTGCINTPTR      delta = GCPtrNew - pVM->patm.s.pGCStateGC;
    413413
     
    533533        for (int i=0;i<orgsize;i++)
    534534        {
    535             int rc = PATMR3QueryOpcode(pDisInfo->pVM, (RTGCPTR)pSrc, pDest);
     535            int rc = PATMR3QueryOpcode(pDisInfo->pVM, (RTGCPTR32)pSrc, pDest);
    536536            if (VBOX_SUCCESS(rc))
    537537            {
     
    635635        {
    636636        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));
    638638            if (!pRec->pSource || PATMIsPatchGCAddr(pVM, pRec->pSource))
    639639            {
    640                 *(RTGCUINTPTR *)pRec->pRelocPos += delta;
     640                *(RTGCUINTPTR32 *)pRec->pRelocPos += delta;
    641641            }
    642642            else
     
    649649
    650650                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;
    652652
    653653                rc = PGMPhysReadGCPtr(pVM, curInstr, pPatch->patch.pPrivInstrGC, pPatch->patch.cbPrivInstr);
    654654                Assert(VBOX_SUCCESS(rc) || rc == VERR_PAGE_NOT_PRESENT || rc == VERR_PAGE_TABLE_NOT_PRESENT);
    655655
    656                 pRec->pDest = (RTGCPTR)((RTGCUINTPTR)pRec->pDest + delta);
     656                pRec->pDest = (RTGCPTR32)((RTGCUINTPTR32)pRec->pDest + delta);
    657657
    658658                if (rc == VERR_PAGE_NOT_PRESENT || rc == VERR_PAGE_TABLE_NOT_PRESENT)
    659659                {
    660                     RTGCPTR pPage = pPatch->patch.pPrivInstrGC & PAGE_BASE_GC_MASK;
     660                    RTGCPTR32 pPage = pPatch->patch.pPrivInstrGC & PAGE_BASE_GC_MASK;
    661661
    662662                    Log(("PATM: Patch page not present -> check later!\n"));
     
    677677                if (VBOX_SUCCESS(rc))
    678678                {
    679                     *(RTGCPTR *)&curInstr[pPatch->patch.cbPrivInstr - sizeof(RTGCPTR)] = pRec->pDest;
     679                    *(RTGCPTR32 *)&curInstr[pPatch->patch.cbPrivInstr - sizeof(RTGCPTR32)] = pRec->pDest;
    680680                    rc = PGMPhysWriteGCPtrDirty(pVM, pRec->pSource, curInstr, pPatch->patch.cbPrivInstr);
    681681                    AssertRC(rc);
     
    686686        case FIXUP_REL_JMPTOPATCH:
    687687        {
    688             RTGCPTR pTarget = (RTGCPTR)((RTGCINTPTR)pRec->pDest + delta);
     688            RTGCPTR32 pTarget = (RTGCPTR32)((RTGCINTPTR)pRec->pDest + delta);
    689689
    690690            if (    pPatch->patch.uState == PATCH_ENABLED
     
    693693                uint8_t    oldJump[SIZEOF_NEAR_COND_JUMP32];
    694694                uint8_t    temp[SIZEOF_NEAR_COND_JUMP32];
    695                 RTGCPTR    pJumpOffGC;
     695                RTGCPTR32    pJumpOffGC;
    696696                RTGCINTPTR displ   = (RTGCINTPTR)pTarget - (RTGCINTPTR)pRec->pSource;
    697697                RTGCINTPTR displOld= (RTGCINTPTR)pRec->pDest - (RTGCINTPTR)pRec->pSource;
     
    708708                    oldJump[0] = pPatch->patch.aPrivInstr[0];
    709709                    oldJump[1] = pPatch->patch.aPrivInstr[1];
    710                     *(RTGCUINTPTR *)&oldJump[2] = displOld;
     710                    *(RTGCUINTPTR32 *)&oldJump[2] = displOld;
    711711                }
    712712                else
     
    716716                    pJumpOffGC = pPatch->patch.pPrivInstrGC + 1;    //one byte opcode
    717717                    oldJump[0] = 0xE9;
    718                     *(RTGCUINTPTR *)&oldJump[1] = displOld;
     718                    *(RTGCUINTPTR32 *)&oldJump[1] = displOld;
    719719                }
    720720                else
     
    733733                if (rc == VERR_PAGE_NOT_PRESENT || rc == VERR_PAGE_TABLE_NOT_PRESENT)
    734734                {
    735                     RTGCPTR pPage = pPatch->patch.pPrivInstrGC & PAGE_BASE_GC_MASK;
     735                    RTGCPTR32 pPage = pPatch->patch.pPrivInstrGC & PAGE_BASE_GC_MASK;
    736736
    737737                    rc = PGMR3HandlerVirtualRegister(pVM, PGMVIRTHANDLERTYPE_ALL, pPage, pPage + (PAGE_SIZE - 1) /* inclusive! */, 0, patmVirtPageHandler, "PATMGCMonitorPage", 0, "PATMMonitorPatchJump");
     
    770770        case FIXUP_REL_JMPTOGUEST:
    771771        {
    772             RTGCPTR    pSource = (RTGCPTR)((RTGCINTPTR)pRec->pSource + delta);
     772            RTGCPTR32    pSource = (RTGCPTR32)((RTGCINTPTR)pRec->pSource + delta);
    773773            RTGCINTPTR displ   = (RTGCINTPTR)pRec->pDest - (RTGCINTPTR)pSource;
    774774
    775775            Assert(!(pPatch->patch.flags & PATMFL_GLOBAL_FUNCTIONS));
    776776            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;
    778778            pRec->pSource = pSource;
    779779            break;
     
    842842    PPATMPATCHREC pPatch = (PPATMPATCHREC)pNode;
    843843
    844     PATMR3EnablePatch((PVM)pVM, (RTGCPTR)pPatch->Core.Key);
     844    PATMR3EnablePatch((PVM)pVM, (RTGCPTR32)pPatch->Core.Key);
    845845    return 0;
    846846}
     
    862862    PPATMPATCHREC pPatch = (PPATMPATCHREC)pNode;
    863863
    864     PATMR3DisablePatch((PVM)pVM, (RTGCPTR)pPatch->Core.Key);
     864    PATMR3DisablePatch((PVM)pVM, (RTGCPTR32)pPatch->Core.Key);
    865865    return 0;
    866866}
     
    891891 * @param   pcb         Size of the patch memory block
    892892 */
    893 PATMR3DECL(RTGCPTR) PATMR3QueryPatchMemGC(PVM pVM, uint32_t *pcb)
     893PATMR3DECL(RTGCPTR32) PATMR3QueryPatchMemGC(PVM pVM, uint32_t *pcb)
    894894{
    895895    if (pcb)
     
    946946 * @param   pAddrGC     GC pointer
    947947 */
    948 PATMR3DECL(R3PTRTYPE(void *)) PATMR3GCPtrToHCPtr(PVM pVM, RTGCPTR pAddrGC)
     948PATMR3DECL(R3PTRTYPE(void *)) PATMR3GCPtrToHCPtr(PVM pVM, RTGCPTR32 pAddrGC)
    949949{
    950950    if (pVM->patm.s.pPatchMemGC <= pAddrGC && pVM->patm.s.pPatchMemGC + pVM->patm.s.cbPatchMem > pAddrGC)
     
    10571057                {
    10581058                    uint8_t *pPatchHC;
    1059                     RTGCPTR  pPatchGC;
    1060                     RTGCPTR  pOrgInstrGC;
     1059                    RTGCPTR32  pPatchGC;
     1060                    RTGCPTR32  pOrgInstrGC;
    10611061
    10621062                    pOrgInstrGC = PATMR3PatchToGCPtr(pVM, pInstrGC, 0);
     
    10901090        }
    10911091        /* 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)));
    10961096    }
    10971097    Assert(nrJumpRecs == pPatch->nrJumpRecs);
     
    11071107 *
    11081108 */
    1109 static void patmAddIllegalInstrRecord(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC)
     1109static void patmAddIllegalInstrRecord(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC)
    11101110{
    11111111    PAVLPVNODECORE pRec;
     
    11201120}
    11211121
    1122 static bool patmIsIllegalInstr(PPATCHINFO pPatch, RTGCPTR pInstrGC)
     1122static bool patmIsIllegalInstr(PPATCHINFO pPatch, RTGCPTR32 pInstrGC)
    11231123{
    11241124    PAVLPVNODECORE pRec;
     
    11421142 */
    11431143 /** @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)
     1144void patmr3AddP2GLookupRecord(PVM pVM, PPATCHINFO pPatch, uint8_t *pPatchInstrHC, RTGCPTR32 pInstrGC, PATM_LOOKUP_TYPE enmType, bool fDirty)
    11451145{
    11461146    bool ret;
     
    12011201 * @param   pPatchInstrGC   Guest context pointer to patch block
    12021202 */
    1203 void patmr3RemoveP2GLookupRecord(PVM pVM, PPATCHINFO pPatch, RTGCPTR pPatchInstrGC)
     1203void patmr3RemoveP2GLookupRecord(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pPatchInstrGC)
    12041204{
    12051205    PAVLU32NODECORE     pNode;
     
    16911691    case OP_STI:
    16921692    {
    1693         RTGCPTR pNextInstrGC = 0;   /* by default no inhibit irq */
     1693        RTGCPTR32 pNextInstrGC = 0;   /* by default no inhibit irq */
    16941694
    16951695        /** In a sequence of instructions that inhibit irqs, only the first one actually inhibits irqs. */
     
    18551855        if (pPatch->flags & PATMFL_SUPPORT_INDIRECT_CALLS && pCpu->param1.size == 4 /* no far calls! */)
    18561856        {
    1857             rc = patmPatchGenCall(pVM, pPatch, pCpu, pCurInstrGC, (RTGCPTR)0xDEADBEEF, true);
     1857            rc = patmPatchGenCall(pVM, pPatch, pCpu, pCurInstrGC, (RTGCPTR32)0xDEADBEEF, true);
    18581858            if (VBOX_SUCCESS(rc))
    18591859            {
     
    19311931    {
    19321932        int     rc2;
    1933         RTGCPTR pNextInstrGC = pCurInstrGC + pCpu->opsize;
     1933        RTGCPTR32 pNextInstrGC = pCurInstrGC + pCpu->opsize;
    19341934
    19351935        pPatch->flags &= ~PATMFL_INHIBIT_IRQS;
     
    19601960           )
    19611961        {
    1962             RTGCPTR pNextInstrGC = pCurInstrGC + pCpu->opsize;
     1962            RTGCPTR32 pNextInstrGC = pCurInstrGC + pCpu->opsize;
    19631963
    19641964            // The end marker for this kind of patch is any instruction at a location outside our patch jump
     
    19821982 *
    19831983 */
    1984 static void patmPatchAddDisasmJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC)
     1984static void patmPatchAddDisasmJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC)
    19851985{
    19861986    PAVLPVNODECORE pRec;
     
    20022002 *
    20032003 */
    2004 static bool patmIsKnownDisasmJump(PPATCHINFO pPatch, RTGCPTR pInstrGC)
     2004static bool patmIsKnownDisasmJump(PPATCHINFO pPatch, RTGCPTR32 pInstrGC)
    20052005{
    20062006    PAVLPVNODECORE pRec;
     
    20322032        DISCPUSTATE cpu;
    20332033        uint8_t    *pOrgJumpHC;
    2034         RTGCPTR     pOrgJumpGC;
     2034        RTGCPTR32     pOrgJumpGC;
    20352035        uint32_t    dummy;
    20362036
     
    21102110        if (PATMIsPatchGCAddr(pVM, pCurInstrGC))
    21112111        {
    2112             RTGCPTR pOrgInstrGC = patmPatchGCPtr2GuestGCPtr(pVM, pPatch, pCurInstrGC);
     2112            RTGCPTR32 pOrgInstrGC = patmPatchGCPtr2GuestGCPtr(pVM, pPatch, pCurInstrGC);
    21132113
    21142114            if (pOrgInstrGC != pPatch->pTempInfo->pLastDisasmInstrGC)
     
    21452145           )
    21462146        {
    2147             RTGCPTR pTargetGC = PATMResolveBranch(&cpu, pCurInstrGC);
    2148             RTGCPTR pOrgTargetGC;
     2147            RTGCPTR32 pTargetGC = PATMResolveBranch(&cpu, pCurInstrGC);
     2148            RTGCPTR32 pOrgTargetGC;
    21492149
    21502150            if (pTargetGC == 0)
     
    22312231 *
    22322232 */
    2233 PATMR3DECL(int) PATMR3DetectConflict(PVM pVM, RTGCPTR pInstrGC, RTGCPTR pConflictGC)
     2233PATMR3DECL(int) PATMR3DetectConflict(PVM pVM, RTGCPTR32 pInstrGC, RTGCPTR32 pConflictGC)
    22342234{
    22352235    PPATCHINFO pTargetPatch = PATMFindActivePatchByEntrypoint(pVM, pConflictGC, true /* include patch hints */);
     
    23032303                uint32_t    opsizenext;
    23042304                uint8_t *pNextInstrHC;
    2305                 RTGCPTR  pNextInstrGC = pCurInstrGC + opsize;
     2305                RTGCPTR32  pNextInstrGC = pCurInstrGC + opsize;
    23062306
    23072307                Log(("patmRecompileCodeStream: irqs inhibited by instruction %VGv\n", pNextInstrGC));
     
    25202520        }
    25212521        temp[0] = 0xE9;  //jmp
    2522         *(uint32_t *)&temp[1] = (RTGCUINTPTR)PATCHCODE_PTR_GC(pPatch) - ((RTGCUINTPTR)pPatch->pPrivInstrGC + SIZEOF_NEARJUMP32);    //return address
     2522        *(uint32_t *)&temp[1] = (RTGCUINTPTR32)PATCHCODE_PTR_GC(pPatch) - ((RTGCUINTPTR32)pPatch->pPrivInstrGC + SIZEOF_NEARJUMP32);    //return address
    25232523    }
    25242524    rc = PGMPhysWriteGCPtrDirty(pVM, pPatch->pPrivInstrGC, temp, pPatch->cbPatchJump);
     
    25932593 * @param   pPatch      Patch record
    25942594 */
    2595 static int patmGenCallToPatch(PVM pVM, PPATCHINFO pPatch, RTGCPTR pTargetGC, bool fAddFixup = true)
     2595static int patmGenCallToPatch(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pTargetGC, bool fAddFixup = true)
    25962596{
    25972597    uint8_t  temp[8];
     
    26402640 *
    26412641 */
    2642 PATMR3DECL(int) PATMR3PatchBlock(PVM pVM, RTGCPTR pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC,
     2642PATMR3DECL(int) PATMR3PatchBlock(PVM pVM, RTGCPTR32 pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC,
    26432643                                 uint32_t uOpcode, uint32_t uOpSize, PPATMPATCHREC pPatchRec)
    26442644{
     
    26472647    DISCPUSTATE cpu;
    26482648    uint32_t orgOffsetPatchMem = ~0;
    2649     RTGCPTR pInstrStart;
     2649    RTGCPTR32 pInstrStart;
    26502650#ifdef LOG_ENABLED
    26512651    uint32_t opsize;
     
    28672867 *
    28682868 */
    2869 static int patmIdtHandler(PVM pVM, RTGCPTR pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC,
     2869static int patmIdtHandler(PVM pVM, RTGCPTR32 pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC,
    28702870                          uint32_t uOpSize, PPATMPATCHREC pPatchRec)
    28712871{
     
    28742874    DISCPUSTATE cpuPush, cpuJmp;
    28752875    uint32_t opsize;
    2876     RTGCPTR  pCurInstrGC = pInstrGC;
     2876    RTGCPTR32  pCurInstrGC = pInstrGC;
    28772877    uint8_t *pCurInstrHC = pInstrHC;
    28782878    uint32_t orgOffsetPatchMem = ~0;
     
    28882888    if (disret && cpuPush.pCurInstr->opcode == OP_PUSH)
    28892889    {
    2890         RTGCPTR  pJmpInstrGC;
     2890        RTGCPTR32  pJmpInstrGC;
    28912891        int      rc;
    28922892
     
    29942994 *
    29952995 */
    2996 static int patmInstallTrapTrampoline(PVM pVM, RTGCPTR pInstrGC, PPATMPATCHREC pPatchRec)
     2996static int patmInstallTrapTrampoline(PVM pVM, RTGCPTR32 pInstrGC, PPATMPATCHREC pPatchRec)
    29972997{
    29982998    PPATCHINFO pPatch = &pPatchRec->patch;
     
    30823082 *
    30833083 */
    3084 static bool patmIsCommonIDTHandlerPatch(PVM pVM, RTGCPTR pInstrGC)
     3084static bool patmIsCommonIDTHandlerPatch(PVM pVM, RTGCPTR32 pInstrGC)
    30853085{
    30863086    PPATMPATCHREC pRec;
     
    31033103 *
    31043104 */
    3105 static int patmDuplicateFunction(PVM pVM, RTGCPTR pInstrGC, PPATMPATCHREC pPatchRec)
     3105static int patmDuplicateFunction(PVM pVM, RTGCPTR32 pInstrGC, PPATMPATCHREC pPatchRec)
    31063106{
    31073107    PPATCHINFO pPatch = &pPatchRec->patch;
     
    32333233 *
    32343234 */
    3235 static int patmCreateTrampoline(PVM pVM, RTGCPTR pInstrGC, PPATMPATCHREC pPatchRec)
     3235static int patmCreateTrampoline(PVM pVM, RTGCPTR32 pInstrGC, PPATMPATCHREC pPatchRec)
    32363236{
    32373237    PPATCHINFO  pPatch = &pPatchRec->patch;
    3238     RTGCPTR     pPage, pPatchTargetGC = 0;
     3238    RTGCPTR32     pPage, pPatchTargetGC = 0;
    32393239    uint32_t    orgOffsetPatchMem = ~0;
    32403240    int         rc = VERR_PATCHING_REFUSED;
     
    32483248    pPage = pInstrGC & PAGE_BASE_GC_MASK;
    32493249
    3250     PPATMPATCHPAGE pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(&pVM->patm.s.PatchLookupTreeHC->PatchTreeByPage, (RTGCPTR)pPage);
     3250    PPATMPATCHPAGE pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(&pVM->patm.s.PatchLookupTreeHC->PatchTreeByPage, (RTGCPTR32)pPage);
    32513251    if (pPatchPage)
    32523252    {
     
    33673367PATMR3DECL(int) PATMR3DuplicateFunctionRequest(PVM pVM, PCPUMCTX pCtx)
    33683368{
    3369     RTGCPTR     pBranchTarget, pPage;
     3369    RTGCPTR32     pBranchTarget, pPage;
    33703370    int         rc;
    3371     RTGCPTR     pPatchTargetGC = 0;
     3371    RTGCPTR32     pPatchTargetGC = 0;
    33723372
    33733373    pBranchTarget = pCtx->edx;
     
    33773377    pPage = pBranchTarget & PAGE_BASE_GC_MASK;
    33783378
    3379     PPATMPATCHPAGE pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(&pVM->patm.s.PatchLookupTreeHC->PatchTreeByPage, (RTGCPTR)pPage);
     3379    PPATMPATCHPAGE pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(&pVM->patm.s.PatchLookupTreeHC->PatchTreeByPage, (RTGCPTR32)pPage);
    33803380    if (pPatchPage)
    33813381    {
     
    34213421    {
    34223422        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 */
    34243424    }
    34253425    else
     
    34483448 *
    34493449 */
    3450 static int patmReplaceFunctionCall(PVM pVM, DISCPUSTATE *pCpu, RTGCPTR pInstrGC, PPATCHINFO pPatch)
     3450static int patmReplaceFunctionCall(PVM pVM, DISCPUSTATE *pCpu, RTGCPTR32 pInstrGC, PPATCHINFO pPatch)
    34513451{
    34523452    int           rc = VERR_PATCHING_REFUSED;
    34533453    DISCPUSTATE   cpu;
    3454     RTGCPTR       pTargetGC;
     3454    RTGCPTR32       pTargetGC;
    34553455    PPATMPATCHREC pPatchFunction;
    34563456    uint32_t      opsize;
     
    35603560 *
    35613561 */
    3562 static int patmPatchMMIOInstr(PVM pVM, RTGCPTR pInstrGC, DISCPUSTATE *pCpu, PPATCHINFO pPatch)
     3562static int patmPatchMMIOInstr(PVM pVM, RTGCPTR32 pInstrGC, DISCPUSTATE *pCpu, PPATCHINFO pPatch)
    35633563{
    35643564    uint8_t *pPB;
     
    35813581
    35823582    /* 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)
    35843584    {
    35853585        Log(("Relocation failed for cached mmio address!!\n"));
     
    35993599
    36003600    /* 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));
    36023602    AssertRC(rc);
    36033603    if (VBOX_FAILURE(rc))
     
    36353635 *
    36363636 */
    3637 static int patmPatchPATMMMIOInstr(PVM pVM, RTGCPTR pInstrGC, PPATCHINFO pPatch)
     3637static int patmPatchPATMMMIOInstr(PVM pVM, RTGCPTR32 pInstrGC, PPATCHINFO pPatch)
    36383638{
    36393639    DISCPUSTATE   cpu;
     
    36673667
    36683668    /* 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)
    36703670    {
    36713671        Log(("Relocation failed for cached mmio address!!\n"));
     
    36733673    }
    36743674    /* 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;
    36763676
    36773677    /* Lowest and highest address for write monitoring. */
     
    37483748 *
    37493749 */
    3750 PATMR3DECL(int) PATMR3PatchInstrInt3(PVM pVM, RTGCPTR pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, DISCPUSTATE *pCpu, PPATCHINFO pPatch)
     3750PATMR3DECL(int) PATMR3PatchInstrInt3(PVM pVM, RTGCPTR32 pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, DISCPUSTATE *pCpu, PPATCHINFO pPatch)
    37513751{
    37523752    uint8_t ASMInt3 = 0xCC;
     
    38033803 *
    38043804 */
    3805 int patmPatchJump(PVM pVM, RTGCPTR pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, DISCPUSTATE *pCpu, PPATMPATCHREC pPatchRec)
     3805int patmPatchJump(PVM pVM, RTGCPTR32 pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, DISCPUSTATE *pCpu, PPATMPATCHREC pPatchRec)
    38063806{
    38073807    PPATCHINFO pPatch = &pPatchRec->patch;
     
    38783878     * references the target instruction in the conflict patch.
    38793879     */
    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);
    38813881
    38823882    AssertMsg(pJmpDest, ("PATMR3GuestGCPtrToPatchGCPtr failed for %VGv\n", pInstrGC + pCpu->opsize + (int32_t)pCpu->param1.parval));
     
    39243924 * @param   flags       Patch flags
    39253925 */
    3926 PATMR3DECL(int) PATMR3AddHint(PVM pVM, RTGCPTR pInstrGC, uint32_t flags)
     3926PATMR3DECL(int) PATMR3AddHint(PVM pVM, RTGCPTR32 pInstrGC, uint32_t flags)
    39273927{
    39283928    Assert(pInstrGC);
     
    39433943 * @note    returns failure if patching is not allowed or possible
    39443944 */
    3945 PATMR3DECL(int) PATMR3InstallPatch(PVM pVM, RTGCPTR pInstrGC, uint64_t flags)
     3945PATMR3DECL(int) PATMR3InstallPatch(PVM pVM, RTGCPTR32 pInstrGC, uint64_t flags)
    39463946{
    39473947    DISCPUSTATE cpu;
     
    39863986    if (CPUMGetGuestCPL(pVM, CPUMCTX2CORE(pCtx)) == 0)
    39873987    {
    3988         RTGCPTR pInstrGCFlat = SELMToFlat(pVM, pCtx->eflags, pCtx->cs, &pCtx->csHid, pInstrGC);
     3988        RTGCPTR32 pInstrGCFlat = SELMToFlat(pVM, pCtx->eflags, pCtx->cs, &pCtx->csHid, pInstrGC);
    39893989        if (pInstrGCFlat != pInstrGC)
    39903990        {
     
    40054005        && (flags & PATMFL_MMIO_ACCESS))
    40064006    {
    4007         RTGCUINTPTR offset;
    4008         void       *pvPatchCoreOffset;
     4007        RTGCUINTPTR32 offset;
     4008        void         *pvPatchCoreOffset;
    40094009
    40104010        /* Find the patch record. */
     
    43894389 * @param   pInstrGC    Instruction address
    43904390 */
    4391 static uint32_t patmGetInstrSize(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC)
     4391static uint32_t patmGetInstrSize(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC)
    43924392{
    43934393    uint8_t *pInstrHC;
     
    44164416 * @param   pPatch      Patch record
    44174417 */
    4418 int patmAddPatchToPage(PVM pVM, RTGCUINTPTR pPage, PPATCHINFO pPatch)
     4418int patmAddPatchToPage(PVM pVM, RTGCUINTPTR32 pPage, PPATCHINFO pPatch)
    44194419{
    44204420    PPATMPATCHPAGE pPatchPage;
     
    44814481        LogFlow(("patmAddPatchToPage: lowest patch page address %VGv current lowest %VGv\n", pGuestToPatchRec->Core.Key, pPatchPage->pLowestAddrGC));
    44824482        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;
    44884488
    44894489            offset = pPatchPage->pLowestAddrGC & PAGE_OFFSET_MASK;
     
    44964496                if (pGuestToPatchRec)
    44974497                {
    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)
    45004500                    {
    45014501                        pPatchPage->pLowestAddrGC = pPage;
     
    45144514        LogFlow(("patmAddPatchToPage: highest patch page address %VGv current lowest %VGv\n", pGuestToPatchRec->Core.Key, pPatchPage->pHighestAddrGC));
    45154515        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;
    45194519            /* Increase by instruction size. */
    45204520            uint32_t size = patmGetInstrSize(pVM, pPatch, pPatchPage->pHighestAddrGC);
     
    45364536 * @param   pPatch      Patch record
    45374537 */
    4538 int patmRemovePatchFromPage(PVM pVM, RTGCUINTPTR pPage, PPATCHINFO pPatch)
     4538int patmRemovePatchFromPage(PVM pVM, RTGCUINTPTR32 pPage, PPATCHINFO pPatch)
    45394539{
    45404540    PPATMPATCHPAGE pPatchPage;
     
    46014601int patmInsertPatchPages(PVM pVM, PPATCHINFO pPatch)
    46024602{
    4603     int         rc;
    4604     RTGCUINTPTR pPatchPageStart, pPatchPageEnd, pPage;
     4603    int           rc;
     4604    RTGCUINTPTR32 pPatchPageStart, pPatchPageEnd, pPage;
    46054605
    46064606    /* 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;
    46094609
    46104610    /** @todo optimize better (large gaps between current and next used page) */
     
    46364636{
    46374637    int         rc;
    4638     RTGCUINTPTR pPatchPageStart, pPatchPageEnd, pPage;
     4638    RTGCUINTPTR32 pPatchPageStart, pPatchPageEnd, pPage;
    46394639
    46404640    /* 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;
    46434643
    46444644    for(pPage = pPatchPageStart; pPage <= pPatchPageEnd; pPage += PAGE_SIZE)
     
    46684668 *
    46694669 */
    4670 PATMR3DECL(int) PATMR3PatchWrite(PVM pVM, RTGCPTR GCPtr, uint32_t cbWrite)
    4671 {
    4672     RTGCUINTPTR          pWritePageStart, pWritePageEnd, pPage;
     4670PATMR3DECL(int) PATMR3PatchWrite(PVM pVM, RTGCPTR32 GCPtr, uint32_t cbWrite)
     4671{
     4672    RTGCUINTPTR32          pWritePageStart, pWritePageEnd, pPage;
    46734673
    46744674    Log(("PATMR3PatchWrite %VGv %x\n", GCPtr, cbWrite));
     
    46844684    STAM_PROFILE_ADV_START(&pVM->patm.s.StatPatchWrite, a);
    46854685
    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;
    46884688
    46894689    for (pPage = pWritePageStart; pPage <= pWritePageEnd; pPage += PAGE_SIZE)
    46904690    {
    46914691loop_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);
    46934693        if (pPatchPage)
    46944694        {
     
    46974697
    46984698            /* 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)
    47004700                ||  pPatchPage->pHighestAddrGC < GCPtr)
    47014701            {
     
    47084708                {
    47094709                    PPATCHINFO pPatch = pPatchPage->aPatch[i];
    4710                     RTGCPTR pPatchInstrGC;
     4710                    RTGCPTR32 pPatchInstrGC;
    47114711                    //unused: bool    fForceBreak = false;
    47124712
     
    47154715                    for (uint32_t j=0; j<cbWrite; j++)
    47164716                    {
    4717                         RTGCPTR pGuestPtrGC = (RTGCPTR)((RTGCUINTPTR)GCPtr + j);
     4717                        RTGCPTR32 pGuestPtrGC = (RTGCPTR32)((RTGCUINTPTR32)GCPtr + j);
    47184718
    47194719                        if (    pPatch->cbPatchJump
     
    47344734                        if (!pPatchInstrGC)
    47354735                        {
    4736                             RTGCPTR  pClosestInstrGC;
     4736                            RTGCPTR32  pClosestInstrGC;
    47374737                            uint32_t size;
    47384738
     
    47954795                 */
    47964796invalid_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);
    47984798
    47994799                if (pPatchPage)
     
    48414841/** @note Currently only called by CSAMR3FlushPage; optimization to avoid having to double check if the physical address has changed
    48424842 */
    4843 PATMR3DECL(int) PATMR3FlushPage(PVM pVM, RTGCPTR addr)
     4843PATMR3DECL(int) PATMR3FlushPage(PVM pVM, RTGCPTR32 addr)
    48444844{
    48454845    addr &= PAGE_BASE_GC_MASK;
     
    48734873 * @param   pInstrGC    Guest context pointer to instruction
    48744874 */
    4875 PATMR3DECL(bool) PATMR3HasBeenPatched(PVM pVM, RTGCPTR pInstrGC)
     4875PATMR3DECL(bool) PATMR3HasBeenPatched(PVM pVM, RTGCPTR32 pInstrGC)
    48764876{
    48774877    PPATMPATCHREC pPatchRec;
     
    48914891 *
    48924892 */
    4893 PATMR3DECL(int) PATMR3QueryOpcode(PVM pVM, RTGCPTR pInstrGC, uint8_t *pByte)
     4893PATMR3DECL(int) PATMR3QueryOpcode(PVM pVM, RTGCPTR32 pInstrGC, uint8_t *pByte)
    48944894{
    48954895    PPATMPATCHREC pPatchRec;
     
    49124912        &&  pInstrGC < pPatchRec->patch.pPrivInstrGC + pPatchRec->patch.cbPatchJump)
    49134913    {
    4914         RTGCPTR offset = pInstrGC - pPatchRec->patch.pPrivInstrGC;
     4914        RTGCPTR32 offset = pInstrGC - pPatchRec->patch.pPrivInstrGC;
    49154915        *pByte = pPatchRec->patch.aPrivInstr[offset];
    49164916
     
    49354935 *
    49364936 */
    4937 PATMR3DECL(int) PATMR3DisablePatch(PVM pVM, RTGCPTR pInstrGC)
     4937PATMR3DECL(int) PATMR3DisablePatch(PVM pVM, RTGCPTR32 pInstrGC)
    49384938{
    49394939    PPATMPATCHREC pPatchRec;
     
    50005000                    if (rc == VINF_SUCCESS)
    50015001                    {
    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);
    50035003
    50045004                        if (    temp[0] != 0xE9 /* jmp opcode */
     
    50905090 *
    50915091 */
    5092 static int patmDisableUnusablePatch(PVM pVM, RTGCPTR pInstrGC, RTGCPTR pConflictAddr, PPATCHINFO pConflictPatch)
     5092static int patmDisableUnusablePatch(PVM pVM, RTGCPTR32 pInstrGC, RTGCPTR32 pConflictAddr, PPATCHINFO pConflictPatch)
    50935093{
    50945094#ifdef PATM_RESOLVE_CONFLICTS_WITH_JUMP_PATCHES
     
    51885188 *
    51895189 */
    5190 PATMR3DECL(int) PATMR3EnablePatch(PVM pVM, RTGCPTR pInstrGC)
     5190PATMR3DECL(int) PATMR3EnablePatch(PVM pVM, RTGCPTR32 pInstrGC)
    51915191{
    51925192    PPATMPATCHREC pPatchRec;
     
    53805380    PPATCHINFO  pPatch;
    53815381    int         rc;
    5382     RTGCPTR     pInstrGC = pPatchRec->patch.pPrivInstrGC;
     5382    RTGCPTR32     pInstrGC = pPatchRec->patch.pPrivInstrGC;
    53835383
    53845384    Log(("patmR3RefreshPatch: attempt to refresh patch at %VGv\n", pInstrGC));
     
    54285428    if (VBOX_SUCCESS(rc))
    54295429    {
    5430         RTGCPTR         pPatchTargetGC;
     5430        RTGCPTR32         pPatchTargetGC;
    54315431        PPATMPATCHREC   pNewPatchRec;
    54325432
     
    54925492 *
    54935493 */
    5494 PPATCHINFO PATMFindActivePatchByEntrypoint(PVM pVM, RTGCPTR pInstrGC, bool fIncludeHints)
     5494PPATCHINFO PATMFindActivePatchByEntrypoint(PVM pVM, RTGCPTR32 pInstrGC, bool fIncludeHints)
    54955495{
    54965496    PPATMPATCHREC pPatchRec = (PPATMPATCHREC)RTAvloGCPtrGetBestFit(&pVM->patm.s.PatchLookupTreeHC->PatchTree, pInstrGC, false);
     
    55285528 * @param   pPatchAddr  Guest context patch address (if true)
    55295529 */
    5530 PATMR3DECL(bool) PATMR3IsInsidePatchJump(PVM pVM, RTGCPTR pAddr, PRTGCPTR pPatchAddr)
    5531 {
    5532     RTGCPTR addr;
     5530PATMR3DECL(bool) PATMR3IsInsidePatchJump(PVM pVM, RTGCPTR32 pAddr, PRTGCPTR32 pPatchAddr)
     5531{
     5532    RTGCPTR32 addr;
    55335533    PPATCHINFO pPatch;
    55345534
     
    55595559 *
    55605560 */
    5561 PATMR3DECL(int) PATMR3RemovePatch(PVM pVM, RTGCPTR pInstrGC)
     5561PATMR3DECL(int) PATMR3RemovePatch(PVM pVM, RTGCPTR32 pInstrGC)
    55625562{
    55635563    PPATMPATCHREC pPatchRec;
     
    56255625 * @param   pPatchGC    GC address in patch block
    56265626 */
    5627 RTGCPTR patmPatchGCPtr2GuestGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pPatchGC)
     5627RTGCPTR32 patmPatchGCPtr2GuestGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pPatchGC)
    56285628{
    56295629    Assert(pPatch->Patch2GuestAddrTree);
     
    56445644 *
    56455645 */
    5646 RTGCPTR patmGuestGCPtrToPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC)
     5646RTGCPTR32 patmGuestGCPtrToPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC)
    56475647{
    56485648    if (pPatch->Guest2PatchAddrTree)
     
    56645664 *
    56655665 */
    5666 RTGCPTR patmGuestGCPtrToClosestPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC)
     5666RTGCPTR32 patmGuestGCPtrToClosestPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC)
    56675667{
    56685668        PRECGUESTTOPATCH pGuestToPatchRec = (PRECGUESTTOPATCH)RTAvlGCPtrGetBestFit(&pPatch->Guest2PatchAddrTree, pInstrGC, false);
     
    56805680 *
    56815681 */
    5682 PATMR3DECL(RTGCPTR) PATMR3GuestGCPtrToPatchGCPtr(PVM pVM, RCPTRTYPE(uint8_t*) pInstrGC)
     5682PATMR3DECL(RTGCPTR32) PATMR3GuestGCPtrToPatchGCPtr(PVM pVM, RCPTRTYPE(uint8_t*) pInstrGC)
    56835683{
    56845684    PPATMPATCHREC pPatchRec = (PPATMPATCHREC)RTAvloGCPtrGetBestFit(&pVM->patm.s.PatchLookupTreeHC->PatchTree, pInstrGC, false);
     
    56995699 *
    57005700 */
    5701 PATMR3DECL(RTGCPTR) PATMR3PatchToGCPtr(PVM pVM, RTGCPTR pPatchGC, PATMTRANSSTATE *pEnmState)
     5701PATMR3DECL(RTGCPTR32) PATMR3PatchToGCPtr(PVM pVM, RTGCPTR32 pPatchGC, PATMTRANSSTATE *pEnmState)
    57025702{
    57035703    PPATMPATCHREC pPatchRec;
    57045704    void         *pvPatchCoreOffset;
    5705     RTGCPTR       pPrivInstrGC;
     5705    RTGCPTR32       pPrivInstrGC;
    57065706
    57075707    Assert(PATMIsPatchGCAddr(pVM, pPatchGC));
     
    57655765 * @param   pAddrGC     Guest context address
    57665766 */
    5767 PATMR3DECL(RTGCPTR) PATMR3QueryPatchGCPtr(PVM pVM, RTGCPTR pAddrGC)
     5767PATMR3DECL(RTGCPTR32) PATMR3QueryPatchGCPtr(PVM pVM, RTGCPTR32 pAddrGC)
    57685768{
    57695769    PPATMPATCHREC pPatchRec;
     
    57885788 * @param   pEip        GC pointer of trapping instruction
    57895789 */
    5790 static int patmR3HandleDirtyInstr(PVM pVM, PCPUMCTX pCtx, PPATMPATCHREC pPatch, PRECPATCHTOGUEST pPatchToGuestRec, RTGCPTR pEip)
     5790static int patmR3HandleDirtyInstr(PVM pVM, PCPUMCTX pCtx, PPATMPATCHREC pPatch, PRECPATCHTOGUEST pPatchToGuestRec, RTGCPTR32 pEip)
    57915791{
    57925792    DISCPUSTATE  CpuOld, CpuNew;
    57935793    uint8_t     *pPatchInstrHC, *pCurPatchInstrHC;
    57945794    int          rc;
    5795     RTGCPTR      pCurInstrGC, pCurPatchInstrGC;
     5795    RTGCPTR32      pCurInstrGC, pCurPatchInstrGC;
    57965796    uint32_t     cbDirty;
    57975797    PRECPATCHTOGUEST pRec;
     
    58675867               )
    58685868            {
    5869                 RTGCPTR pTargetGC = PATMResolveBranch(&CpuNew, pCurInstrGC);
     5869                RTGCPTR32 pTargetGC = PATMResolveBranch(&CpuNew, pCurInstrGC);
    58705870
    58715871                if (    pTargetGC >= pPatchToGuestRec->pOrgInstrGC
     
    59565956 * @param   ppNewEip    GC pointer to new instruction
    59575957 */
    5958 PATMR3DECL(int) PATMR3HandleTrap(PVM pVM, PCPUMCTX pCtx, RTGCPTR pEip, RTGCPTR *ppNewEip)
     5958PATMR3DECL(int) PATMR3HandleTrap(PVM pVM, PCPUMCTX pCtx, RTGCPTR32 pEip, RTGCPTR *ppNewEip)
    59595959{
    59605960    PPATMPATCHREC    pPatch = 0;
    59615961    void            *pvPatchCoreOffset;
    5962     RTGCUINTPTR      offset;
    5963     RTGCPTR          pNewEip;
     5962    RTGCUINTPTR32      offset;
     5963    RTGCPTR32          pNewEip;
    59645964    int              rc ;
    59655965    PRECPATCHTOGUEST pPatchToGuestRec = 0;
     
    60006000        if (pPatch->patch.uState == PATCH_DISABLE_PENDING)
    60016001        {
    6002             RTGCPTR pPrivInstrGC = pPatch->patch.pPrivInstrGC;
     6002            RTGCPTR32 pPrivInstrGC = pPatch->patch.pPrivInstrGC;
    60036003
    60046004            Log(("PATMR3HandleTrap: disable operation is pending for patch at %VGv\n", pPatch->patch.pPrivInstrGC));
     
    61346134        if (disret && cpu.pCurInstr->opcode == OP_RETN)
    61356135        {
    6136             RTGCPTR retaddr;
     6136            RTGCPTR32 retaddr;
    61376137            PCPUMCTX pCtx;
    61386138            int      rc;
     
    61456145
    61466146            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));
    61486148        }
    61496149    }
     
    62176217PATMR3DECL(int) PATMR3HandleMonitoredPage(PVM pVM)
    62186218{
    6219     RTGCPTR addr = pVM->patm.s.pvFaultMonitor;
     6219    RTGCPTR32 addr = pVM->patm.s.pvFaultMonitor;
    62206220
    62216221    addr &= PAGE_BASE_GC_MASK;
     
    63596359 * @param   pPatch      Patch structure
    63606360 */
    6361 RTGCPTR patmPatchQueryStatAddress(PVM pVM, PPATCHINFO pPatch)
     6361RTGCPTR32 patmPatchQueryStatAddress(PVM pVM, PPATCHINFO pPatch)
    63626362{
    63636363    Assert(pPatch->uPatchIdx != PATM_STAT_INDEX_NONE);
  • trunk/src/VBox/VMM/PATM/PATMA.h

    r8155 r9220  
    133133    struct
    134134    {
    135         RTGCPTR      pInstrGC;
    136         RTGCUINTPTR  pRelPatchGC; /* relative to patch base */
     135        RTGCPTR32      pInstrGC;
     136        RTGCUINTPTR32  pRelPatchGC; /* relative to patch base */
    137137    } Slot[1];
    138138} PATCHJUMPTABLE, *PPATCHJUMPTABLE;
  • trunk/src/VBox/VMM/PATM/PATMGuest.cpp

    r8155 r9220  
    9797 *
    9898 */
    99 int PATMPatchSysenterXP(PVM pVM, RTGCPTR pInstrGC, PPATMPATCHREC pPatchRec)
     99int PATMPatchSysenterXP(PVM pVM, RTGCPTR32 pInstrGC, PPATMPATCHREC pPatchRec)
    100100{
    101101    PPATCHINFO pPatch = &pPatchRec->patch;
    102102    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.) */
    104104    int       rc, i;
    105105
     
    151151    /* Now we simply jump from the fast version to the 'old and slow' system call */
    152152    uTemp[0] = 0xE9;
    153     *(RTGCPTR *)&uTemp[1] = lpfnKiIntSystemCall - (pInstrGC + SIZEOF_NEARJUMP32);
     153    *(RTGCPTR32 *)&uTemp[1] = lpfnKiIntSystemCall - (pInstrGC + SIZEOF_NEARJUMP32);
    154154    rc = PGMPhysWriteGCPtrDirty(pVM, pInstrGC, uTemp, SIZEOF_NEARJUMP32);
    155155    if (VBOX_FAILURE(rc))
     
    180180 *
    181181 */
    182 int PATMPatchOpenBSDHandlerPrefix(PVM pVM, PDISCPUSTATE pCpu, RTGCPTR pInstrGC, uint8_t *pInstrHC, PPATMPATCHREC pPatchRec)
     182int PATMPatchOpenBSDHandlerPrefix(PVM pVM, PDISCPUSTATE pCpu, RTGCPTR32 pInstrGC, uint8_t *pInstrHC, PPATMPATCHREC pPatchRec)
    183183{
    184184    uint8_t   uTemp[16];
     
    213213 *
    214214 */
    215 int PATMInstallGuestSpecificPatch(PVM pVM, PDISCPUSTATE pCpu, RTGCPTR pInstrGC, uint8_t *pInstrHC, PPATMPATCHREC pPatchRec)
     215int PATMInstallGuestSpecificPatch(PVM pVM, PDISCPUSTATE pCpu, RTGCPTR32 pInstrGC, uint8_t *pInstrHC, PPATMPATCHREC pPatchRec)
    216216{
    217217    int rc;
  • trunk/src/VBox/VMM/PATM/PATMInternal.h

    r9216 r9220  
    236236    RTGCPTR32       pPatchJumpDestGC;
    237237
    238     RTGCUINTPTR     pPatchBlockOffset;
     238    RTGCUINTPTR32   pPatchBlockOffset;
    239239    uint32_t        cbPatchBlockSize;
    240240    uint32_t        uCurPatchOffset;
     
    293293} PATCHINFO, *PPATCHINFO;
    294294
    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)
    296296#define PATCHCODE_PTR_HC(pPatch)    (uint8_t *)(pVM->patm.s.pPatchMemHC + (pPatch)->pPatchBlockOffset)
    297297
     
    529529
    530530#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);
     531RTGCPTR32 patmPatchGCPtr2GuestGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pPatchGC);
     532RTGCPTR32 patmGuestGCPtrToPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC);
     533RTGCPTR32 patmGuestGCPtrToClosestPatchGCPtr(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t*) pInstrGC);
    534534#endif
    535535
     
    544544 *
    545545 */
    546 void patmr3AddP2GLookupRecord(PVM pVM, PPATCHINFO pPatch, uint8_t *pPatchInstrHC, RTGCPTR pInstrGC, PATM_LOOKUP_TYPE enmType, bool fDirty=false);
     546void patmr3AddP2GLookupRecord(PVM pVM, PPATCHINFO pPatch, uint8_t *pPatchInstrHC, RTGCPTR32 pInstrGC, PATM_LOOKUP_TYPE enmType, bool fDirty=false);
    547547
    548548/**
     
    571571 * @param   pPatch      Patch structure
    572572 */
    573 RTGCPTR patmPatchQueryStatAddress(PVM pVM, PPATCHINFO pPatch);
     573RTGCPTR32 patmPatchQueryStatAddress(PVM pVM, PPATCHINFO pPatch);
    574574
    575575/**
     
    607607 *
    608608 */
    609 int PATMInstallGuestSpecificPatch(PVM pVM, PDISCPUSTATE pCpu, RTGCPTR pInstrGC, uint8_t *pInstrHC, PPATMPATCHREC pPatchRec);
     609int PATMInstallGuestSpecificPatch(PVM pVM, PDISCPUSTATE pCpu, RTGCPTR32 pInstrGC, uint8_t *pInstrHC, PPATMPATCHREC pPatchRec);
    610610
    611611/**
     
    631631 *
    632632 */
    633 PATMDECL(PPATMPATCHREC) PATMQueryFunctionPatch(PVM pVM, RTGCPTR pInstrGC);
     633PATMDECL(PPATMPATCHREC) PATMQueryFunctionPatch(PVM pVM, RTGCPTR32 pInstrGC);
    634634
    635635
     
    690690    PPATCHINFO    pPatchInfo;
    691691    R3PTRTYPE(uint8_t *) pInstrHC;
    692     RTGCPTR       pInstrGC;
     692    RTGCPTR32       pInstrGC;
    693693    uint32_t      fReadFlags;
    694694} PATMDISASM, *PPATMDISASM;
    695695
    696 inline bool PATMR3DISInstr(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR InstrGC,
     696inline bool PATMR3DISInstr(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 InstrGC,
    697697                           uint8_t *InstrHC, uint32_t *pOpsize, char *pszOutput,
    698698                           uint32_t fReadFlags = PATMREAD_ORGCODE)
     
    734734 *
    735735 */
    736 PPATCHINFO PATMFindActivePatchByEntrypoint(PVM pVM, RTGCPTR pInstrGC, bool fIncludeHints=false);
     736PPATCHINFO PATMFindActivePatchByEntrypoint(PVM pVM, RTGCPTR32 pInstrGC, bool fIncludeHints=false);
    737737
    738738/**
     
    750750 *
    751751 */
    752 PATMR3DECL(int) PATMR3PatchBlock(PVM pVM, RTGCPTR pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC,
     752PATMR3DECL(int) PATMR3PatchBlock(PVM pVM, RTGCPTR32 pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC,
    753753                                 uint32_t uOpcode, uint32_t uOpSize, PPATMPATCHREC pPatchRec);
    754754
     
    767767 *
    768768 */
    769 PATMR3DECL(int) PATMR3PatchInstrInt3(PVM pVM, RTGCPTR pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, DISCPUSTATE *pCpu, PPATCHINFO pPatch);
     769PATMR3DECL(int) PATMR3PatchInstrInt3(PVM pVM, RTGCPTR32 pInstrGC, R3PTRTYPE(uint8_t *) pInstrHC, DISCPUSTATE *pCpu, PPATCHINFO pPatch);
    770770
    771771/**
     
    788788 * @param   pBranchInstrGC  GC pointer of branch instruction
    789789 */
    790 inline RTGCPTR PATMResolveBranch(PDISCPUSTATE pCpu, RTGCPTR pBranchInstrGC)
     790inline RTGCPTR32 PATMResolveBranch(PDISCPUSTATE pCpu, RTGCPTR32 pBranchInstrGC)
    791791{
    792792    uint32_t disp;
     
    811811    }
    812812#ifdef IN_GC
    813     return (RTGCPTR)((uint8_t *)pBranchInstrGC + pCpu->opsize + disp);
     813    return (RTGCPTR32)((uint8_t *)pBranchInstrGC + pCpu->opsize + disp);
    814814#else
    815815    return pBranchInstrGC + pCpu->opsize + disp;
  • trunk/src/VBox/VMM/PATM/PATMPatch.cpp

    r9212 r9220  
    5959typedef struct
    6060{
    61     RTGCPTR     pTargetGC;
    62     RTGCPTR     pCurInstrGC;
    63     RTGCPTR     pNextInstrGC;
    64     RTGCPTR     pReturnGC;
     61    RTGCPTR32   pTargetGC;
     62    RTGCPTR32   pCurInstrGC;
     63    RTGCPTR32   pNextInstrGC;
     64    RTGCPTR32   pReturnGC;
    6565} PATMCALLINFO, *PPATMCALLINFO;
    6666
    67 int patmPatchAddReloc32(PVM pVM, PPATCHINFO pPatch, uint8_t *pRelocHC, uint32_t uType, RTGCPTR pSource, RTGCPTR pDest)
     67int patmPatchAddReloc32(PVM pVM, PPATCHINFO pPatch, uint8_t *pRelocHC, uint32_t uType, RTGCPTR32 pSource, RTGCPTR32 pDest)
    6868{
    6969    PRELOCREC pRec;
     
    8888}
    8989
    90 int patmPatchAddJump(PVM pVM, PPATCHINFO pPatch, uint8_t *pJumpHC, uint32_t offset, RTGCPTR pTargetGC, uint32_t opcode)
     90int patmPatchAddJump(PVM pVM, PPATCHINFO pPatch, uint8_t *pJumpHC, uint32_t offset, RTGCPTR32 pTargetGC, uint32_t opcode)
    9191{
    9292    PJUMPREC pRec;
     
    168168                case PATM_FIXUP:
    169169                    /* 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);
    171171                    break;
    172172#ifdef VBOX_WITH_STATISTICS
     
    306306                case PATM_LOOKUP_AND_CALL_FUNCTION:
    307307                {
    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);
    309309                    Assert(pVM->patm.s.pfnHelperCallGC);
    310                     Assert(sizeof(uint32_t) == sizeof(RTGCPTR));
     310                    Assert(sizeof(uint32_t) == sizeof(RTGCPTR32));
    311311
    312312                    /* Relative value is target minus address of instruction after the actual call instruction. */
     
    317317                case PATM_RETURN_FUNCTION:
    318318                {
    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);
    320320                    Assert(pVM->patm.s.pfnHelperRetGC);
    321                     Assert(sizeof(uint32_t) == sizeof(RTGCPTR));
     321                    Assert(sizeof(uint32_t) == sizeof(RTGCPTR32));
    322322
    323323                    /* Relative value is target minus address of instruction after the actual call instruction. */
     
    328328                case PATM_IRET_FUNCTION:
    329329                {
    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);
    331331                    Assert(pVM->patm.s.pfnHelperIretGC);
    332                     Assert(sizeof(uint32_t) == sizeof(RTGCPTR));
     332                    Assert(sizeof(uint32_t) == sizeof(RTGCPTR32));
    333333
    334334                    /* Relative value is target minus address of instruction after the actual call instruction. */
     
    339339                case PATM_LOOKUP_AND_JUMP_FUNCTION:
    340340                {
    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);
    342342                    Assert(pVM->patm.s.pfnHelperJumpGC);
    343                     Assert(sizeof(uint32_t) == sizeof(RTGCPTR));
     343                    Assert(sizeof(uint32_t) == sizeof(RTGCPTR32));
    344344
    345345                    /* Relative value is target minus address of instruction after the actual call instruction. */
     
    354354                }
    355355
    356                 *(RTGCPTR *)&pPB[j] = dest;
     356                *(RTGCPTR32 *)&pPB[j] = dest;
    357357                if (pAsmRecord->uReloc[i] < PATM_NO_FIXUP)
    358358                {
     
    393393
    394394/* Read bytes and check for overwritten instructions. */
    395 static int patmPatchReadBytes(PVM pVM, uint8_t *pDest, RTGCPTR pSrc, uint32_t cb)
     395static int patmPatchReadBytes(PVM pVM, uint8_t *pDest, RTGCPTR32 pSrc, uint32_t cb)
    396396{
    397397    int rc = PGMPhysReadGCPtr(pVM, pDest, pSrc, cb);
     
    426426}
    427427
    428 int patmPatchGenIret(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, bool fSizeOverride)
     428int patmPatchGenIret(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC, bool fSizeOverride)
    429429{
    430430    uint32_t size;
     
    457457 * Generate an STI patch
    458458 */
    459 int patmPatchGenSti(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, RTGCPTR pNextInstrGC)
     459int patmPatchGenSti(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC, RTGCPTR32 pNextInstrGC)
    460460{
    461461    PATMCALLINFO callInfo;
     
    564564    }
    565565
    566     *(RTGCPTR *)&pPB[pPatchAsmRec->offRelJump] = 0xDEADBEEF;
     566    *(RTGCPTR32 *)&pPB[pPatchAsmRec->offRelJump] = 0xDEADBEEF;
    567567
    568568    patmPatchAddJump(pVM, pPatch, &pPB[pPatchAsmRec->offRelJump - 1], 1, pTargetGC, opcode);
     
    657657    else offset++;
    658658
    659     *(RTGCPTR *)&pPB[offset] = 0xDEADBEEF;
     659    *(RTGCPTR32 *)&pPB[offset] = 0xDEADBEEF;
    660660
    661661    patmPatchAddJump(pVM, pPatch, pPB, offset, pTargetGC, opcode);
    662662
    663     offset += sizeof(RTGCPTR);
     663    offset += sizeof(RTGCPTR32);
    664664
    665665    PATCHGEN_EPILOG(pPatch, offset);
     
    670670 * Rewrite call to dynamic or currently unknown function (on-demand patching of function)
    671671 */
    672 int patmPatchGenCall(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC, RTGCPTR pTargetGC, bool fIndirect)
     672int patmPatchGenCall(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC, RTGCPTR32 pTargetGC, bool fIndirect)
    673673{
    674674    PATMCALLINFO        callInfo;
     
    710710            i++;    //skip segment prefix
    711711
    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);
    713713        AssertRCReturn(rc, rc);
    714714        offset += (pCpu->opsize - i);
     
    730730        offset = 0;
    731731        pPB[offset++] = 0x68;              // push %Iv
    732         *(RTGCPTR *)&pPB[offset] = pTargetGC;
    733         offset += sizeof(RTGCPTR);
     732        *(RTGCPTR32 *)&pPB[offset] = pTargetGC;
     733        offset += sizeof(RTGCPTR32);
    734734    }
    735735
     
    771771 * @param   pCurInstrGC Current instruction address
    772772 */
    773 int patmPatchGenJump(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC)
     773int patmPatchGenJump(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC)
    774774{
    775775    PATMCALLINFO        callInfo;
     
    807807        i++;    //skip segment prefix
    808808
    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);
    810810    AssertRCReturn(rc, rc);
    811811    offset += (pCpu->opsize - i);
     
    846846{
    847847    int size = 0, rc;
    848     RTGCPTR pPatchRetInstrGC;
     848    RTGCPTR32 pPatchRetInstrGC;
    849849
    850850    /* Remember start of this patch for below. */
     
    970970 *
    971971 */
    972 int patmPatchGenCheckIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC)
     972int patmPatchGenCheckIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC)
    973973{
    974974    uint32_t size;
     
    995995 *
    996996 */
    997 int patmPatchGenSetPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC)
     997int patmPatchGenSetPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC)
    998998{
    999999    PATCHGEN_PROLOG(pVM, pPatch);
     
    10161016 *
    10171017 */
    1018 int patmPatchGenClearPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC)
     1018int patmPatchGenClearPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC)
    10191019{
    10201020    PATCHGEN_PROLOG(pVM, pPatch);
     
    10371037 * @param   pNextInstrGC    Next guest instruction
    10381038 */
    1039 int patmPatchGenClearInhibitIRQ(PVM pVM, PPATCHINFO pPatch, RTGCPTR pNextInstrGC)
     1039int patmPatchGenClearInhibitIRQ(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pNextInstrGC)
    10401040{
    10411041    int          size;
     
    10701070 ** @todo must check if virtual IF is already cleared on entry!!!!!!!!!!!!!!!!!!!!!!!
    10711071 */
    1072 int patmPatchGenIntEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR pIntHandlerGC)
     1072int patmPatchGenIntEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pIntHandlerGC)
    10731073{
    10741074    uint32_t size;
     
    11021102 * @param   pTrapHandlerGC  IDT handler address
    11031103 */
    1104 int patmPatchGenTrapEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR pTrapHandlerGC)
     1104int patmPatchGenTrapEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pTrapHandlerGC)
    11051105{
    11061106    uint32_t size;
     
    11211121
    11221122#ifdef VBOX_WITH_STATISTICS
    1123 int patmPatchGenStats(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC)
     1123int patmPatchGenStats(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC)
    11241124{
    11251125    uint32_t size;
     
    12131213        break;
    12141214    }
    1215     *(RTGCPTR *)&pPB[2] = pVM->patm.s.pCPUMCtxGC + offset;
     1215    *(RTGCPTR32 *)&pPB[2] = pVM->patm.s.pCPUMCtxGC + offset;
    12161216    patmPatchAddReloc32(pVM, pPatch, &pPB[2], FIXUP_ABSOLUTE);
    12171217
    1218     PATCHGEN_EPILOG(pPatch, 2 + sizeof(RTGCPTR));
     1218    PATCHGEN_EPILOG(pPatch, 2 + sizeof(RTGCPTR32));
    12191219    return rc;
    12201220}
     
    12791279        break;
    12801280    }
    1281     *(RTGCPTR *)&pPB[2] = pVM->patm.s.pCPUMCtxGC + offset;
     1281    *(RTGCPTR32 *)&pPB[2] = pVM->patm.s.pCPUMCtxGC + offset;
    12821282    patmPatchAddReloc32(pVM, pPatch, &pPB[2], FIXUP_ABSOLUTE);
    12831283
    1284     PATCHGEN_EPILOG(pPatch, 2 + sizeof(RTGCPTR));
     1284    PATCHGEN_EPILOG(pPatch, 2 + sizeof(RTGCPTR32));
    12851285    return rc;
    12861286}
     
    12891289 * mov GPR, SS
    12901290 */
    1291 int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC)
     1291int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC)
    12921292{
    12931293    uint32_t size, offset;
     
    13401340 * @param   pCurInstrGC Guest instruction address
    13411341 */
    1342 int patmPatchGenSldtStr(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC)
     1342int patmPatchGenSldtStr(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC)
    13431343{
    13441344    // sldt %Ew
     
    13651365        if (pCpu->pCurInstr->opcode == OP_STR)
    13661366        {
    1367             *(RTGCPTR *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, tr);
     1367            *(RTGCPTR32 *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, tr);
    13681368        }
    13691369        else
    13701370        {
    1371             *(RTGCPTR *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, ldtr);
     1371            *(RTGCPTR32 *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, ldtr);
    13721372        }
    13731373        patmPatchAddReloc32(pVM, pPatch, &pPB[offset], FIXUP_ABSOLUTE);
    1374         offset += sizeof(RTGCPTR);
     1374        offset += sizeof(RTGCPTR32);
    13751375    }
    13761376    else
     
    14021402            i++;    //skip segment prefix
    14031403
    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);
    14051405        AssertRCReturn(rc, rc);
    14061406        offset += (pCpu->opsize - i);
     
    14101410        if (pCpu->pCurInstr->opcode == OP_STR)
    14111411        {
    1412             *(RTGCPTR *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, tr);
     1412            *(RTGCPTR32 *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, tr);
    14131413        }
    14141414        else
    14151415        {
    1416             *(RTGCPTR *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, ldtr);
     1416            *(RTGCPTR32 *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + RT_OFFSETOF(CPUMCTX, ldtr);
    14171417        }
    14181418        patmPatchAddReloc32(pVM, pPatch, &pPB[offset], FIXUP_ABSOLUTE);
    1419         offset += sizeof(RTGCPTR);
     1419        offset += sizeof(RTGCPTR32);
    14201420
    14211421        pPB[offset++] = 0x66;              // mov       word ptr [edx],ax
     
    14411441 * @param   pCurInstrGC Guest instruction address
    14421442 */
    1443 int patmPatchGenSxDT(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC)
     1443int patmPatchGenSxDT(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC)
    14441444{
    14451445    int rc = VINF_SUCCESS;
     
    14961496    if (pCpu->prefix == PREFIX_SEG)
    14971497        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);
    14991499    AssertRCReturn(rc, rc);
    15001500    offset += (pCpu->opsize - i);
     
    15021502    pPB[offset++] = 0x66;              // mov       ax, CPUMCTX.gdtr.limit
    15031503    pPB[offset++] = 0xA1;
    1504     *(RTGCPTR *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + offset_limit;
     1504    *(RTGCPTR32 *)&pPB[offset] = pVM->patm.s.pCPUMCtxGC + offset_limit;
    15051505    patmPatchAddReloc32(pVM, pPatch, &pPB[offset], FIXUP_ABSOLUTE);
    1506     offset += sizeof(RTGCPTR);
     1506    offset += sizeof(RTGCPTR32);
    15071507
    15081508    pPB[offset++] = 0x66;              // mov       word ptr [edx],ax
     
    15111511
    15121512    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;
    15141514    patmPatchAddReloc32(pVM, pPatch, &pPB[offset], FIXUP_ABSOLUTE);
    1515     offset += sizeof(RTGCPTR);
     1515    offset += sizeof(RTGCPTR32);
    15161516
    15171517    pPB[offset++] = 0x89;              // mov       dword ptr [edx+2],eax
     
    15351535 * @param   pCurInstrGC Guest instruction address
    15361536 */
    1537 int patmPatchGenCpuid(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC)
     1537int patmPatchGenCpuid(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC)
    15381538{
    15391539    uint32_t size;
     
    15831583 * Relative jump from patch code to patch code (no fixup required)
    15841584 */
    1585 int patmPatchGenPatchJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, RCPTRTYPE(uint8_t *) pPatchAddrGC, bool fAddLookupRecord)
     1585int patmPatchGenPatchJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC, RCPTRTYPE(uint8_t *) pPatchAddrGC, bool fAddLookupRecord)
    15861586{
    15871587    int32_t displ;
  • trunk/src/VBox/VMM/PATM/PATMPatch.h

    r9212 r9220  
    2222#define ___PATMPATCH_H
    2323
    24 int patmPatchAddReloc32(PVM pVM, PPATCHINFO pPatch, uint8_t *pRelocHC, uint32_t uType, RTGCPTR pSource = 0, RTGCPTR pDest = 0);
    25 int patmPatchAddJump(PVM pVM, PPATCHINFO pPatch, uint8_t *pJumpHC, uint32_t offset, RTGCPTR pTargetGC, uint32_t opcode);
     24int patmPatchAddReloc32(PVM pVM, PPATCHINFO pPatch, uint8_t *pRelocHC, uint32_t uType, RTGCPTR32 pSource = 0, RTGCPTR32 pDest = 0);
     25int patmPatchAddJump(PVM pVM, PPATCHINFO pPatch, uint8_t *pJumpHC, uint32_t offset, RTGCPTR32 pTargetGC, uint32_t opcode);
    2626
    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);
     27int patmPatchGenCpuid(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC);
     28int patmPatchGenSxDT(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC);
     29int patmPatchGenSldtStr(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC);
    3030int patmPatchGenMovControl(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu);
    3131int patmPatchGenMovDebug(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu);
    32 int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC);
     32int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC);
    3333int patmPatchGenRelJump(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pTargetGC, uint32_t opcode, bool fSizeOverride);
    3434int patmPatchGenLoop(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pTargetGC, uint32_t opcode, bool fSizeOverride);
    3535int patmPatchGenPushf(PVM pVM, PPATCHINFO pPatch, bool fSizeOverride);
    3636int patmPatchGenPopf(PVM pVM, PPATCHINFO pPatch, RCPTRTYPE(uint8_t *) pReturnAddrGC, bool fSizeOverride, bool fGenJumpBack);
    37 int patmPatchGenSti(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, RTGCPTR pNextInstrGC);
     37int patmPatchGenSti(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC, RTGCPTR32 pNextInstrGC);
    3838
    3939int patmPatchGenCli(PVM pVM, PPATCHINFO pPatch);
    40 int patmPatchGenIret(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, bool fSizeOverride);
     40int patmPatchGenIret(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC, bool fSizeOverride);
    4141int patmPatchGenDuplicate(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pCurInstrGC);
    4242int patmPatchGenPushCS(PVM pVM, PPATCHINFO pPatch);
    4343
    44 int patmPatchGenStats(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC);
     44int patmPatchGenStats(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC);
    4545
    46 int patmPatchGenCall(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pInstrGC, RTGCPTR pTargetGC, bool fIndirect);
     46int patmPatchGenCall(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pInstrGC, RTGCPTR32 pTargetGC, bool fIndirect);
    4747int patmPatchGenRet(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pCurInstrGC);
    4848
    49 int patmPatchGenPatchJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC, RCPTRTYPE(uint8_t *) pPatchAddrGC, bool fAddLookupRecord = true);
     49int patmPatchGenPatchJump(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC, RCPTRTYPE(uint8_t *) pPatchAddrGC, bool fAddLookupRecord = true);
    5050
    5151/**
     
    5858 * @param   pCurInstrGC Current instruction address
    5959 */
    60 int patmPatchGenJump(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR pCurInstrGC);
     60int patmPatchGenJump(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTGCPTR32 pCurInstrGC);
    6161
    6262/**
     
    6868 * @param   pTrapHandlerGC  IDT handler address
    6969 */
    70 int patmPatchGenTrapEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR pTrapHandlerGC);
     70int patmPatchGenTrapEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pTrapHandlerGC);
    7171
    7272/**
     
    7878 * @param   pIntHandlerGC IDT handler address
    7979 */
    80 int patmPatchGenIntEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR pIntHandlerGC);
     80int patmPatchGenIntEntry(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pIntHandlerGC);
    8181
    8282/**
     
    110110 *
    111111 */
    112 int patmPatchGenSetPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC);
     112int patmPatchGenSetPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC);
    113113
    114114/**
     
    121121 *
    122122 */
    123 int patmPatchGenClearPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR pInstrGC);
     123int patmPatchGenClearPIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pInstrGC);
    124124
    125125/**
     
    131131 * @param   pNextInstrGC    Next guest instruction
    132132 */
    133 int patmPatchGenClearInhibitIRQ(PVM pVM, PPATCHINFO pPatch, RTGCPTR pNextInstrGC);
     133int patmPatchGenClearInhibitIRQ(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pNextInstrGC);
    134134
    135135/**
     
    142142 *
    143143 */
    144 int patmPatchGenCheckIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR pCurInstrGC);
     144int patmPatchGenCheckIF(PVM pVM, PPATCHINFO pPatch, RTGCPTR32 pCurInstrGC);
    145145
    146146/**
  • trunk/src/VBox/VMM/PATM/VMMAll/CSAMAll.cpp

    r9212 r9220  
    5353 * @param   pvFault     Fault address
    5454 */
    55 CSAMDECL(int) CSAMExecFault(PVM pVM, RTGCPTR pvFault)
     55CSAMDECL(int) CSAMExecFault(PVM pVM, RTGCPTR32 pvFault)
    5656{
    5757    if(!CSAMIsEnabled(pVM))
     
    8080 * @param   pPage       GC page address
    8181 */
    82 CSAMDECL(bool) CSAMIsPageScanned(PVM pVM, RTGCPTR pPage)
     82CSAMDECL(bool) CSAMIsPageScanned(PVM pVM, RTGCPTR32 pPage)
    8383{
    8484    int pgdir, bit;
     
    108108 *
    109109 */
    110 CSAMDECL(int) CSAMMarkPage(PVM pVM, RTGCPTR pPage, bool fScanned)
     110CSAMDECL(int) CSAMMarkPage(PVM pVM, RTGCPTR32 pPage, bool fScanned)
    111111{
    112112    int pgdir, bit;
     
    177177 * @param   GCPtr       GC pointer of page
    178178 */
    179 CSAMDECL(bool) CSAMDoesPageNeedScanning(PVM pVM, RTGCPTR GCPtr)
     179CSAMDECL(bool) CSAMDoesPageNeedScanning(PVM pVM, RTGCPTR32 GCPtr)
    180180{
    181181    if(!CSAMIsEnabled(pVM))
     
    200200 * @param   GCPtr       GC pointer of page
    201201 */
    202 CSAMDECL(void) CSAMMarkPossibleCodePage(PVM pVM, RTGCPTR GCPtr)
     202CSAMDECL(void) CSAMMarkPossibleCodePage(PVM pVM, RTGCPTR32 GCPtr)
    203203{
    204204    if (pVM->csam.s.cPossibleCodePages < RT_ELEMENTS(pVM->csam.s.pvPossibleCodePage))
     
    247247 * @param   GCPtr       GC pointer of page table entry
    248248 */
    249 CSAMDECL(bool) CSAMIsKnownDangerousInstr(PVM pVM, RTGCPTR GCPtr)
     249CSAMDECL(bool) CSAMIsKnownDangerousInstr(PVM pVM, RTGCPTR32 GCPtr)
    250250{
    251251    for (uint32_t i=0;i<pVM->csam.s.cDangerousInstr;i++)
  • trunk/src/VBox/VMM/PATM/VMMAll/PATMAll.cpp

    r9212 r9220  
    5252PATMDECL(void) PATMRawEnter(PVM pVM, PCPUMCTXCORE pCtxCore)
    5353{
    54     bool fPatchCode = PATMIsPatchGCAddr(pVM, (RTGCPTR)pCtxCore->eip);
     54    bool fPatchCode = PATMIsPatchGCAddr(pVM, (RTGCPTR32)pCtxCore->eip);
    5555
    5656    /*
     
    8181       )
    8282    {
    83         if (pVM->patm.s.pfnSysEnterGC != (RTGCPTR)pCtx->SysEnter.eip)
     83        if (pVM->patm.s.pfnSysEnterGC != (RTGCPTR32)pCtx->SysEnter.eip)
    8484        {
    8585            pVM->patm.s.pfnSysEnterPatchGC = 0;
     
    9494                {
    9595                    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;
    9797                    Assert(pVM->patm.s.pfnSysEnterPatchGC);
    9898                }
    9999            }
    100100            else
    101                 pVM->patm.s.pfnSysEnterGC = (RTGCPTR)pCtx->SysEnter.eip;
     101                pVM->patm.s.pfnSysEnterGC = (RTGCPTR32)pCtx->SysEnter.eip;
    102102        }
    103103    }
     
    126126PATMDECL(void) PATMRawLeave(PVM pVM, PCPUMCTXCORE pCtxCore, int rawRC)
    127127{
    128     bool fPatchCode = PATMIsPatchGCAddr(pVM, (RTGCPTR)pCtxCore->eip);
     128    bool fPatchCode = PATMIsPatchGCAddr(pVM, (RTGCPTR32)pCtxCore->eip);
    129129    /*
    130130     * We will only be called if PATMRawEnter was previously called.
     
    157157            {
    158158                PATMTRANSSTATE  enmState;
    159                 RTGCPTR         pOrgInstrGC = PATMR3PatchToGCPtr(pVM, pCtxCore->eip, &enmState);
     159                RTGCPTR32         pOrgInstrGC = PATMR3PatchToGCPtr(pVM, pCtxCore->eip, &enmState);
    160160
    161161                AssertRelease(pOrgInstrGC);
     
    191191    if (!fPatchCode)
    192192    {
    193         if (CTXSUFF(pVM->patm.s.pGCState)->GCPtrInhibitInterrupts == (RTGCPTR)pCtxCore->eip)
     193        if (CTXSUFF(pVM->patm.s.pGCState)->GCPtrInhibitInterrupts == (RTGCPTR32)pCtxCore->eip)
    194194        {
    195195            EMSetInhibitInterruptsPC(pVM, pCtxCore->eip);
     
    246246 * @param   pAddrGC     Guest context address
    247247 */
    248 PATMDECL(bool) PATMShouldUseRawMode(PVM pVM, RTGCPTR pAddrGC)
     248PATMDECL(bool) PATMShouldUseRawMode(PVM pVM, RTGCPTR32 pAddrGC)
    249249{
    250250    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;
    252252}
    253253
     
    270270 * @param   pAddrGC     Guest context address
    271271 */
    272 PATMDECL(bool) PATMIsPatchGCAddr(PVM pVM, RTGCPTR pAddrGC)
     272PATMDECL(bool) PATMIsPatchGCAddr(PVM pVM, RTGCPTR32 pAddrGC)
    273273{
    274274    RTGCPTR32 pAddrGG32 = (RTGCPTR32)pAddrGC;
    275275
    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;
    277277}
    278278
     
    285285 * @param   pCachedData     GC pointer to cached data
    286286 */
    287 PATMDECL(int) PATMSetMMIOPatchInfo(PVM pVM, RTGCPHYS GCPhys, RTGCPTR pCachedData)
     287PATMDECL(int) PATMSetMMIOPatchInfo(PVM pVM, RTGCPHYS GCPhys, RTGCPTR32 pCachedData)
    288288{
    289289    pVM->patm.s.mmio.GCPhys = GCPhys;
     
    325325    if (PATMIsEnabled(pVM))
    326326    {
    327         if (PATMIsPatchGCAddr(pVM, (RTGCPTR)pCtxCore->eip))
     327        if (PATMIsPatchGCAddr(pVM, (RTGCPTR32)pCtxCore->eip))
    328328            return false;
    329329    }
     
    339339 *
    340340 */
    341 PATMDECL(PPATMPATCHREC) PATMQueryFunctionPatch(PVM pVM, RTGCPTR pInstrGC)
     341PATMDECL(PPATMPATCHREC) PATMQueryFunctionPatch(PVM pVM, RTGCPTR32 pInstrGC)
    342342{
    343343    PPATMPATCHREC pRec;
     
    362362 * @param   pSize       Original instruction size (out, optional)
    363363 */
    364 PATMDECL(bool) PATMIsInt3Patch(PVM pVM, RTGCPTR pInstrGC, uint32_t *pOpcode, uint32_t *pSize)
     364PATMDECL(bool) PATMIsInt3Patch(PVM pVM, RTGCPTR32 pInstrGC, uint32_t *pOpcode, uint32_t *pSize)
    365365{
    366366    PPATMPATCHREC pRec;
     
    467467 * @param   pRelBranchPatch     Relative duplicated function address
    468468 */
    469 PATMDECL(int) PATMAddBranchToLookupCache(PVM pVM, RTGCPTR pJumpTableGC, RTGCPTR pBranchTarget, RTGCUINTPTR pRelBranchPatch)
     469PATMDECL(int) PATMAddBranchToLookupCache(PVM pVM, RTGCPTR32 pJumpTableGC, RTGCPTR32 pBranchTarget, RTGCUINTPTR pRelBranchPatch)
    470470{
    471471    PPATCHJUMPTABLE pJumpTable;
  • trunk/src/VBox/VMM/PATM/VMMGC/CSAMGC.cpp

    r9212 r9220  
    6666{
    6767    PPATMGCSTATE pPATMGCState;
    68     bool         fPatchCode = PATMIsPatchGCAddr(pVM, (RTGCPTR)pRegFrame->eip);
     68    bool         fPatchCode = PATMIsPatchGCAddr(pVM, (RTGCPTR32)pRegFrame->eip);
    6969    int          rc;
    7070
     
    103103    if (cpl != 3)
    104104    {
    105         rc = PATMGCHandleWriteToPatchPage(pVM, pRegFrame, (RTGCPTR)((RTGCUINTPTR)pvRange + offRange), 4 /** @todo */);
     105        rc = PATMGCHandleWriteToPatchPage(pVM, pRegFrame, (RTGCPTR32)((RTGCUINTPTR)pvRange + offRange), 4 /** @todo */);
    106106        if (rc == VINF_SUCCESS)
    107107            return rc;
  • trunk/src/VBox/VMM/PATM/VMMGC/PATMGC.cpp

    r9212 r9220  
    6363 *                      (If it's a EIP range this's the EIP, if not it's pvFault.)
    6464 */
    65 PATMGCDECL(int) PATMGCMonitorPage(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, void *pvFault, void *pvRange, uintptr_t offRange)
     65PATMGCDECL(int) PATMGCMonitorPage(PVM pVM, RTGCUINT uErrorCode, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault, RTGCPTR pvRange, uintptr_t offRange)
    6666{
    6767    pVM->patm.s.pvFaultMonitor = (RTGCPTR32)pvFault;
     
    8181 *
    8282 */
    83 PATMGCDECL(int) PATMGCHandleWriteToPatchPage(PVM pVM, PCPUMCTXCORE pRegFrame, RTGCPTR GCPtr, uint32_t cbWrite)
     83PATMGCDECL(int) PATMGCHandleWriteToPatchPage(PVM pVM, PCPUMCTXCORE pRegFrame, RTGCPTR32 GCPtr, uint32_t cbWrite)
    8484{
    8585    RTGCUINTPTR          pWritePageStart, pWritePageEnd;
     
    9797    pWritePageEnd   = ((RTGCUINTPTR)GCPtr + cbWrite - 1) & PAGE_BASE_GC_MASK;
    9898
    99     pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(CTXSUFF(&pVM->patm.s.PatchLookupTree)->PatchTreeByPage, (RTGCPTR)pWritePageStart);
     99    pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(CTXSUFF(&pVM->patm.s.PatchLookupTree)->PatchTreeByPage, (RTGCPTR32)pWritePageStart);
    100100    if (    !pPatchPage
    101101        &&  pWritePageStart != pWritePageEnd
    102102       )
    103103    {
    104         pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(CTXSUFF(&pVM->patm.s.PatchLookupTree)->PatchTreeByPage, (RTGCPTR)pWritePageEnd);
     104        pPatchPage = (PPATMPATCHPAGE)RTAvloGCPtrGet(CTXSUFF(&pVM->patm.s.PatchLookupTree)->PatchTreeByPage, (RTGCPTR32)pWritePageEnd);
    105105    }
    106106
     
    162162    /* Very important check -> otherwise we have a security leak. */
    163163    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));
    165165
    166166    /* OP_ILLUD2 in PATM generated code? */
     
    188188                 *  edi = PATCHJUMPTABLE ptr
    189189                 */
    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));
    191191
    192192                Log(("PATMGC: lookup %VGv jump table=%VGv\n", pRegFrame->edx, pRegFrame->edi));
    193193
    194                 pRec = PATMQueryFunctionPatch(pVM, (RTGCPTR)(pRegFrame->edx));
     194                pRec = PATMQueryFunctionPatch(pVM, (RTGCPTR32)(pRegFrame->edx));
    195195                if (pRec)
    196196                {
     
    198198                    {
    199199                        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);
    201201                        if (rc == VINF_SUCCESS)
    202202                        {
     
    457457
    458458    /* Int 3 in PATM generated code? (most common case) */
    459     if (PATMIsPatchGCAddr(pVM, (RTGCPTR)pRegFrame->eip))
     459    if (PATMIsPatchGCAddr(pVM, (RTGCPTR32)pRegFrame->eip))
    460460    {
    461461        /* @note hardcoded assumption about it being a single byte int 3 instruction. */
     
    465465
    466466    /** @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 */
    468468    if (pRec && pRec->patch.uState == PATCH_ENABLED)
    469469    {
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette