Changeset 13827
- Timestamp:
- 11/05/08 02:31:18 (2 months ago)
- Files:
-
- trunk/include/VBox/mm.h (modified) (1 diff)
- trunk/src/VBox/VMM/CPUM.cpp (modified) (6 diffs)
- trunk/src/VBox/VMM/CPUMStack.cpp (modified) (1 diff)
- trunk/src/VBox/VMM/DBGFDisas.cpp (modified) (6 diffs)
- trunk/src/VBox/VMM/PATM/CSAM.cpp (modified) (3 diffs)
- trunk/src/VBox/VMM/PATM/PATM.cpp (modified) (6 diffs)
- trunk/src/VBox/VMM/PATM/VMMAll/CSAMAll.cpp (modified) (2 diffs)
- trunk/src/VBox/VMM/PATM/VMMGC/PATMGC.cpp (modified) (1 diff)
- trunk/src/VBox/VMM/SELM.cpp (modified) (2 diffs)
- trunk/src/VBox/VMM/testcase/tstMicro.cpp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/include/VBox/mm.h
r13711 r13827 277 277 } 278 278 #endif 279 280 281 #ifdef IN_GC282 VMMDECL(RTHCPTR) MMHyper2HC(PVM pVM, uintptr_t Ptr);283 #else284 DECLINLINE(RTHCPTR) MMHyper2HC(PVM pVM, uintptr_t Ptr)285 {286 NOREF(pVM);287 return (RTHCPTR)Ptr;288 }289 #endif290 291 #define MMHyperHC2GC(pVM, R3Ptr) MMHyperR3ToRC((pVM), (R3Ptr)) /**< @deprecated */292 #define MMHyperGC2HC(pVM, RCPtr) MMHyperRCToR3((pVM), (RCPtr)) /**< @deprecated */293 279 294 280 trunk/src/VBox/VMM/CPUM.cpp
r13796 r13827 2081 2081 /** The size of the segment minus 1. */ 2082 2082 RTGCUINTPTR cbSegLimit; 2083 /** Pointer to the current page - HCPtr. */2084 void const *pvPage HC;2083 /** Pointer to the current page - R3 Ptr. */ 2084 void const *pvPageR3; 2085 2085 /** Pointer to the current page - GC Ptr. */ 2086 2086 RTGCPTR pvPageGC; … … 2115 2115 2116 2116 /* Need to update the page translation? */ 2117 if ( !pState->pvPage HC2117 if ( !pState->pvPageR3 2118 2118 || (GCPtr >> PAGE_SHIFT) != (pState->pvPageGC >> PAGE_SHIFT)) 2119 2119 { … … 2122 2122 /* translate the address */ 2123 2123 pState->pvPageGC = GCPtr & PAGE_BASE_GC_MASK; 2124 if (MMHyperIsInsideArea(pState->pVM, pState->pvPageGC)) 2124 if (MMHyperIsInsideArea(pState->pVM, pState->pvPageGC)) /** @todo r=bird: Don't do this if we're in VT-x/AMD-V mode. */ 2125 2125 { 2126 pState->pvPage HC = MMHyperGC2HC(pState->pVM,pState->pvPageGC);2127 if (!pState->pvPage HC)2126 pState->pvPageR3 = MMHyperRCToR3(pState->pVM, (RTRCPTR)pState->pvPageGC); 2127 if (!pState->pvPageR3) 2128 2128 rc = VERR_INVALID_POINTER; 2129 2129 } … … 2133 2133 if (pState->fLocked) 2134 2134 PGMPhysReleasePageMappingLock(pState->pVM, &pState->PageMapLock); 2135 rc = PGMPhysGCPtr2CCPtrReadOnly(pState->pVM, pState->pvPageGC, &pState->pvPage HC, &pState->PageMapLock);2135 rc = PGMPhysGCPtr2CCPtrReadOnly(pState->pVM, pState->pvPageGC, &pState->pvPageR3, &pState->PageMapLock); 2136 2136 pState->fLocked = RT_SUCCESS_NP(rc); 2137 2137 } 2138 2138 if (VBOX_FAILURE(rc)) 2139 2139 { 2140 pState->pvPage HC= NULL;2140 pState->pvPageR3 = NULL; 2141 2141 return rc; 2142 2142 } … … 2159 2159 2160 2160 /* read and advance */ 2161 memcpy(pu8Dst, (char *)pState->pvPage HC+ (GCPtr & PAGE_OFFSET_MASK), cb);2161 memcpy(pu8Dst, (char *)pState->pvPageR3 + (GCPtr & PAGE_OFFSET_MASK), cb); 2162 2162 cbRead -= cb; 2163 2163 if (!cbRead) … … 2188 2188 State.pCpu = pCpu; 2189 2189 State.pvPageGC = 0; 2190 State.pvPage HC= NULL;2190 State.pvPageR3 = NULL; 2191 2191 State.pVM = pVM; 2192 2192 State.fLocked = false; trunk/src/VBox/VMM/CPUMStack.cpp
r12989 r13827 39 39 /* ASSUME always on flat stack within hypervisor memory for now */ 40 40 pVM->cpum.s.Hyper.esp -= sizeof(u32); 41 *(uint32_t *)MMHyper GC2HC(pVM, (RTGCPTR)pVM->cpum.s.Hyper.esp) = u32;41 *(uint32_t *)MMHyperRCToR3(pVM, (RTRCPTR)pVM->cpum.s.Hyper.esp) = u32; 42 42 } 43 43 trunk/src/VBox/VMM/DBGFDisas.cpp
r13823 r13827 62 62 /** The guest paging mode. */ 63 63 PGMMODE enmMode; 64 /** Pointer to the current page - HCPtr. */65 void const *pvPage HC;64 /** Pointer to the current page - R3 Ptr. */ 65 void const *pvPageR3; 66 66 /** Pointer to the current page - GC Ptr. */ 67 67 RTGCPTR pvPageGC; … … 101 101 pState->enmMode = enmMode; 102 102 pState->pvPageGC = 0; 103 pState->pvPage HC= NULL;103 pState->pvPageR3 = NULL; 104 104 pState->pVM = pVM; 105 105 pState->fLocked = false; … … 189 189 190 190 /* Need to update the page translation? */ 191 if ( !pState->pvPage HC191 if ( !pState->pvPageR3 192 192 || (GCPtr >> PAGE_SHIFT) != (pState->pvPageGC >> PAGE_SHIFT)) 193 193 { … … 198 198 if (MMHyperIsInsideArea(pState->pVM, pState->pvPageGC)) 199 199 { 200 pState->pvPage HC = MMHyperGC2HC(pState->pVM,pState->pvPageGC);201 if (!pState->pvPage HC)200 pState->pvPageR3 = MMHyperRCToR3(pState->pVM, (RTRCPTR)pState->pvPageGC); 201 if (!pState->pvPageR3) 202 202 rc = VERR_INVALID_POINTER; 203 203 } … … 208 208 209 209 if (pState->enmMode <= PGMMODE_PROTECTED) 210 rc = PGMPhysGCPhys2CCPtrReadOnly(pState->pVM, pState->pvPageGC, &pState->pvPage HC, &pState->PageMapLock);210 rc = PGMPhysGCPhys2CCPtrReadOnly(pState->pVM, pState->pvPageGC, &pState->pvPageR3, &pState->PageMapLock); 211 211 else 212 rc = PGMPhysGCPtr2CCPtrReadOnly(pState->pVM, pState->pvPageGC, &pState->pvPage HC, &pState->PageMapLock);212 rc = PGMPhysGCPtr2CCPtrReadOnly(pState->pVM, pState->pvPageGC, &pState->pvPageR3, &pState->PageMapLock); 213 213 pState->fLocked = RT_SUCCESS_NP(rc); 214 214 } 215 215 if (RT_FAILURE(rc)) 216 216 { 217 pState->pvPage HC= NULL;217 pState->pvPageR3 = NULL; 218 218 return rc; 219 219 } … … 236 236 237 237 /* read and advance */ 238 memcpy(pu8Dst, (char *)pState->pvPage HC+ (GCPtr & PAGE_OFFSET_MASK), cb);238 memcpy(pu8Dst, (char *)pState->pvPageR3 + (GCPtr & PAGE_OFFSET_MASK), cb); 239 239 cbRead -= cb; 240 240 if (!cbRead) trunk/src/VBox/VMM/PATM/CSAM.cpp
r13825 r13827 120 120 rc = MMR3HyperAllocOnceNoRel(pVM, CSAM_PGDIRBMP_CHUNKS*sizeof(RTRCPTR), 0, MM_TAG_CSAM, (void **)&pVM->csam.s.pPDGCBitmapHC); 121 121 AssertRCReturn(rc, rc); 122 pVM->csam.s.pPDBitmapGC = MMHyper HC2GC(pVM, pVM->csam.s.pPDGCBitmapHC);123 pVM->csam.s.pPDHCBitmapGC = MMHyper HC2GC(pVM, pVM->csam.s.pPDBitmapHC);122 pVM->csam.s.pPDBitmapGC = MMHyperR3ToRC(pVM, pVM->csam.s.pPDGCBitmapHC); 123 pVM->csam.s.pPDHCBitmapGC = MMHyperR3ToRC(pVM, pVM->csam.s.pPDBitmapHC); 124 124 125 125 rc = csamReinit(pVM); … … 260 260 { 261 261 /* Adjust pgdir and page bitmap pointers. */ 262 pVM->csam.s.pPDBitmapGC = MMHyper HC2GC(pVM, pVM->csam.s.pPDGCBitmapHC);263 pVM->csam.s.pPDHCBitmapGC = MMHyper HC2GC(pVM, pVM->csam.s.pPDBitmapHC);262 pVM->csam.s.pPDBitmapGC = MMHyperR3ToRC(pVM, pVM->csam.s.pPDGCBitmapHC); 263 pVM->csam.s.pPDHCBitmapGC = MMHyperR3ToRC(pVM, pVM->csam.s.pPDBitmapHC); 264 264 265 265 for(int i=0;i<CSAM_PGDIRBMP_CHUNKS;i++) … … 493 493 } 494 494 /* Convert to GC pointer. */ 495 pVM->csam.s.pPDGCBitmapHC[i] = MMHyper HC2GC(pVM, pVM->csam.s.pPDBitmapHC[i]);495 pVM->csam.s.pPDGCBitmapHC[i] = MMHyperR3ToRC(pVM, pVM->csam.s.pPDBitmapHC[i]); 496 496 Assert(pVM->csam.s.pPDGCBitmapHC[i]); 497 497 trunk/src/VBox/VMM/PATM/PATM.cpp
r13532 r13827 125 125 return rc; 126 126 } 127 pVM->patm.s.pPatchMemGC = MMHyper HC2GC(pVM, pVM->patm.s.pPatchMemHC);127 pVM->patm.s.pPatchMemGC = MMHyperR3ToRC(pVM, pVM->patm.s.pPatchMemHC); 128 128 129 129 /* PATM stack page for call instruction execution. (2 parts: one for our private stack and one to store the original return address */ 130 130 pVM->patm.s.pGCStackHC = (RTRCPTR *)(pVM->patm.s.pPatchMemHC + PATCH_MEMORY_SIZE + PAGE_SIZE); 131 pVM->patm.s.pGCStackGC = MMHyper HC2GC(pVM, pVM->patm.s.pGCStackHC);131 pVM->patm.s.pGCStackGC = MMHyperR3ToRC(pVM, pVM->patm.s.pGCStackHC); 132 132 133 133 /* … … 140 140 Assert(sizeof(PATMGCSTATE) < PAGE_SIZE); /** @note hardcoded dependencies on this exist. */ 141 141 pVM->patm.s.pGCStateHC = (PPATMGCSTATE)((uint8_t *)pVM->patm.s.pGCStackHC + PATM_STACK_TOTAL_SIZE); 142 pVM->patm.s.pGCStateGC = MMHyper HC2GC(pVM, pVM->patm.s.pGCStateHC);142 pVM->patm.s.pGCStateGC = MMHyperR3ToRC(pVM, pVM->patm.s.pGCStateHC); 143 143 144 144 /* Hypervisor memory for patch statistics */ 145 145 pVM->patm.s.pStatsHC = (PSTAMRATIOU32)((uint8_t *)pVM->patm.s.pGCStateHC + PAGE_SIZE); 146 pVM->patm.s.pStatsGC = MMHyper HC2GC(pVM, pVM->patm.s.pStatsHC);146 pVM->patm.s.pStatsGC = MMHyperR3ToRC(pVM, pVM->patm.s.pStatsHC); 147 147 148 148 /* Memory for patch lookup trees. */ 149 149 rc = MMHyperAlloc(pVM, sizeof(*pVM->patm.s.PatchLookupTreeHC), 0, MM_TAG_PATM, (void **)&pVM->patm.s.PatchLookupTreeHC); 150 150 AssertRCReturn(rc, rc); 151 pVM->patm.s.PatchLookupTreeGC = MMHyper HC2GC(pVM, pVM->patm.s.PatchLookupTreeHC);151 pVM->patm.s.PatchLookupTreeGC = MMHyperR3ToRC(pVM, pVM->patm.s.PatchLookupTreeHC); 152 152 153 153 #ifdef RT_ARCH_AMD64 /* see patmReinit(). */ … … 341 341 342 342 Assert(pVM->patm.s.pPatchMemHC); 343 Assert(pVM->patm.s.pPatchMemGC = MMHyper HC2GC(pVM, pVM->patm.s.pPatchMemHC));343 Assert(pVM->patm.s.pPatchMemGC = MMHyperR3ToRC(pVM, pVM->patm.s.pPatchMemHC)); 344 344 memset(pVM->patm.s.pPatchMemHC, 0, PATCH_MEMORY_SIZE); 345 345 AssertReleaseMsg(pVM->patm.s.pPatchMemGC, ("Impossible! MMHyperHC2GC(%p) failed!\n", pVM->patm.s.pPatchMemHC)); … … 350 350 351 351 Assert(pVM->patm.s.PatchLookupTreeHC); 352 Assert(pVM->patm.s.PatchLookupTreeGC == MMHyper HC2GC(pVM, pVM->patm.s.PatchLookupTreeHC));352 Assert(pVM->patm.s.PatchLookupTreeGC == MMHyperR3ToRC(pVM, pVM->patm.s.PatchLookupTreeHC)); 353 353 354 354 /* … … 412 412 VMMR3DECL(void) PATMR3Relocate(PVM pVM) 413 413 { 414 RTRCPTR GCPtrNew = MMHyper HC2GC(pVM, pVM->patm.s.pGCStateHC);414 RTRCPTR GCPtrNew = MMHyperR3ToRC(pVM, pVM->patm.s.pGCStateHC); 415 415 RTRCINTPTR delta = GCPtrNew - pVM->patm.s.pGCStateGC; 416 416 … … 434 434 435 435 pVM->patm.s.pGCStateGC = GCPtrNew; 436 pVM->patm.s.pPatchMemGC = MMHyper HC2GC(pVM, pVM->patm.s.pPatchMemHC);437 438 pVM->patm.s.pGCStackGC = MMHyper HC2GC(pVM, pVM->patm.s.pGCStackHC);439 440 pVM->patm.s.pStatsGC = MMHyper HC2GC(pVM, pVM->patm.s.pStatsHC);441 442 pVM->patm.s.PatchLookupTreeGC = MMHyper HC2GC(pVM, pVM->patm.s.PatchLookupTreeHC);436 pVM->patm.s.pPatchMemGC = MMHyperR3ToRC(pVM, pVM->patm.s.pPatchMemHC); 437 438 pVM->patm.s.pGCStackGC = MMHyperR3ToRC(pVM, pVM->patm.s.pGCStackHC); 439 440 pVM->patm.s.pStatsGC = MMHyperR3ToRC(pVM, pVM->patm.s.pStatsHC); 441 442 pVM->patm.s.PatchLookupTreeGC = MMHyperR3ToRC(pVM, pVM->patm.s.PatchLookupTreeHC); 443 443 444 444 if (pVM->patm.s.pfnSysEnterPatchGC) trunk/src/VBox/VMM/PATM/VMMAll/CSAMAll.cpp
r13822 r13827 138 138 } 139 139 #ifdef IN_GC 140 pVM->csam.s.pPDHCBitmapGC[pgdir] = MMHyper GC2HC(pVM, (RCPTRTYPE(void*))pVM->csam.s.pPDBitmapGC[pgdir]);140 pVM->csam.s.pPDHCBitmapGC[pgdir] = MMHyperRCToR3(pVM, (RCPTRTYPE(void*))pVM->csam.s.pPDBitmapGC[pgdir]); 141 141 if (!pVM->csam.s.pPDHCBitmapGC[pgdir]) 142 142 { … … 145 145 } 146 146 #else 147 pVM->csam.s.pPDGCBitmapHC[pgdir] = MMHyper HC2GC(pVM, pVM->csam.s.pPDBitmapHC[pgdir]);147 pVM->csam.s.pPDGCBitmapHC[pgdir] = MMHyperR3ToRC(pVM, pVM->csam.s.pPDBitmapHC[pgdir]); 148 148 if (!pVM->csam.s.pPDGCBitmapHC[pgdir]) 149 149 { trunk/src/VBox/VMM/PATM/VMMGC/PATMGC.cpp
r13822 r13827 128 128 STAM_COUNTER_INC(&pVM->patm.s.StatPatchWriteInterpretedFailed); 129 129 } 130 R3PTRTYPE(PPATCHINFO) *paPatch = (R3PTRTYPE(PPATCHINFO) *)MMHyper HC2GC(pVM, pPatchPage->aPatch);130 R3PTRTYPE(PPATCHINFO) *paPatch = (R3PTRTYPE(PPATCHINFO) *)MMHyperR3ToRC(pVM, pPatchPage->aPatch); 131 131 132 132 /* Increase the invalid write counter for each patch that's registered for that page. */ 133 133 for (uint32_t i=0;i<pPatchPage->cCount;i++) 134 134 { 135 PPATCHINFO pPatch = (PPATCHINFO)MMHyper HC2GC(pVM, paPatch[i]);135 PPATCHINFO pPatch = (PPATCHINFO)MMHyperR3ToRC(pVM, paPatch[i]); 136 136 137 137 pPatch->cInvalidWrites++; trunk/src/VBox/VMM/SELM.cpp
r13824 r13827 268 268 { 269 269 PX86DESC paGdt = pVM->selm.s.paGdtR3; 270 rc = PGMMapSetPage(pVM, MMHyper HC2GC(pVM, &paGdt[pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS_TRAP08] >> 3]), sizeof(paGdt[0]),270 rc = PGMMapSetPage(pVM, MMHyperR3ToRC(pVM, &paGdt[pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS_TRAP08] >> 3]), sizeof(paGdt[0]), 271 271 X86_PTE_RW | X86_PTE_P | X86_PTE_A | X86_PTE_D); 272 272 AssertRC(rc); 273 rc = PGMMapSetPage(pVM, MMHyper HC2GC(pVM, &paGdt[pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS] >> 3]), sizeof(paGdt[0]),273 rc = PGMMapSetPage(pVM, MMHyperR3ToRC(pVM, &paGdt[pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS] >> 3]), sizeof(paGdt[0]), 274 274 X86_PTE_RW | X86_PTE_P | X86_PTE_A | X86_PTE_D); 275 275 AssertRC(rc); 276 rc = PGMMapSetPage(pVM, VM_ GUEST_ADDR(pVM, &pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS]), sizeof(pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS]),276 rc = PGMMapSetPage(pVM, VM_RC_ADDR(pVM, &pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS]), sizeof(pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS]), 277 277 X86_PTE_RW | X86_PTE_P | X86_PTE_A | X86_PTE_D); 278 278 AssertRC(rc); 279 rc = PGMMapSetPage(pVM, VM_ GUEST_ADDR(pVM, &pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS_TRAP08]), sizeof(pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS_TRAP08]),279 rc = PGMMapSetPage(pVM, VM_RC_ADDR(pVM, &pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS_TRAP08]), sizeof(pVM->selm.s.aHyperSel[SELM_HYPER_SEL_TSS_TRAP08]), 280 280 X86_PTE_RW | X86_PTE_P | X86_PTE_A | X86_PTE_D); 281 281 AssertRC(rc); … … 399 399 * Update GDTR and selector. 400 400 */ 401 CPUMSetHyperGDTR(pVM, MMHyper HC2GC(pVM, paGdt), SELM_GDT_ELEMENTS * sizeof(paGdt[0]) - 1);401 CPUMSetHyperGDTR(pVM, MMHyperR3ToRC(pVM, paGdt), SELM_GDT_ELEMENTS * sizeof(paGdt[0]) - 1); 402 402 403 403 /** @todo selector relocations should be a seperate operation? */ trunk/src/VBox/VMM/testcase/tstMicro.cpp
r13823 r13827 161 161 * Find the GDT - This is a HACK :-) 162 162 */ 163 RT GCPTR GCPtr = CPUMGetHyperGDTR(pVM, NULL);164 PX86DESC paGDTEs = (PX86DESC)MMHyper GC2HC(pVM, GCPtr);163 RTRCPTR RCPtr = CPUMGetHyperGDTR(pVM, NULL); 164 PX86DESC paGDTEs = (PX86DESC)MMHyperRCToR3(pVM, RCPtr); 165 165 166 166 for (unsigned i = 0; i <= 3; i++)

