Changeset 100360 in vbox for trunk/src/VBox/Additions/common/VBoxGuest/lib/testcase
- Timestamp:
- Jul 4, 2023 7:09:24 AM (22 months ago)
- svn:sync-xref-src-repo-rev:
- 158090
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/common/VBoxGuest/lib/testcase/tstVbglR0PhysHeap-1.cpp
r100270 r100360 53 53 #define IN_TESTCASE 54 54 #define IN_RING0 /* pretend we're in ring-0 so we get access to the functions */ 55 #include <iprt/memobj.h> 55 56 #include "../VBoxGuestR0LibInternal.h" 56 57 … … 66 67 67 68 69 typedef struct TSTMEMOBJ 70 { 71 size_t cb; 72 } TSTMEMOBJ; 73 typedef TSTMEMOBJ *PTSTMEMOBJ; 74 75 68 76 /********************************************************************************************************************************* 69 77 * Global Variables * … … 75 83 76 84 /** Drop-in replacement for RTMemContAlloc */ 77 static void *tstMemContAlloc(PRTCCPHYS pPhys, size_t cb) 78 { 85 static int tstMemObjContAllocTag(PRTR0MEMOBJ pMemObj, size_t cb, RTHCPHYS PhysHighest, bool fExecutable, const char *pszTag) 86 { 87 RT_NOREF(pszTag, PhysHighest, fExecutable); 88 79 89 RTTESTI_CHECK(cb > 0); 80 90 … … 82 92 if (g_cChunks < TST_MAX_CHUNKS) 83 93 { 84 void *pvRet = RTMemAlloc(cb); 85 if (pvRet) 86 { 94 PTSTMEMOBJ pMem = (PTSTMEMOBJ)RTMemAlloc(sizeof(TSTMEMOBJ) + cb); 95 if (pMem) 96 { 97 pMem->cb = cb; 98 87 99 g_cChunks++; 88 100 g_cbChunks += cb; 89 *pPhys = (uint32_t)(uintptr_t)pvRet ^ (UINT32_C(0xf0f0f0f0) & ~(uint32_t)PAGE_OFFSET_MASK); 90 91 /* Avoid problematic values that won't happen in real life: */ 92 if (!*pPhys) 93 *pPhys = 4U << PAGE_SHIFT; 94 if (UINT32_MAX - *pPhys < cb) 95 *pPhys -= RT_ALIGN_32(cb, PAGE_SIZE); 96 97 return pvRet; 98 } 99 } 100 101 *pPhys = NIL_RTCCPHYS; 102 return NULL; 103 } 104 105 106 /** Drop-in replacement for RTMemContFree */ 107 static void tstMemContFree(void *pv, size_t cb) 108 { 109 RTTESTI_CHECK(RT_VALID_PTR(pv)); 110 RTTESTI_CHECK(cb > 0); 101 *pMemObj = (RTR0MEMOBJ)pMem; 102 return VINF_SUCCESS; 103 } 104 } 105 106 return VERR_NO_MEMORY; 107 } 108 109 110 /** Drop-in replacement for RTR0MemObjAddress */ 111 static void *tstMemObjAddress(RTR0MEMOBJ hMemObj) 112 { 113 return (void *)((PTSTMEMOBJ)hMemObj + 1); 114 } 115 116 117 /** Drop-in replacement for RTR0MemObjGetPagePhysAddr */ 118 static RTHCPHYS tstMemObjGetPagePhysAddr(RTR0MEMOBJ hMemObj, uint32_t iPage) 119 { 120 RTTESTI_CHECK(iPage == 0); 121 122 PTSTMEMOBJ pMemObj = (PTSTMEMOBJ)hMemObj; 123 uintptr_t PtrMem = (uintptr_t)(pMemObj + 1); 124 RTHCPHYS Phys = (uint32_t)(uintptr_t)PtrMem ^ (UINT32_C(0xf0f0f0f0) & ~(uint32_t)PAGE_OFFSET_MASK); 125 126 /* Avoid problematic values that won't happen in real life: */ 127 if (!Phys) 128 Phys = 4U << PAGE_SHIFT; 129 if (UINT32_MAX - Phys < pMemObj->cb) 130 Phys -= RT_ALIGN_32(pMemObj->cb, PAGE_SIZE); 131 132 return Phys; 133 } 134 135 136 /** Drop-in replacement for RTR0MemObjFree */ 137 static void tstMemObjFree(RTR0MEMOBJ hMemObj, bool fFreeMappings) 138 { 139 RT_NOREF(fFreeMappings); 140 141 PTSTMEMOBJ pMemObj = (PTSTMEMOBJ)hMemObj; 142 RTTESTI_CHECK(RT_VALID_PTR(pMemObj)); 143 RTTESTI_CHECK(pMemObj->cb > 0); 111 144 RTTESTI_CHECK(g_cChunks > 0); 112 RTMemFree(pv);113 145 g_cChunks--; 114 g_cbChunks -= cb; 115 } 116 117 118 #define RTMemContAlloc tstMemContAlloc 119 #define RTMemContFree tstMemContFree 146 g_cbChunks -= pMemObj->cb; 147 RTMemFree(pMemObj); 148 } 149 150 151 #define RTR0MemObjAllocContTag tstMemObjContAllocTag 152 #define RTR0MemObjAddress tstMemObjAddress 153 #define RTR0MemObjGetPagePhysAddr tstMemObjGetPagePhysAddr 154 #define RTR0MemObjFree tstMemObjFree 120 155 #include "../VBoxGuestR0LibPhysHeap.cpp" 121 156 … … 178 213 */ 179 214 RTTestSub(hTest, "Basics"); 180 RTTESTI_CHECK_RC(rc = VbglR0PhysHeapInit( true /*fAlloc32BitAddr*/), VINF_SUCCESS);215 RTTESTI_CHECK_RC(rc = VbglR0PhysHeapInit(NIL_RTHCPHYS), VINF_SUCCESS); 181 216 if (RT_FAILURE(rc)) 182 217 return RTTestSummaryAndDestroy(hTest); … … 288 323 */ 289 324 RTTestSub(hTest, "Random Test"); 290 RTTESTI_CHECK_RC(rc = VbglR0PhysHeapInit( true /*fAlloc32BitAddr*/), VINF_SUCCESS);325 RTTESTI_CHECK_RC(rc = VbglR0PhysHeapInit(NIL_RTHCPHYS), VINF_SUCCESS); 291 326 if (RT_FAILURE(rc)) 292 327 return RTTestSummaryAndDestroy(hTest);
Note:
See TracChangeset
for help on using the changeset viewer.