@@ -107,31 +107,40 @@ int cpdInSystem=1; /*Start inside the system (until we start executing user code
107107#if CMK_MEMORY_BUILD_OS
108108#if CMK_MEMORY_BUILD_OS_WRAPPED
109109
110- struct mallinfo ;
111-
112110void initialize_memory_wrapper (void );
113- void * initialize_memory_wrapper_calloc (size_t nelem , size_t size );
114- void * initialize_memory_wrapper_malloc (size_t size );
115- void * initialize_memory_wrapper_realloc (void * ptr , size_t size );
116- void * initialize_memory_wrapper_memalign (size_t align , size_t size );
117- int initialize_memory_wrapper_posix_memalign (void * * memptr , size_t align , size_t size );
118- void * initialize_memory_wrapper_aligned_alloc (size_t align , size_t size );
119- void * initialize_memory_wrapper_valloc (size_t size );
120- void * initialize_memory_wrapper_pvalloc (size_t size );
121- void initialize_memory_wrapper_free (void * ptr );
122- void initialize_memory_wrapper_cfree (void * ptr );
123111
112+ void * initialize_memory_wrapper_malloc (size_t size );
124113void * (* mm_impl_malloc )(size_t ) = initialize_memory_wrapper_malloc ;
114+ void * initialize_memory_wrapper_calloc (size_t nelem , size_t size );
125115void * (* mm_impl_calloc )(size_t ,size_t ) = initialize_memory_wrapper_calloc ;
116+ void * initialize_memory_wrapper_realloc (void * ptr , size_t size );
126117void * (* mm_impl_realloc )(void * ,size_t ) = initialize_memory_wrapper_realloc ;
118+ void initialize_memory_wrapper_free (void * ptr );
119+ void (* mm_impl_free )(void * ) = initialize_memory_wrapper_free ;
120+
121+ void * initialize_memory_wrapper_memalign (size_t align , size_t size );
127122void * (* mm_impl_memalign )(size_t ,size_t ) = initialize_memory_wrapper_memalign ;
123+ int initialize_memory_wrapper_posix_memalign (void * * memptr , size_t align , size_t size );
128124int (* mm_impl_posix_memalign )(void * * ,size_t ,size_t ) = initialize_memory_wrapper_posix_memalign ;
125+ void * initialize_memory_wrapper_aligned_alloc (size_t align , size_t size );
129126void * (* mm_impl_aligned_alloc )(size_t ,size_t ) = initialize_memory_wrapper_aligned_alloc ;
127+
128+ #if CMK_HAS_VALLOC
129+ void * initialize_memory_wrapper_valloc (size_t size );
130130void * (* mm_impl_valloc )(size_t ) = initialize_memory_wrapper_valloc ;
131+ #endif
132+ #if CMK_HAS_PVALLOC
133+ void * initialize_memory_wrapper_pvalloc (size_t size );
131134void * (* mm_impl_pvalloc )(size_t ) = initialize_memory_wrapper_pvalloc ;
132- void (* mm_impl_free )(void * ) = initialize_memory_wrapper_free ;
135+ #endif
136+ #if CMK_HAS_CFREE
137+ void initialize_memory_wrapper_cfree (void * ptr );
133138void (* mm_impl_cfree )(void * ) = initialize_memory_wrapper_cfree ;
139+ #endif
140+ #if CMK_HAS_MALLINFO
141+ struct mallinfo ;
134142struct mallinfo (* mm_impl_mallinfo )(void ) = NULL ;
143+ #endif
135144
136145static char fake_malloc_buffer [1024 ];
137146static char * fake_malloc_buffer_pos = fake_malloc_buffer ;
@@ -203,15 +212,19 @@ void * initialize_memory_wrapper_aligned_alloc(size_t align, size_t size) {
203212 return (* mm_impl_aligned_alloc )(align ,size );
204213}
205214
215+ #if CMK_HAS_VALLOC
206216void * initialize_memory_wrapper_valloc (size_t size ) {
207217 initialize_memory_wrapper ();
208218 return (* mm_impl_valloc )(size );
209219}
220+ #endif
210221
222+ #if CMK_HAS_PVALLOC
211223void * initialize_memory_wrapper_pvalloc (size_t size ) {
212224 initialize_memory_wrapper ();
213225 return (* mm_impl_pvalloc )(size );
214226}
227+ #endif
215228
216229void initialize_memory_wrapper_free (void * ptr ) {
217230 if (initialize_memory_wrapper_status )
@@ -220,21 +233,42 @@ void initialize_memory_wrapper_free(void *ptr) {
220233 (* mm_impl_free )(ptr );
221234}
222235
236+ #if CMK_HAS_CFREE
223237void initialize_memory_wrapper_cfree (void * ptr ) {
224238 initialize_memory_wrapper ();
225239 (* mm_impl_cfree )(ptr );
226240}
241+ #endif
227242
228243#define mm_impl_malloc (*mm_impl_malloc)
229244#define mm_impl_free (*mm_impl_free)
230245#define mm_impl_calloc (*mm_impl_calloc)
246+ #if CMK_HAS_CFREE
231247#define mm_impl_cfree (*mm_impl_cfree)
248+ #else
249+ #define mm_impl_cfree (*mm_impl_free)
250+ #endif
232251#define mm_impl_realloc (*mm_impl_realloc)
233252#define mm_impl_memalign (*mm_impl_memalign)
234253#define mm_impl_posix_memalign (*mm_impl_posix_memalign)
235254#define mm_impl_aligned_alloc (*mm_impl_aligned_alloc)
255+ #if CMK_HAS_VALLOC
236256#define mm_impl_valloc (*mm_impl_valloc)
257+ #else
258+ static inline void * mm_impl_valloc (size_t size )
259+ {
260+ return mm_impl_memalign (CmiGetPageSize (), size );
261+ }
262+ #endif
263+ #if CMK_HAS_PVALLOC
237264#define mm_impl_pvalloc (*mm_impl_pvalloc)
265+ #else
266+ static inline void * mm_impl_pvalloc (size_t size )
267+ {
268+ const size_t pagesize = CmiGetPageSize ();
269+ return mm_impl_memalign (pagesize , CMIALIGN (size , pagesize ));
270+ }
271+ #endif
238272#endif /* CMK_MEMORY_BUILD_OS_WRAPPED */
239273#endif /* CMK_MEMORY_BUILD_OS */
240274
@@ -365,14 +399,16 @@ static inline void *mm_impl_calloc(size_t nelem, size_t size)
365399 AFTER_MALLOC_CALL ;
366400 return result ;
367401}
368- #if 0
369402static inline void mm_impl_cfree (void * mem )
370403{
371404 BEFORE_MALLOC_CALL ;
405+ #if CMK_HAS_CFREE
372406 cfree (mem );
407+ #else
408+ free (mem );
409+ #endif
373410 AFTER_MALLOC_CALL ;
374411}
375- #endif
376412static inline void * mm_impl_realloc (void * mem , size_t size )
377413{
378414 void * result ;
@@ -409,24 +445,31 @@ static inline void *mm_impl_aligned_alloc(size_t align, size_t size)
409445 AFTER_MALLOC_CALL ;
410446 return result ;
411447}
412- #if 0
413448static inline void * mm_impl_valloc (size_t size )
414449{
415450 void * result ;
416451 BEFORE_MALLOC_CALL ;
452+ #if CMK_HAS_VALLOC
417453 result = valloc (size );
454+ #else
455+ result = memalign (CmiGetPageSize (), size );
456+ #endif
418457 AFTER_MALLOC_CALL ;
419458 return result ;
420459}
421460static inline void * mm_impl_pvalloc (size_t size )
422461{
423462 void * result ;
424463 BEFORE_MALLOC_CALL ;
464+ #if CMK_HAS_PVALLOC
425465 result = pvalloc (size );
466+ #else
467+ const size_t pagesize = CmiGetPageSize ();
468+ return memalign (pagesize , CMIALIGN (size , pagesize ));
469+ #endif
426470 AFTER_MALLOC_CALL ;
427471 return result ;
428472}
429- #endif
430473
431474#undef BEFORE_MALLOC_CALL
432475#undef AFTER_MALLOC_CALL
@@ -486,19 +529,10 @@ CLINKAGE void *pvalloc(size_t size) CMK_THROW { return meta_pvalloc(size); }
486529
487530#else
488531
532+ // So that this file can call allocators with or without interception:
533+
489534#define mm_impl_malloc malloc
490535#define mm_impl_free free
491- #define mm_impl_calloc calloc
492- #define mm_impl_cfree cfree
493- #define mm_impl_memalign memalign
494- #define mm_impl_posix_memalign posix_memalign
495- #if (defined __cplusplus && __cplusplus >= 201703L ) || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 201112L )
496- #define mm_impl_aligned_alloc aligned_alloc
497- #else
498- #define mm_impl_aligned_alloc memalign
499- #endif
500- #define mm_impl_valloc valloc
501- #define mm_impl_pvalloc pvalloc
502536
503537#endif /* CMK_MEMORY_BUILD_OS_WRAPPED || CMK_MEMORY_BUILD_GNU_HOOKS */
504538
@@ -579,7 +613,7 @@ INLINE static CMK_TYPEDEF_UINT8 MemusageProcSelfStat(void){
579613 return vsz ;
580614}
581615
582- #if ! CMK_HAS_MALLINFO || defined( CMK_MALLINFO_IS_BROKEN )
616+ #if ! CMK_HAS_MALLINFO
583617INLINE static CMK_TYPEDEF_UINT8 MemusageMallinfo (void ){ return 0 ;}
584618#else
585619#if CMK_HAS_MALLOC_H
0 commit comments