VirtualBox

Changeset 9300 in vbox


Ignore:
Timestamp:
Jun 2, 2008 1:30:12 PM (16 years ago)
Author:
vboxsync
Message:

More 64 bits guest ptr fixes

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/em.h

    r9212 r9300  
    477477EMGCDECL(int) EMGCTrap(PVM pVM, unsigned uTrap, PCPUMCTXCORE pRegFrame);
    478478
    479 EMGCDECL(uint32_t) EMGCEmulateLockCmpXchg(RTGCPTR pu32Param1, uint32_t *pu32Param2, uint32_t u32Param3, size_t cbSize, uint32_t *pEflags);
    480 EMGCDECL(uint32_t) EMGCEmulateCmpXchg(RTGCPTR pu32Param1, uint32_t *pu32Param2, uint32_t u32Param3, size_t cbSize, uint32_t *pEflags);
    481 EMGCDECL(uint32_t) EMGCEmulateLockCmpXchg8b(RTGCPTR pu32Param1, uint32_t *pEAX, uint32_t *pEDX, uint32_t uEBX, uint32_t uECX, uint32_t *pEflags);
    482 EMGCDECL(uint32_t) EMGCEmulateCmpXchg8b(RTGCPTR pu32Param1, uint32_t *pEAX, uint32_t *pEDX, uint32_t uEBX, uint32_t uECX, uint32_t *pEflags);
    483 EMGCDECL(uint32_t) EMGCEmulateLockXAdd(RTGCPTR pu32Param1, uint32_t *pu32Param2, size_t cbSize, uint32_t *pEflags);
    484 EMGCDECL(uint32_t) EMGCEmulateXAdd(RTGCPTR pu32Param1, uint32_t *pu32Param2, size_t cbSize, uint32_t *pEflags);
     479EMGCDECL(uint32_t) EMGCEmulateLockCmpXchg(RTRCPTR pu32Param1, uint32_t *pu32Param2, uint32_t u32Param3, size_t cbSize, uint32_t *pEflags);
     480EMGCDECL(uint32_t) EMGCEmulateCmpXchg(RTRCPTR pu32Param1, uint32_t *pu32Param2, uint32_t u32Param3, size_t cbSize, uint32_t *pEflags);
     481EMGCDECL(uint32_t) EMGCEmulateLockCmpXchg8b(RTRCPTR pu32Param1, uint32_t *pEAX, uint32_t *pEDX, uint32_t uEBX, uint32_t uECX, uint32_t *pEflags);
     482EMGCDECL(uint32_t) EMGCEmulateCmpXchg8b(RTRCPTR pu32Param1, uint32_t *pEAX, uint32_t *pEDX, uint32_t uEBX, uint32_t uECX, uint32_t *pEflags);
     483EMGCDECL(uint32_t) EMGCEmulateLockXAdd(RTRCPTR pu32Param1, uint32_t *pu32Param2, size_t cbSize, uint32_t *pEflags);
     484EMGCDECL(uint32_t) EMGCEmulateXAdd(RTRCPTR pu32Param1, uint32_t *pu32Param2, size_t cbSize, uint32_t *pEflags);
    485485
    486486/** @} */
  • trunk/src/VBox/VMM/PATM/CSAMInternal.h

    r9255 r9300  
    174174    /* To keep track of dirty pages */
    175175    uint32_t            cDirtyPages;
    176     RTGCPTR32           pvDirtyBasePage[CSAM_MAX_DIRTY_PAGES];
    177     RTGCPTR32           pvDirtyFaultPage[CSAM_MAX_DIRTY_PAGES];
     176    RTRCPTR             pvDirtyBasePage[CSAM_MAX_DIRTY_PAGES];
     177    RTRCPTR             pvDirtyFaultPage[CSAM_MAX_DIRTY_PAGES];
    178178
    179179    /* To keep track of possible code pages */
  • trunk/src/VBox/VMM/PATM/VMMGC/CSAMGC.cpp

    r9228 r9300  
    117117
    118118    /* Note that pvFault might be a different address in case of aliases. So use pvRange + offset instead!. */
    119     pVM->csam.s.pvDirtyBasePage[pVM->csam.s.cDirtyPages] = (RTGCPTR32)((RTGCUINTPTR)pvRange + offRange);
    120     pVM->csam.s.pvDirtyFaultPage[pVM->csam.s.cDirtyPages] = (RTGCPTR32)((RTGCUINTPTR)pvRange + offRange);
     119    pVM->csam.s.pvDirtyBasePage[pVM->csam.s.cDirtyPages] = (RTRCPTR)((RTGCUINTPTR)pvRange + offRange);
     120    pVM->csam.s.pvDirtyFaultPage[pVM->csam.s.cDirtyPages] = (RTRCPTR)((RTGCUINTPTR)pvRange + offRange);
    121121    if (++pVM->csam.s.cDirtyPages == CSAM_MAX_DIRTY_PAGES)
    122122        return VINF_CSAM_PENDING_ACTION;
  • trunk/src/VBox/VMM/VMMAll/EMAll.cpp

    r9289 r9300  
    202202{
    203203    RTGCPTR pbCode;
     204
     205    LogFlow(("EMInterpretInstruction %VRv fault %VGv\n", pRegFrame->eip, pvFault));
    204206    int rc = SELMValidateAndConvertCSAddr(pVM, pRegFrame->eflags, pRegFrame->ss, pRegFrame->cs, &pRegFrame->csHid, (RTGCPTR)pRegFrame->eip, &pbCode);
    205207    if (VBOX_SUCCESS(rc))
     
    12721274        if (TRPMGetErrorCode(pVM) & X86_TRAP_PF_RW)
    12731275        {
    1274             RTGCPTR pParam1;
     1276            RTRCPTR pParam1;
    12751277            uint32_t valpar, eflags;
    12761278#ifdef VBOX_STRICT
     
    12821284            {
    12831285            case PARMTYPE_ADDRESS:
    1284                 pParam1 = (RTGCPTR)param1.val.val32;
    1285                 pParam1 = emConvertToFlatAddr(pVM, pRegFrame, pCpu, &pCpu->param1, pParam1);
     1286                pParam1 = (RTRCPTR)param1.val.val32;
     1287                pParam1 = (RTRCPTR)emConvertToFlatAddr(pVM, pRegFrame, pCpu, &pCpu->param1, (RTGCPTR)(RTRCUINTPTR)pParam1);
    12861288
    12871289                /* Safety check (in theory it could cross a page boundary and fault there though) */
    1288                 AssertMsgReturn(pParam1 == pvFault, ("eip=%VGv pParam1=%VGv pvFault=%VGv\n", pRegFrame->eip, pParam1, pvFault), VERR_EM_INTERPRETER);
     1290                AssertMsgReturn(pParam1 == (RTRCPTR)pvFault, ("eip=%VRv pParam1=%VRv pvFault=%VGv\n", pRegFrame->eip, pParam1, pvFault), VERR_EM_INTERPRETER);
    12891291                break;
    12901292
     
    13031305            }
    13041306
    1305             LogFlow(("%s %VGv=%08x eax=%08x %08x\n", pszInstr, pParam1, valpar1, pRegFrame->eax, valpar));
     1307            LogFlow(("%s %VRv=%08x eax=%08x %08x\n", pszInstr, pParam1, valpar1, pRegFrame->eax, valpar));
    13061308
    13071309            MMGCRamRegisterTrapHandler(pVM);
     
    13181320            }
    13191321
    1320             LogFlow(("%s %VGv=%08x eax=%08x %08x ZF=%d\n", pszInstr, pParam1, valpar1, pRegFrame->eax, valpar, !!(eflags & X86_EFL_ZF)));
     1322            LogFlow(("%s %VRv=%08x eax=%08x %08x ZF=%d\n", pszInstr, pParam1, valpar1, pRegFrame->eax, valpar, !!(eflags & X86_EFL_ZF)));
    13211323
    13221324            /* Update guest's eflags and finish. */
     
    13561358        if (TRPMGetErrorCode(pVM) & X86_TRAP_PF_RW)
    13571359        {
    1358             RTGCPTR pParam1;
     1360            RTRCPTR pParam1;
    13591361            uint32_t eflags;
    13601362
     
    13631365            {
    13641366            case PARMTYPE_ADDRESS:
    1365                 pParam1 = (RTGCPTR)param1.val.val32;
    1366                 pParam1 = emConvertToFlatAddr(pVM, pRegFrame, pCpu, &pCpu->param1, pParam1);
     1367                pParam1 = (RTRCPTR)param1.val.val32;
     1368                pParam1 = (RTRCPTR)emConvertToFlatAddr(pVM, pRegFrame, pCpu, &pCpu->param1, (RTGCPTR)(RTRCUINTPTR)pParam1);
    13671369
    13681370                /* Safety check (in theory it could cross a page boundary and fault there though) */
    1369                 AssertMsgReturn(pParam1 == pvFault, ("eip=%VGv pParam1=%VGv pvFault=%VGv\n", pRegFrame->eip, pParam1, pvFault), VERR_EM_INTERPRETER);
     1371                AssertMsgReturn(pParam1 == (RTRCPTR)pvFault, ("eip=%VRv pParam1=%VRv pvFault=%VGv\n", pRegFrame->eip, pParam1, pvFault), VERR_EM_INTERPRETER);
    13701372                break;
    13711373
     
    13741376            }
    13751377
    1376             LogFlow(("%s %VGv=%08x eax=%08x\n", pszInstr, pParam1, pRegFrame->eax));
     1378            LogFlow(("%s %VRv=%08x eax=%08x\n", pszInstr, pParam1, pRegFrame->eax));
    13771379
    13781380            MMGCRamRegisterTrapHandler(pVM);
     
    14271429        if (TRPMGetErrorCode(pVM) & X86_TRAP_PF_RW)
    14281430        {
    1429             RTGCPTR pParam1;
     1431            RTRCPTR pParam1;
    14301432            uint32_t eflags;
    14311433#ifdef VBOX_STRICT
     
    14371439            {
    14381440            case PARMTYPE_ADDRESS:
    1439                 pParam1 = (RTGCPTR)param1.val.val32;
    1440                 pParam1 = emConvertToFlatAddr(pVM, pRegFrame, pCpu, &pCpu->param1, pParam1);
     1441                pParam1 = (RTRCPTR)param1.val.val32;
     1442                pParam1 = (RTRCPTR)emConvertToFlatAddr(pVM, pRegFrame, pCpu, &pCpu->param1, (RTGCPTR)(RTRCUINTPTR)pParam1);
    14411443
    14421444                /* Safety check (in theory it could cross a page boundary and fault there though) */
    1443                 AssertMsgReturn(pParam1 == pvFault, ("eip=%VGv pParam1=%VGv pvFault=%VGv\n", pRegFrame->eip, pParam1, pvFault), VERR_EM_INTERPRETER);
     1445                AssertMsgReturn(pParam1 == (RTRCPTR)pvFault, ("eip=%VRv pParam1=%VRv pvFault=%VGv\n", pRegFrame->eip, pParam1, pvFault), VERR_EM_INTERPRETER);
    14441446                break;
    14451447
     
    14481450            }
    14491451
    1450             LogFlow(("XAdd %VGv=%08x reg=%08x\n", pParam1, *pParamReg2));
     1452            LogFlow(("XAdd %VRv=%08x reg=%08x\n", pParam1, *pParamReg2));
    14511453
    14521454            MMGCRamRegisterTrapHandler(pVM);
  • trunk/src/VBox/VMM/VMMAll/PGMAll.cpp

    r9282 r9300  
    299299PGMDECL(int)     PGMTrap0eHandler(PVM pVM, RTGCUINT uErr, PCPUMCTXCORE pRegFrame, RTGCPTR pvFault)
    300300{
    301     LogFlow(("PGMTrap0eHandler: uErr=%#x pvFault=%VGv eip=%VGv\n", (uint32_t)uErr, pvFault, pRegFrame->eip));
     301    LogFlow(("PGMTrap0eHandler: uErr=%#x pvFault=%VGv eip=%RX32\n", (uint32_t)uErr, pvFault, pRegFrame->eip));
    302302    STAM_PROFILE_START(&pVM->pgm.s.StatGCTrap0e, a);
    303303    STAM_STATS({ pVM->pgm.s.CTXSUFF(pStatTrap0eAttribution) = NULL; } );
  • trunk/src/VBox/VMM/VMMGC/TRPMGCHandlers.cpp

    r9295 r9300  
    773773static int trpmGCTrap0dHandler(PVM pVM, PTRPM pTrpm, PCPUMCTXCORE pRegFrame)
    774774{
    775     LogFlow(("trpmGCTrap0dHandler: cs:eip=%RTsel:%VRv uErr=%RX32\n", pRegFrame->ss, pRegFrame->eip, pTrpm->uActiveErrorCode));
     775    LogFlow(("trpmGCTrap0dHandler: cs:eip=%RTsel:%VRv uErr=%VGv\n", pRegFrame->ss, pRegFrame->eip, pTrpm->uActiveErrorCode));
    776776
    777777    /*
  • trunk/src/VBox/VMM/VMMGC/TRPMGCHandlersA.asm

    r8155 r9300  
    339339    mov     dword [eax + TRPM.uActiveCR2], edx
    340340
     341%if GC_ARCH_BITS == 64
     342    ; zero out the high dword
     343    mov     dword [eax + TRPM.uActiveErrorCode + 4], 0
     344    mov     dword [eax + TRPM.uActiveCR2 + 4], 0
     345%endif
     346
    341347    ;
    342348    ; Check if we're in Hypervisor when this happend.
     
    808814    mov     [eax + TRPM.uActiveErrorCode], edx
    809815    mov     [eax + TRPM.uActiveCR2], edx
     816%if GC_ARCH_BITS == 64
     817    ; zero out the high dword
     818    mov     dword [eax + TRPM.uActiveErrorCode + 4], 0
     819    mov     dword [eax + TRPM.uActiveCR2 + 4], 0
     820%endif
    810821
    811822    ;
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