]> AND Public Git Repository - simgrid.git/blobdiff - src/xbt/mmalloc/mmalloc.c
Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Another attempt at PRELOADing mmalloc (WIP)
[simgrid.git] / src / xbt / mmalloc / mmalloc.c
index 8aee79c5bc1d953f7a77aae27e0537102a74b0a6..be0070f87b8bb8ffd4c761e3a7ccc6b47f07324b 100644 (file)
@@ -1,6 +1,6 @@
 /* Memory allocator `malloc'. */
 
-/* Copyright (c) 2010-2021. The SimGrid Team. All rights reserved.          */
+/* Copyright (c) 2010-2022. The SimGrid Team. All rights reserved.          */
 
 /* This program is free software; you can redistribute it and/or modify it
  * under the terms of the license (GNU LGPL) which comes with this package. */
 
 static void initialize(xbt_mheap_t mdp);
 static void *register_morecore(xbt_mheap_t mdp, size_t size);
-static void *align(xbt_mheap_t mdp, size_t size);
+static void* mmalloc_aligned(xbt_mheap_t mdp, size_t size);
 
 /* Allocation aligned on block boundary.
  *
  * It never returns NULL, but dies verbosely on error.
  */
-static void *align(struct mdesc *mdp, size_t size)
+static void* mmalloc_aligned(struct mdesc* mdp, size_t size)
 {
   void *result;
   unsigned long int adj;
@@ -44,16 +44,14 @@ static void *align(struct mdesc *mdp, size_t size)
     mmorecore(mdp, adj);
     result = (char *) result + adj;
   }
-  return (result);
+  return result;
 }
 
-/** Initialize heapinfo about the heapinfo pages :)
- *
- */
+/** Initialize heapinfo about the heapinfo pages :) */
 static void initialize_heapinfo_heapinfo(const s_xbt_mheap_t* mdp)
 {
   // Update heapinfo about the heapinfo pages (!):
-  xbt_assert((uintptr_t) mdp->heapinfo % BLOCKSIZE == 0);
+  mmalloc_assert((uintptr_t)mdp->heapinfo % BLOCKSIZE == 0, "Failed assert in initialize_heapinfo_heapinfo()");
   size_t block   = BLOCK(mdp->heapinfo);
   size_t nblocks = mdp->heapsize * sizeof(malloc_info) / BLOCKSIZE;
   // Mark them as free:
@@ -67,13 +65,12 @@ static void initialize_heapinfo_heapinfo(const s_xbt_mheap_t* mdp)
 }
 
 /* Finish the initialization of the mheap. If we want to inline it
- * properly, we need to make the align function publicly visible, too  */
+ * properly, we need to make the mmalloc_aligned function publicly visible, too  */
 static void initialize(xbt_mheap_t mdp)
 {
   // Update mdp meta-data:
   mdp->heapsize = HEAP / BLOCKSIZE;
-  mdp->heapinfo = (malloc_info *)
-    align(mdp, mdp->heapsize * sizeof(malloc_info));
+  mdp->heapinfo = (malloc_info*)mmalloc_aligned(mdp, mdp->heapsize * sizeof(malloc_info));
   mdp->heapbase = (void *) mdp->heapinfo;
   mdp->flags |= MMALLOC_INITIALIZED;
 
@@ -102,7 +99,7 @@ static inline void update_hook(void **a, size_t offset)
  * into the heap info table as necessary. */
 static void *register_morecore(struct mdesc *mdp, size_t size)
 {
-  void* result = align(mdp, size); // Never returns NULL
+  void* result = mmalloc_aligned(mdp, size); // Never returns NULL
 
   /* Check if we need to grow the info table (in a multiplicative manner)  */
   if ((size_t) BLOCK((char *) result + size) > mdp->heapsize) {
@@ -112,7 +109,7 @@ static void *register_morecore(struct mdesc *mdp, size_t size)
 
     /* Copy old info into new location */
     malloc_info* oldinfo = mdp->heapinfo;
-    malloc_info* newinfo = (malloc_info*)align(mdp, newsize * sizeof(malloc_info));
+    malloc_info* newinfo = (malloc_info*)mmalloc_aligned(mdp, newsize * sizeof(malloc_info));
     memcpy(newinfo, oldinfo, mdp->heapsize * sizeof(malloc_info));
 
     /* Initialize the new blockinfo : */
@@ -149,7 +146,7 @@ static void *register_morecore(struct mdesc *mdp, size_t size)
   }
 
   mdp->heaplimit = BLOCK((char *) result + size);
-  return (result);
+  return result;
 }
 
 /* Allocate memory from the heap.  */
@@ -217,8 +214,9 @@ void *mmalloc_no_memset(xbt_mheap_t mdp, size_t size)
       for (candidate_frag=0;candidate_frag<(size_t) (BLOCKSIZE >> log);candidate_frag++)
         if (candidate_info->busy_frag.frag_size[candidate_frag] == -1)
           break;
-      xbt_assert(candidate_frag < (size_t) (BLOCKSIZE >> log),
-          "Block %zu was registered as containing free fragments of type %zu, but I can't find any",candidate_block,log);
+      mmalloc_assert(candidate_frag < (size_t)(BLOCKSIZE >> log),
+                     "Block %zu was registered as containing free fragments of type %zu, but I can't find any",
+                     candidate_block, log);
 
       result = (void*) (((char*)ADDRESS(candidate_block)) + (candidate_frag << log));
 
@@ -341,5 +339,5 @@ void *mmalloc_no_memset(xbt_mheap_t mdp, size_t size)
 
   }
 
-  return (result);
+  return result;
 }