Changeset 33269 in vbox
- Timestamp:
- Oct 20, 2010 3:42:28 PM (14 years ago)
- svn:sync-xref-src-repo-rev:
- 66829
- Location:
- trunk
- Files:
-
- 3 added
- 28 edited
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/Config.kmk
r33143 r33269 4008 4008 TEMPLATE_VBOXGUESTR3XORGMOD_LIBS.$(KBUILD_TARGET) = $(NO_SUCH_VARIABLE) 4009 4009 TEMPLATE_VBOXGUESTR3XORGMOD_CFLAGS = $(TEMPLATE_VBOXGUESTR3DLL_CFLAGS) -std=c99 4010 TEMPLATE_VBOXGUESTR3XORGMOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) LOG_TO_BACKDOOR VBOX_GUESTR3XORGMOD 4010 TEMPLATE_VBOXGUESTR3XORGMOD_DEFS = $(TEMPLATE_VBOXGUESTR3DLL_DEFS) LOG_TO_BACKDOOR VBOX_GUESTR3XORGMOD RTMEM_NO_WRAP_TO_EF_APIS 4011 4011 ifeq ($(KBUILD_TARGET_ARCH),amd64) 4012 4012 TEMPLATE_VBOXGUESTR3XORGMOD_DEFS += _XSERVER64 -
trunk/include/iprt/critsect.h
r31155 r33269 100 100 /** Disables lock validation. */ 101 101 #define RTCRITSECT_FLAGS_NO_LOCK_VAL UINT32_C(0x00000002) 102 /** Bootstrap hack for use with certain memory allocator locks only! */ 103 #define RTCRITSECT_FLAGS_BOOTSTRAP_HACK UINT32_C(0x00000004) 102 104 /** @} */ 103 105 -
trunk/include/iprt/mem.h
r32707 r33269 380 380 * 381 381 * @param pv Pointer to memory block. 382 */ 383 RTDECL(void) RTMemExecFree(void *pv) RT_NO_THROW; 382 * @param cb The allocation size. 383 */ 384 RTDECL(void) RTMemExecFree(void *pv, size_t cb) RT_NO_THROW; 384 385 385 386 #if defined(IN_RING0) && defined(RT_ARCH_AMD64) && defined(RT_OS_LINUX) -
trunk/include/iprt/semaphore.h
r33155 r33269 137 137 /** Disables lock validation. */ 138 138 #define RTSEMEVENT_FLAGS_NO_LOCK_VAL UINT32_C(0x00000001) 139 /** Bootstrap hack for use with certain memory allocator locks only! */ 140 #define RTSEMEVENT_FLAGS_BOOTSTRAP_HACK UINT32_C(0x00000004) 139 141 /** @} */ 140 142 -
trunk/src/VBox/Devices/Network/SrvIntNetR0.cpp
r31323 r33269 5178 5178 if (!((pCur->fFlags ^ fFlags) & INTNET_OPEN_FLAGS_COMPATIBILITY_XOR_MASK)) 5179 5179 { 5180 5181 5180 /* 5182 5181 * Increment the reference and check that the session -
trunk/src/VBox/HostDrivers/Support/SUPDrv.c
r33167 r33269 4542 4542 pImage->pNext = 0; 4543 4543 pImage->uState = SUP_IOCTL_LDR_FREE; 4544 RTMemExecFree(pImage->pvImageAlloc );4544 RTMemExecFree(pImage->pvImageAlloc, pImage->cbImageBits + 31); 4545 4545 pImage->pvImageAlloc = NULL; 4546 4546 RTMemFree(pImage->pachStrTab); -
trunk/src/VBox/Runtime/Makefile.kmk
r33246 r33269 352 352 common/table/avlroioport.cpp \ 353 353 common/table/avlroogcptr.cpp \ 354 common/table/avlrpv.cpp \ 354 355 common/table/avlruintptr.cpp \ 355 356 common/table/avlrfoff.cpp \ … … 523 524 r3/linux/RTSystemQueryDmiString-linux.cpp \ 524 525 r3/posix/RTFileQueryFsSizes-posix.cpp \ 526 r3/posix/RTMemProtect-posix.cpp \ 525 527 r3/posix/RTSystemQueryOSInfo-posix.cpp \ 526 r3/posix/alloc-posix.cpp \ 528 r3/posix/RTTimeNow-posix.cpp \ 529 r3/posix/RTTimeSet-posix.cpp \ 530 r3/posix/rtmempage-exec-mmap-heap-posix.cpp \ 527 531 r3/posix/dir-posix.cpp \ 528 532 r3/posix/env-posix.cpp \ … … 537 541 r3/posix/process-posix.cpp \ 538 542 r3/posix/rand-posix.cpp \ 539 r3/posix/RTTimeNow-posix.cpp \540 r3/posix/RTTimeSet-posix.cpp \541 543 r3/posix/semrw-posix.cpp \ 542 544 r3/posix/thread-posix.cpp \ … … 603 605 r3/os2/time-os2.cpp \ 604 606 r3/posix/RTFileQueryFsSizes-posix.cpp \ 607 r3/posix/RTMemProtect-posix.cpp \ 605 608 r3/posix/RTSystemQueryOSInfo-posix.cpp \ 606 r3/posix/alloc-posix.cpp \ 609 r3/posix/RTTimeNow-posix.cpp \ 610 r3/posix/RTTimeSet-posix.cpp \ 611 r3/posix/rtmempage-exec-mmap-heap-posix.cpp \ 607 612 r3/posix/dir-posix.cpp \ 608 613 r3/posix/env-posix.cpp \ … … 613 618 r3/posix/pathhost-posix.cpp \ 614 619 r3/posix/process-posix.cpp \ 615 r3/posix/RTTimeNow-posix.cpp \616 r3/posix/RTTimeSet-posix.cpp \617 620 r3/posix/timelocal-posix.cpp \ 618 621 r3/posix/utf8-posix.cpp … … 829 832 l4/utf8-l4env.cpp \ 830 833 r3/posix/RTFileQueryFsSizes-posix.cpp \ 831 r3/posix/alloc-posix.cpp \ 834 r3/posix/RTMemProtect-posix.cpp \ 835 r3/posix/rtmempage-exec-mmap-heap-posix.cpp \ 832 836 r3/posix/dir-posix.cpp \ 833 837 r3/posix/env-posix.cpp \ … … 949 953 common/string/utf-16.cpp \ 950 954 common/table/avlpv.cpp \ 955 generic/critsect-generic.cpp \ 951 956 generic/pathhost-generic.cpp \ 952 957 generic/RTAssertShouldPanic-generic.cpp \ … … 956 961 r3/fs.cpp 957 962 RuntimeGuestR3Mini_SOURCES.freebsd = \ 958 r3/posix/alloc-posix.cpp \ 963 r3/posix/RTMemProtect-posix.cpp \ 964 r3/posix/rtmempage-exec-mmap-posix.cpp \ 959 965 r3/posix/env-posix.cpp \ 960 966 r3/posix/fileio-posix.cpp \ … … 962 968 r3/posix/utf8-posix.cpp 963 969 RuntimeGuestR3Mini_SOURCES.linux = \ 964 r3/posix/alloc-posix.cpp \ 970 r3/posix/RTMemProtect-posix.cpp \ 971 r3/posix/rtmempage-exec-mmap-posix.cpp \ 965 972 r3/posix/env-posix.cpp \ 966 973 r3/posix/fileio-posix.cpp \ … … 968 975 r3/posix/utf8-posix.cpp 969 976 RuntimeGuestR3Mini_SOURCES.solaris = \ 970 r3/posix/alloc-posix.cpp \ 977 r3/posix/RTMemProtect-posix.cpp \ 978 r3/posix/rtmempage-exec-mmap-posix.cpp \ 971 979 r3/posix/env-posix.cpp \ 972 980 r3/posix/fileio-posix.cpp \ -
trunk/src/VBox/Runtime/common/log/log.cpp
r32355 r33269 430 430 RTMemFree(*(void **)&pLogger->pfnLogger); 431 431 #else 432 RTMemExecFree(*(void **)&pLogger->pfnLogger );432 RTMemExecFree(*(void **)&pLogger->pfnLogger, 64); 433 433 #endif 434 434 } … … 579 579 RTMemFree(*(void **)&pLogger->pfnLogger); 580 580 #else 581 RTMemExecFree(*(void **)&pLogger->pfnLogger );581 RTMemExecFree(*(void **)&pLogger->pfnLogger, 64); 582 582 #endif 583 583 pLogger->pfnLogger = NULL; -
trunk/src/VBox/Runtime/common/misc/lockvalidator.cpp
r30112 r33269 3059 3059 { 3060 3060 PRTLOCKVALRECUNION pRecU = (PRTLOCKVALRECUNION)pRec; 3061 if (!pRecU) 3062 return; 3061 3063 AssertReturnVoid(pRecU->Core.u32Magic == RTLOCKVALRECEXCL_MAGIC); 3062 3064 if (!pRecU->Excl.fEnabled) … … 3119 3121 { 3120 3122 PRTLOCKVALRECUNION pRecU = (PRTLOCKVALRECUNION)pRec; 3123 if (!pRecU) 3124 return VINF_SUCCESS; 3121 3125 AssertReturn(pRecU->Core.u32Magic == RTLOCKVALRECEXCL_MAGIC, VERR_SEM_LV_INVALID_PARAMETER); 3122 3126 if (!pRecU->Excl.fEnabled) … … 3156 3160 { 3157 3161 PRTLOCKVALRECUNION pRecU = (PRTLOCKVALRECUNION)pRec; 3162 if (!pRecU) 3163 return VINF_SUCCESS; 3158 3164 AssertReturn(pRecU->Core.u32Magic == RTLOCKVALRECEXCL_MAGIC, VERR_SEM_LV_INVALID_PARAMETER); 3159 3165 if (!pRecU->Excl.fEnabled) … … 3284 3290 */ 3285 3291 PRTLOCKVALRECUNION pRecU = (PRTLOCKVALRECUNION)pRec; 3292 if (!pRecU) 3293 return VINF_SUCCESS; 3286 3294 AssertReturn(pRecU->Core.u32Magic == RTLOCKVALRECEXCL_MAGIC, VERR_SEM_LV_INVALID_PARAMETER); 3287 3295 if ( !pRecU->Excl.fEnabled … … 3317 3325 */ 3318 3326 PRTLOCKVALRECUNION pRecU = (PRTLOCKVALRECUNION)pRec; 3327 if (!pRecU) 3328 return VINF_SUCCESS; 3319 3329 AssertPtrReturn(pRecU, VERR_SEM_LV_INVALID_PARAMETER); 3320 3330 AssertReturn(pRecU->Core.u32Magic == RTLOCKVALRECEXCL_MAGIC, VERR_SEM_LV_INVALID_PARAMETER); -
trunk/src/VBox/Runtime/generic/critsect-generic.cpp
r28800 r33269 52 52 const char *pszNameFmt, ...) 53 53 { 54 AssertReturn(fFlags <= (RTCRITSECT_FLAGS_NO_NESTING | RTCRITSECT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); 54 AssertReturn(!(fFlags & ~(RTCRITSECT_FLAGS_NO_NESTING | RTCRITSECT_FLAGS_NO_LOCK_VAL | RTCRITSECT_FLAGS_BOOTSTRAP_HACK)), 55 VERR_INVALID_PARAMETER); 55 56 56 57 /* … … 65 66 int rc = VINF_SUCCESS; 66 67 #ifdef RTCRITSECT_STRICT 67 if (!pszNameFmt) 68 { 69 static uint32_t volatile s_iCritSectAnon = 0; 70 rc = RTLockValidatorRecExclCreate(&pCritSect->pValidatorRec, hClass, uSubClass, pCritSect, 71 !(fFlags & RTCRITSECT_FLAGS_NO_LOCK_VAL), 72 "RTCritSect-%u", ASMAtomicIncU32(&s_iCritSectAnon) - 1); 73 } 74 else 75 { 76 va_list va; 77 va_start(va, pszNameFmt); 78 rc = RTLockValidatorRecExclCreateV(&pCritSect->pValidatorRec, hClass, uSubClass, pCritSect, 79 !(fFlags & RTCRITSECT_FLAGS_NO_LOCK_VAL), pszNameFmt, va); 80 va_end(va); 68 if (!(fFlags & RTCRITSECT_FLAGS_BOOTSTRAP_HACK)) 69 { 70 if (!pszNameFmt) 71 { 72 static uint32_t volatile s_iCritSectAnon = 0; 73 rc = RTLockValidatorRecExclCreate(&pCritSect->pValidatorRec, hClass, uSubClass, pCritSect, 74 !(fFlags & RTCRITSECT_FLAGS_NO_LOCK_VAL), 75 "RTCritSect-%u", ASMAtomicIncU32(&s_iCritSectAnon) - 1); 76 } 77 else 78 { 79 va_list va; 80 va_start(va, pszNameFmt); 81 rc = RTLockValidatorRecExclCreateV(&pCritSect->pValidatorRec, hClass, uSubClass, pCritSect, 82 !(fFlags & RTCRITSECT_FLAGS_NO_LOCK_VAL), pszNameFmt, va); 83 va_end(va); 84 } 81 85 } 82 86 #endif 83 87 if (RT_SUCCESS(rc)) 84 88 { 85 rc = RTSemEventCreate(&pCritSect->EventSem); 89 rc = RTSemEventCreateEx(&pCritSect->EventSem, 90 fFlags & RTCRITSECT_FLAGS_BOOTSTRAP_HACK 91 ? RTSEMEVENT_FLAGS_NO_LOCK_VAL | RTSEMEVENT_FLAGS_BOOTSTRAP_HACK 92 : RTSEMEVENT_FLAGS_NO_LOCK_VAL, 93 NIL_RTLOCKVALCLASS, 94 NULL); 86 95 if (RT_SUCCESS(rc)) 87 96 return VINF_SUCCESS; … … 187 196 188 197 #ifdef RTCRITSECT_STRICT 189 RTTHREAD hThreadSelf = RTThreadSelfAutoAdopt(); 190 int rc9 = RTLockValidatorRecExclCheckOrder(pCritSect->pValidatorRec, hThreadSelf, pSrcPos, RT_INDEFINITE_WAIT); 191 if (RT_FAILURE(rc9)) 192 return rc9; 198 RTTHREAD hThreadSelf = pCritSect->pValidatorRec 199 ? RTThreadSelfAutoAdopt() 200 : RTThreadSelf(); 201 int rc9; 202 if (pCritSect->pValidatorRec) /* (bootstap) */ 203 { 204 rc9 = RTLockValidatorRecExclCheckOrder(pCritSect->pValidatorRec, hThreadSelf, pSrcPos, RT_INDEFINITE_WAIT); 205 if (RT_FAILURE(rc9)) 206 return rc9; 207 } 193 208 #endif 194 209 -
trunk/src/VBox/Runtime/r0drv/alloc-r0drv.cpp
r32713 r33269 303 303 304 304 305 RTDECL(void) RTMemExecFree(void *pv ) RT_NO_THROW305 RTDECL(void) RTMemExecFree(void *pv, size_t cb) RT_NO_THROW 306 306 { 307 307 PRTMEMHDR pHdr; -
trunk/src/VBox/Runtime/r0drv/darwin/semevent-r0drv-darwin.cpp
r33158 r33269 96 96 { 97 97 AssertCompile(sizeof(RTSEMEVENTINTERNAL) > sizeof(void *)); 98 AssertReturn(!(fFlags & ~RTSEMEVENT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); 98 AssertReturn(!(fFlags & ~(RTSEMEVENT_FLAGS_NO_LOCK_VAL | RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)), VERR_INVALID_PARAMETER); 99 Assert(!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) || (fFlags & RTSEMEVENT_FLAGS_NO_LOCK_VAL)); 99 100 AssertPtrReturn(phEventSem, VERR_INVALID_POINTER); 100 101 RT_ASSERT_PREEMPTIBLE(); -
trunk/src/VBox/Runtime/r0drv/freebsd/semevent-r0drv-freebsd.c
r33155 r33269 74 74 { 75 75 AssertCompile(sizeof(RTSEMEVENTINTERNAL) > sizeof(void *)); 76 AssertReturn(!(fFlags & ~RTSEMEVENT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); 76 AssertReturn(!(fFlags & ~(RTSEMEVENT_FLAGS_NO_LOCK_VAL | RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)), VERR_INVALID_PARAMETER); 77 Assert(!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) || (fFlags & RTSEMEVENT_FLAGS_NO_LOCK_VAL)); 77 78 AssertPtrReturn(phEventSem, VERR_INVALID_POINTER); 78 79 -
trunk/src/VBox/Runtime/r0drv/linux/semevent-r0drv-linux.c
r33155 r33269 73 73 PRTSEMEVENTINTERNAL pThis; 74 74 75 AssertReturn(!(fFlags & ~RTSEMEVENT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); 75 AssertReturn(!(fFlags & ~(RTSEMEVENT_FLAGS_NO_LOCK_VAL | RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)), VERR_INVALID_PARAMETER); 76 Assert(!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) || (fFlags & RTSEMEVENT_FLAGS_NO_LOCK_VAL)); 77 76 78 pThis = (PRTSEMEVENTINTERNAL)RTMemAlloc(sizeof(*pThis)); 77 79 if (!pThis) -
trunk/src/VBox/Runtime/r0drv/nt/semevent-r0drv-nt.cpp
r33158 r33269 68 68 RTDECL(int) RTSemEventCreateEx(PRTSEMEVENT phEventSem, uint32_t fFlags, RTLOCKVALCLASS hClass, const char *pszNameFmt, ...) 69 69 { 70 AssertReturn(!(fFlags & ~RTSEMEVENT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); 70 AssertReturn(!(fFlags & ~(RTSEMEVENT_FLAGS_NO_LOCK_VAL | RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)), VERR_INVALID_PARAMETER); 71 Assert(!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) || (fFlags & RTSEMEVENT_FLAGS_NO_LOCK_VAL)); 71 72 AssertCompile(sizeof(RTSEMEVENTINTERNAL) > sizeof(void *)); 72 73 -
trunk/src/VBox/Runtime/r0drv/os2/semevent-r0drv-os2.cpp
r33155 r33269 73 73 RTDECL(int) RTSemEventCreateEx(PRTSEMEVENT phEventSem, uint32_t fFlags, RTLOCKVALCLASS hClass, const char *pszNameFmt, ...) 74 74 { 75 AssertReturn(!(fFlags & ~RTSEMEVENT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); 75 AssertReturn(!(fFlags & ~(RTSEMEVENT_FLAGS_NO_LOCK_VAL | RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)), VERR_INVALID_PARAMETER); 76 Assert(!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) || (fFlags & RTSEMEVENT_FLAGS_NO_LOCK_VAL)); 76 77 AssertCompile(sizeof(RTSEMEVENTINTERNAL) > sizeof(void *)); 77 78 AssertPtrReturn(phEventSem, VERR_INVALID_POINTER); -
trunk/src/VBox/Runtime/r0drv/solaris/semevent-r0drv-solaris.c
r33155 r33269 101 101 { 102 102 AssertCompile(sizeof(RTSEMEVENTINTERNAL) > sizeof(void *)); 103 AssertReturn(!(fFlags & ~RTSEMEVENT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); 103 AssertReturn(!(fFlags & ~(RTSEMEVENT_FLAGS_NO_LOCK_VAL | RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)), VERR_INVALID_PARAMETER); 104 Assert(!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) || (fFlags & RTSEMEVENT_FLAGS_NO_LOCK_VAL)); 104 105 AssertPtrReturn(phEventSem, VERR_INVALID_POINTER); 105 106 RT_ASSERT_PREEMPTIBLE(); -
trunk/src/VBox/Runtime/r3/alloc.cpp
r32125 r33269 39 39 *******************************************************************************/ 40 40 #include "alloc-ef.h" 41 #include <iprt/alloc.h> 41 #include <iprt/mem.h> 42 42 43 #include <iprt/asm.h> 43 44 #include <iprt/assert.h> … … 47 48 #include <iprt/param.h> 48 49 #include <iprt/string.h> 50 #include "internal/mem.h" 49 51 50 52 #include <stdlib.h> … … 218 220 } 219 221 222 223 224 DECLHIDDEN(void *) rtMemBaseAlloc(size_t cb) 225 { 226 Assert(cb > 0 && cb < _1M); 227 return malloc(cb); 228 } 229 230 231 DECLHIDDEN(void) rtMemBaseFree(void *pv) 232 { 233 free(pv); 234 } 235 -
trunk/src/VBox/Runtime/r3/darwin/alloc-darwin.cpp
r31158 r33269 67 67 68 68 69 RTDECL(void) RTMemExecFree(void *pv ) RT_NO_THROW69 RTDECL(void) RTMemExecFree(void *pv, size_t cb) RT_NO_THROW 70 70 { 71 71 if (pv) -
trunk/src/VBox/Runtime/r3/freebsd/alloc-freebsd.cpp
r31158 r33269 66 66 67 67 68 RTDECL(void) RTMemExecFree(void *pv ) RT_NO_THROW68 RTDECL(void) RTMemExecFree(void *pv, size_t cb) RT_NO_THROW 69 69 { 70 70 if (pv) -
trunk/src/VBox/Runtime/r3/linux/semevent-linux.cpp
r28800 r33269 55 55 #include <iprt/time.h> 56 56 #include "internal/magics.h" 57 #include "internal/mem.h" 57 58 #include "internal/strict.h" 58 59 … … 93 94 bool volatile fEverHadSignallers; 94 95 #endif 96 /** The creation flags. */ 97 uint32_t fFlags; 95 98 }; 96 99 … … 121 124 RTDECL(int) RTSemEventCreateEx(PRTSEMEVENT phEventSem, uint32_t fFlags, RTLOCKVALCLASS hClass, const char *pszNameFmt, ...) 122 125 { 123 AssertReturn(!(fFlags & ~RTSEMEVENT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); 126 AssertReturn(!(fFlags & ~(RTSEMEVENT_FLAGS_NO_LOCK_VAL | RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)), VERR_INVALID_PARAMETER); 127 Assert(!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) || (fFlags & RTSEMEVENT_FLAGS_NO_LOCK_VAL)); 124 128 125 129 /* 126 130 * Allocate semaphore handle. 127 131 */ 128 struct RTSEMEVENTINTERNAL *pThis = (struct RTSEMEVENTINTERNAL *)RTMemAlloc(sizeof(struct RTSEMEVENTINTERNAL)); 132 struct RTSEMEVENTINTERNAL *pThis; 133 if (!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)) 134 pThis = (struct RTSEMEVENTINTERNAL *)RTMemAlloc(sizeof(struct RTSEMEVENTINTERNAL)); 135 else 136 pThis = (struct RTSEMEVENTINTERNAL *)rtMemBaseAlloc(sizeof(struct RTSEMEVENTINTERNAL)); 129 137 if (pThis) 130 138 { … … 132 140 pThis->cWaiters = 0; 133 141 pThis->fSignalled = 0; 142 pThis->fFlags = fFlags; 134 143 #ifdef RTSEMEVENT_STRICT 135 144 if (!pszNameFmt) … … 186 195 RTLockValidatorRecSharedDelete(&pThis->Signallers); 187 196 #endif 188 RTMemFree(pThis); 197 if (!(pThis->fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)) 198 RTMemFree(pThis); 199 else 200 rtMemBaseFree(pThis); 189 201 return VINF_SUCCESS; 190 202 } … … 267 279 */ 268 280 #ifdef RTSEMEVENT_STRICT 269 RTTHREAD hThreadSelf = RTThreadSelfAutoAdopt(); 281 RTTHREAD hThreadSelf = !(pThis->fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) 282 ? RTThreadSelfAutoAdopt() 283 : RTThreadSelf(); 270 284 #else 271 285 RTTHREAD hThreadSelf = RTThreadSelf(); -
trunk/src/VBox/Runtime/r3/os2/sems-os2.cpp
r28800 r33269 52 52 RTDECL(int) RTSemEventCreateEx(PRTSEMEVENT phEventSem, uint32_t fFlags, RTLOCKVALCLASS hClass, const char *pszNameFmt, ...) 53 53 { 54 AssertReturn(!(fFlags & ~RTSEMEVENT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); 54 AssertReturn(!(fFlags & ~(RTSEMEVENT_FLAGS_NO_LOCK_VAL | RTSEMEVENT_FLAGS_BOOTSTRAP_HACK), VERR_INVALID_PARAMETER); 55 Assert(!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) || (fFlags & RTSEMEVENT_FLAGS_NO_LOCK_VAL)); 55 56 56 57 /* -
trunk/src/VBox/Runtime/r3/posix/RTMemProtect-posix.cpp
r33145 r33269 35 35 #include <iprt/string.h> 36 36 37 #include <stdlib.h>38 #ifndef RT_OS_FREEBSD /* Deprecated on FreeBSD */39 # include <malloc.h>40 #endif41 37 #include <errno.h> 42 38 #include <sys/mman.h> 43 44 45 /*******************************************************************************46 * Defined Constants And Macros *47 *******************************************************************************/48 #if !defined(RT_USE_MMAP_EXEC) && (defined(RT_OS_LINUX))49 # define RT_USE_MMAP_EXEC50 #endif51 52 #if !defined(RT_USE_MMAP_PAGE) && 0 /** @todo mmap is too slow for full scale EF setup. */53 # define RT_USE_MMAP_PAGE54 #endif55 56 57 /*******************************************************************************58 * Structures and Typedefs *59 *******************************************************************************/60 #ifdef RT_USE_MMAP_EXEC61 /**62 * RTMemExecAlloc() header used when using mmap for allocating the memory.63 */64 typedef struct RTMEMEXECHDR65 {66 /** Magic number (RTMEMEXECHDR_MAGIC). */67 size_t uMagic;68 /** The size we requested from mmap. */69 size_t cb;70 # if ARCH_BITS == 3271 uint32_t Alignment[2];72 # endif73 } RTMEMEXECHDR, *PRTMEMEXECHDR;74 75 /** Magic for RTMEMEXECHDR. */76 # define RTMEMEXECHDR_MAGIC (~(size_t)0xfeedbabe)77 78 #endif /* RT_USE_MMAP_EXEC */79 80 81 82 RTDECL(void *) RTMemExecAllocTag(size_t cb, const char *pszTag) RT_NO_THROW83 {84 AssertMsg(cb, ("Allocating ZERO bytes is really not a good idea! Good luck with the next assertion!\n"));85 86 #ifdef RT_USE_MMAP_EXEC87 /*88 * Use mmap to get low memory.89 */90 size_t cbAlloc = RT_ALIGN_Z(cb + sizeof(RTMEMEXECHDR), PAGE_SIZE);91 void *pv = mmap(NULL, cbAlloc, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS92 # if defined(RT_ARCH_AMD64) && defined(MAP_32BIT)93 | MAP_32BIT94 # endif95 , -1, 0);96 AssertMsgReturn(pv != MAP_FAILED, ("errno=%d cb=%#zx\n", errno, cb), NULL);97 PRTMEMEXECHDR pHdr = (PRTMEMEXECHDR)pv;98 pHdr->uMagic = RTMEMEXECHDR_MAGIC;99 pHdr->cb = cbAlloc;100 pv = pHdr + 1;101 102 #else103 /*104 * Allocate first.105 */106 cb = RT_ALIGN_Z(cb, 32);107 void *pv = NULL;108 int rc = posix_memalign(&pv, 32, cb);109 AssertMsg(!rc && pv, ("posix_memalign(%zd) failed!!! rc=%d\n", cb, rc));110 if (pv && !rc)111 {112 /*113 * Add PROT_EXEC flag to the page.114 *115 * This is in violation of the SuS where I think it saith that mprotect() shall116 * only be used with mmap()'ed memory. Works on linux and OS/2 LIBC v0.6.117 */118 memset(pv, 0xcc, cb);119 void *pvProt = (void *)((uintptr_t)pv & ~PAGE_OFFSET_MASK);120 size_t cbProt = ((uintptr_t)pv & PAGE_OFFSET_MASK) + cb;121 cbProt = RT_ALIGN_Z(cbProt, PAGE_SIZE);122 rc = mprotect(pvProt, cbProt, PROT_READ | PROT_WRITE | PROT_EXEC);123 if (rc)124 {125 AssertMsgFailed(("mprotect(%p, %#zx,,) -> rc=%d, errno=%d\n", pvProt, cbProt, rc, errno));126 free(pv);127 pv = NULL;128 }129 }130 #endif131 return pv;132 }133 134 135 RTDECL(void) RTMemExecFree(void *pv) RT_NO_THROW136 {137 if (pv)138 {139 #ifdef RT_USE_MMAP_EXEC140 PRTMEMEXECHDR pHdr = (PRTMEMEXECHDR)pv - 1;141 AssertMsgReturnVoid(RT_ALIGN_P(pHdr, PAGE_SIZE) == pHdr, ("pHdr=%p pv=%p\n", pHdr, pv));142 AssertMsgReturnVoid(pHdr->uMagic == RTMEMEXECHDR_MAGIC, ("pHdr=%p(uMagic=%#zx) pv=%p\n", pHdr, pHdr->uMagic, pv));143 int rc = munmap(pHdr, pHdr->cb);144 AssertMsg(!rc, ("munmap -> %d errno=%d\n", rc, errno)); NOREF(rc);145 #else146 free(pv);147 #endif148 }149 }150 151 152 RTDECL(void *) RTMemPageAllocTag(size_t cb, const char *pszTag) RT_NO_THROW153 {154 #ifdef RT_USE_MMAP_PAGE155 size_t cbAligned = RT_ALIGN_Z(cb, PAGE_SIZE);156 void *pv = mmap(NULL, cbAligned, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);157 AssertMsgReturn(pv != MAP_FAILED, ("errno=%d cb=%#zx\n", errno, cb), NULL);158 return pv;159 160 #else161 # if defined(RT_OS_FREEBSD) /** @todo huh? we're using posix_memalign in the next function... */162 void *pv;163 int rc = posix_memalign(&pv, PAGE_SIZE, RT_ALIGN_Z(cb, PAGE_SIZE));164 if (!rc)165 return pv;166 return NULL;167 # else /* !RT_OS_FREEBSD */168 return memalign(PAGE_SIZE, cb);169 # endif170 #endif171 }172 173 174 RTDECL(void *) RTMemPageAllocZTag(size_t cb, const char *pszTag) RT_NO_THROW175 {176 #ifdef RT_USE_MMAP_PAGE177 size_t cbAligned = RT_ALIGN_Z(cb, PAGE_SIZE);178 void *pv = mmap(NULL, cbAligned, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);179 AssertMsgReturn(pv != MAP_FAILED, ("errno=%d cb=%#zx\n", errno, cb), NULL);180 return pv;181 182 #else183 void *pv;184 int rc = posix_memalign(&pv, PAGE_SIZE, RT_ALIGN_Z(cb, PAGE_SIZE));185 if (!rc)186 {187 RT_BZERO(pv, RT_ALIGN_Z(cb, PAGE_SIZE));188 return pv;189 }190 return NULL;191 #endif192 }193 194 195 RTDECL(void) RTMemPageFree(void *pv, size_t cb) RT_NO_THROW196 {197 if (pv)198 {199 Assert(!((uintptr_t)pv & PAGE_OFFSET_MASK));200 201 #ifdef RT_USE_MMAP_PAGE202 size_t cbAligned = RT_ALIGN_Z(cb, PAGE_SIZE);203 int rc = munmap(pv, cbAligned);204 AssertMsg(!rc, ("munmap(%p, %#zx) -> %d errno=%d\n", pv, cbAligned, rc, errno)); NOREF(rc);205 #else206 free(pv);207 #endif208 }209 }210 39 211 40 -
trunk/src/VBox/Runtime/r3/posix/semevent-posix.cpp
r28800 r33269 37 37 #include <iprt/lockvalidator.h> 38 38 39 #include "internal/mem.h" 39 40 #include "internal/strict.h" 40 41 … … 79 80 bool volatile fEverHadSignallers; 80 81 #endif 82 /** The creation flags. */ 83 uint32_t fFlags; 81 84 }; 82 85 … … 100 103 RTDECL(int) RTSemEventCreateEx(PRTSEMEVENT phEventSem, uint32_t fFlags, RTLOCKVALCLASS hClass, const char *pszNameFmt, ...) 101 104 { 102 AssertReturn(!(fFlags & ~RTSEMEVENT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); 105 AssertReturn(!(fFlags & ~(RTSEMEVENT_FLAGS_NO_LOCK_VAL | RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)), VERR_INVALID_PARAMETER); 106 Assert(!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) || (fFlags & RTSEMEVENT_FLAGS_NO_LOCK_VAL)); 103 107 104 108 /* … … 106 110 */ 107 111 int rc; 108 struct RTSEMEVENTINTERNAL *pThis = (struct RTSEMEVENTINTERNAL *)RTMemAlloc(sizeof(struct RTSEMEVENTINTERNAL)); 112 struct RTSEMEVENTINTERNAL *pThis; 113 if (!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)) 114 pThis = (struct RTSEMEVENTINTERNAL *)RTMemAlloc(sizeof(*pThis)); 115 else 116 pThis = (struct RTSEMEVENTINTERNAL *)rtMemBaseAlloc(sizeof(*pThis)); 109 117 if (pThis) 110 118 { … … 132 140 pthread_condattr_destroy(&CondAttr); 133 141 134 ASMAtomicXchgU32(&pThis->u32State, EVENT_STATE_NOT_SIGNALED); 135 ASMAtomicXchgU32(&pThis->cWaiters, 0); 142 ASMAtomicWriteU32(&pThis->u32State, EVENT_STATE_NOT_SIGNALED); 143 ASMAtomicWriteU32(&pThis->cWaiters, 0); 144 pThis->fFlags = fFlags; 136 145 #ifdef RTSEMEVENT_STRICT 137 146 if (!pszNameFmt) … … 166 175 167 176 rc = RTErrConvertFromErrno(rc); 168 RTMemFree(pThis); 177 if (!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)) 178 RTMemFree(pThis); 179 else 180 rtMemBaseFree(pThis); 169 181 } 170 182 else … … 193 205 for (int i = 30; i > 0; i--) 194 206 { 195 ASMAtomic XchgU32(&pThis->u32State, EVENT_STATE_UNINITIALIZED);207 ASMAtomicWriteU32(&pThis->u32State, EVENT_STATE_UNINITIALIZED); 196 208 rc = pthread_cond_destroy(&pThis->Cond); 197 209 if (rc != EBUSY) … … 229 241 RTLockValidatorRecSharedDelete(&pThis->Signallers); 230 242 #endif 231 RTMemFree(pThis); 243 if (!(pThis->fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)) 244 RTMemFree(pThis); 245 else 246 rtMemBaseFree(pThis); 232 247 return VINF_SUCCESS; 233 248 } … … 268 283 if (pThis->u32State == EVENT_STATE_NOT_SIGNALED) 269 284 { 270 ASMAtomic XchgU32(&pThis->u32State, EVENT_STATE_SIGNALED);285 ASMAtomicWriteU32(&pThis->u32State, EVENT_STATE_SIGNALED); 271 286 rc = pthread_cond_signal(&pThis->Cond); 272 287 AssertMsg(!rc, ("Failed to signal event sem %p, rc=%d.\n", hEventSem, rc)); … … 330 345 if (pThis->u32State == EVENT_STATE_SIGNALED) 331 346 { 332 ASMAtomic XchgU32(&pThis->u32State, EVENT_STATE_NOT_SIGNALED);347 ASMAtomicWriteU32(&pThis->u32State, EVENT_STATE_NOT_SIGNALED); 333 348 ASMAtomicDecU32(&pThis->cWaiters); 334 349 rc = pthread_mutex_unlock(&pThis->Mutex); … … 345 360 /* wait */ 346 361 #ifdef RTSEMEVENT_STRICT 347 RTTHREAD hThreadSelf = RTThreadSelfAutoAdopt(); 362 RTTHREAD hThreadSelf = !(pThis->fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) 363 ? RTThreadSelfAutoAdopt() 364 : RTThreadSelf(); 348 365 if (pThis->fEverHadSignallers) 349 366 { … … 416 433 if (pThis->u32State == EVENT_STATE_SIGNALED) 417 434 { 418 ASMAtomic XchgU32(&pThis->u32State, EVENT_STATE_NOT_SIGNALED);435 ASMAtomicWriteU32(&pThis->u32State, EVENT_STATE_NOT_SIGNALED); 419 436 ASMAtomicDecU32(&pThis->cWaiters); 420 437 rc = pthread_mutex_unlock(&pThis->Mutex); … … 439 456 /* wait */ 440 457 #ifdef RTSEMEVENT_STRICT 441 RTTHREAD hThreadSelf = RTThreadSelfAutoAdopt(); 458 RTTHREAD hThreadSelf = !(pThis->fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) 459 ? RTThreadSelfAutoAdopt() 460 : RTThreadSelf(); 442 461 if (pThis->fEverHadSignallers) 443 462 { -
trunk/src/VBox/Runtime/r3/solaris/alloc-solaris.cpp
r31158 r33269 82 82 83 83 84 RTDECL(void) RTMemExecFree(void *pv ) RT_NO_THROW84 RTDECL(void) RTMemExecFree(void *pv, size_t cb) RT_NO_THROW 85 85 { 86 86 if (pv) -
trunk/src/VBox/Runtime/r3/win/alloc-win.cpp
r31158 r33269 76 76 77 77 78 RTDECL(void) RTMemExecFree(void *pv ) RT_NO_THROW78 RTDECL(void) RTMemExecFree(void *pv, size_t cb) RT_NO_THROW 79 79 { 80 80 if (pv) -
trunk/src/VBox/Runtime/r3/win/semevent-win.cpp
r28800 r33269 42 42 #include <iprt/thread.h> 43 43 #include "internal/magics.h" 44 #include "internal/mem.h" 44 45 #include "internal/strict.h" 45 46 … … 60 61 bool volatile fEverHadSignallers; 61 62 #endif 63 /** The creation flags. */ 64 uint32_t fFlags; 62 65 }; 63 66 … … 72 75 RTDECL(int) RTSemEventCreateEx(PRTSEMEVENT phEventSem, uint32_t fFlags, RTLOCKVALCLASS hClass, const char *pszNameFmt, ...) 73 76 { 74 AssertReturn(!(fFlags & ~RTSEMEVENT_FLAGS_NO_LOCK_VAL), VERR_INVALID_PARAMETER); 75 76 struct RTSEMEVENTINTERNAL *pThis = (struct RTSEMEVENTINTERNAL *)RTMemAlloc(sizeof(*pThis)); 77 AssertReturn(!(fFlags & ~(RTSEMEVENT_FLAGS_NO_LOCK_VAL | RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)), VERR_INVALID_PARAMETER); 78 Assert(!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) || (fFlags & RTSEMEVENT_FLAGS_NO_LOCK_VAL)); 79 80 struct RTSEMEVENTINTERNAL *pThis; 81 if (!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)) 82 pThis = (struct RTSEMEVENTINTERNAL *)RTMemAlloc(sizeof(*pThis)); 83 else 84 pThis = (struct RTSEMEVENTINTERNAL *)rtMemBaseAlloc(sizeof(*pThis)); 77 85 if (!pThis) 78 86 return VERR_NO_MEMORY; … … 86 94 { 87 95 pThis->u32Magic = RTSEMEVENT_MAGIC; 96 pThis->fFlags = fFlags; 88 97 #ifdef RTSEMEVENT_STRICT 89 98 if (!pszNameFmt) … … 111 120 112 121 DWORD dwErr = GetLastError(); 113 RTMemFree(pThis); 122 if (!(fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)) 123 RTMemFree(pThis); 124 else 125 rtMemBaseFree(pThis); 114 126 return RTErrConvertFromWin32(dwErr); 115 127 } … … 134 146 RTLockValidatorRecSharedDelete(&pThis->Signallers); 135 147 #endif 136 RTMemFree(pThis); 148 if (!(pThis->fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK)) 149 RTMemFree(pThis); 150 else 151 rtMemBaseFree(pThis); 137 152 } 138 153 else … … 218 233 */ 219 234 #ifdef RTSEMEVENT_STRICT 220 RTTHREAD hThreadSelf = RTThreadSelfAutoAdopt(); 235 RTTHREAD hThreadSelf = !(pThis->fFlags & RTSEMEVENT_FLAGS_BOOTSTRAP_HACK) 236 ? RTThreadSelfAutoAdopt() 237 : RTThreadSelf(); 221 238 if (pThis->fEverHadSignallers) 222 239 { -
trunk/src/VBox/Runtime/testcase/tstLdr-4.cpp
r28800 r33269 99 99 RTLDRMOD hLdrMod; 100 100 void *pvBits; 101 size_t cbBits; 101 102 const char *pszName; 102 103 } aLoads[6] = 103 104 { 104 { NULL, NULL, "foo" },105 { NULL, NULL, "bar" },106 { NULL, NULL, "foobar" },107 { NULL, NULL, "kLdr-foo" },108 { NULL, NULL, "kLdr-bar" },109 { NULL, NULL, "kLdr-foobar" }105 { NULL, NULL, 0, "foo" }, 106 { NULL, NULL, 0, "bar" }, 107 { NULL, NULL, 0, "foobar" }, 108 { NULL, NULL, 0, "kLdr-foo" }, 109 { NULL, NULL, 0, "kLdr-bar" }, 110 { NULL, NULL, 0, "kLdr-foobar" } 110 111 }; 111 112 unsigned i; … … 137 138 break; 138 139 } 139 cbImage = cb;140 aLoads[i].cbBits = cbImage = cb; 140 141 141 142 /* Allocate bits. */ … … 196 197 { 197 198 if (aLoads[i].pvBits) 198 RTMemExecFree(aLoads[i].pvBits );199 RTMemExecFree(aLoads[i].pvBits, aLoads[i].cbBits); 199 200 if (aLoads[i].hLdrMod) 200 201 { -
trunk/src/recompiler/VBoxREMWrapper.cpp
r31636 r33269 339 339 /** Pointer to the memory containing the loaded REM2 object/DLL. */ 340 340 static void *g_pvREM2 = NULL; 341 /** The size of the memory g_pvREM2 is pointing to. */ 342 static size_t g_cbREM2 = 0; 341 343 # ifdef VBOX_WITHOUT_REM_LDR_CYCLE 342 344 /** Loader handle of the VBoxVMM DLL. */ … … 402 404 { REMPARMDESC_FLAGS_INT, sizeof(const char *), NULL } 403 405 }; 406 static const REMPARMDESC g_aArgsPTR_SIZE_T[] = 407 { 408 { REMPARMDESC_FLAGS_INT, sizeof(void *), NULL }, 409 { REMPARMDESC_FLAGS_INT, sizeof(size_t), NULL } 410 }; 404 411 static const REMPARMDESC g_aArgsVM[] = 405 412 { … … 1085 1092 { REMPARMDESC_FLAGS_INT, sizeof(size_t), NULL }, 1086 1093 { REMPARMDESC_FLAGS_INT, sizeof(unsigned), NULL } 1087 };1088 static const REMPARMDESC g_aArgsRTMemPageFree[] =1089 {1090 { REMPARMDESC_FLAGS_INT, sizeof(void *), NULL },1091 { REMPARMDESC_FLAGS_INT, sizeof(size_t), NULL }1092 1094 }; 1093 1095 static const REMPARMDESC g_aArgsRTStrPrintf[] = … … 1320 1322 { "RTMemReallocTag", (void *)(uintptr_t)&RTMemReallocTag, &g_aArgsRTMemReallocTag[0], RT_ELEMENTS(g_aArgsRTMemReallocTag), REMFNDESC_FLAGS_RET_INT, sizeof(void *), NULL }, 1321 1323 { "RTMemExecAllocTag", (void *)(uintptr_t)&RTMemExecAllocTag, &g_aArgsSIZE_TTag[0], RT_ELEMENTS(g_aArgsSIZE_TTag), REMFNDESC_FLAGS_RET_INT, sizeof(void *), NULL }, 1322 { "RTMemExecFree", (void *)(uintptr_t)&RTMemExecFree, &g_aArgsPTR [0], RT_ELEMENTS(g_aArgsPTR),REMFNDESC_FLAGS_RET_VOID, 0, NULL },1324 { "RTMemExecFree", (void *)(uintptr_t)&RTMemExecFree, &g_aArgsPTR_SIZE_T[0], RT_ELEMENTS(g_aArgsPTR_SIZE_T), REMFNDESC_FLAGS_RET_VOID, 0, NULL }, 1323 1325 { "RTMemFree", (void *)(uintptr_t)&RTMemFree, &g_aArgsPTR[0], RT_ELEMENTS(g_aArgsPTR), REMFNDESC_FLAGS_RET_VOID, 0, NULL }, 1324 1326 { "RTMemPageAllocTag", (void *)(uintptr_t)&RTMemPageAllocTag, &g_aArgsSIZE_TTag[0], RT_ELEMENTS(g_aArgsSIZE_TTag), REMFNDESC_FLAGS_RET_INT, sizeof(void *), NULL }, 1325 { "RTMemPageFree", (void *)(uintptr_t)&RTMemPageFree, &g_aArgs RTMemPageFree[0], RT_ELEMENTS(g_aArgsRTMemPageFree),REMFNDESC_FLAGS_RET_VOID, 0, NULL },1327 { "RTMemPageFree", (void *)(uintptr_t)&RTMemPageFree, &g_aArgsPTR_SIZE_T[0], RT_ELEMENTS(g_aArgsPTR_SIZE_T), REMFNDESC_FLAGS_RET_VOID, 0, NULL }, 1326 1328 { "RTMemProtect", (void *)(uintptr_t)&RTMemProtect, &g_aArgsRTMemProtect[0], RT_ELEMENTS(g_aArgsRTMemProtect), REMFNDESC_FLAGS_RET_INT, sizeof(int), NULL }, 1327 1329 { "RTStrPrintf", (void *)(uintptr_t)&RTStrPrintf, &g_aArgsRTStrPrintf[0], RT_ELEMENTS(g_aArgsRTStrPrintf), REMFNDESC_FLAGS_RET_INT | REMFNDESC_FLAGS_ELLIPSIS, sizeof(size_t), NULL }, … … 1998 2000 if (RT_SUCCESS(rc)) 1999 2001 { 2000 g_pvREM2 = RTMemExecAlloc(RTLdrSize(g_ModREM2)); 2002 g_cbREM2 = RTLdrSize(g_ModREM2); 2003 g_pvREM2 = RTMemExecAlloc(g_cbREM); 2001 2004 if (g_pvREM2) 2002 2005 { … … 2028 2031 return rc; 2029 2032 } 2030 RTMemExecFree(g_pvREM2); 2033 2034 RTMemExecFree(g_pvREM2, g_cbREM2); 2035 g_pvREM2 = NULL; 2031 2036 } 2037 g_cbREM2 = 0; 2032 2038 RTLdrClose(g_ModREM2); 2033 2039 g_ModREM2 = NIL_RTLDRMOD; … … 2049 2055 RTLdrClose(g_ModREM2); 2050 2056 g_ModREM2 = NIL_RTLDRMOD; 2051 RTMemExecFree(g_pvREM2 );2057 RTMemExecFree(g_pvREM2, g_cbREM2); 2052 2058 g_pvREM2 = NULL; 2059 g_cbREM2 = 0; 2053 2060 2054 2061 /* clear the pointers. */ … … 2069 2076 g_pExecMemHead = pCur->pNext; 2070 2077 memset(pCur, 0xcc, pCur->cb); 2071 RTMemExecFree(pCur );2078 RTMemExecFree(pCur, pCur->cb); 2072 2079 } 2073 2080 # endif
Note:
See TracChangeset
for help on using the changeset viewer.