mymemory: add basic model_snapshot_space
[model-checker.git] / mymemory.cc
index c076f5449c5a2f8e70c5ae7ef48ade0733937b5c..387d6de02365803b8dd33675539918b8d825ebbc 100644 (file)
@@ -88,24 +88,6 @@ void snapshot_free(void *ptr)
        free(ptr);
 }
 
-void *system_malloc(size_t size)
-{
-       static void *(*mallocp)(size_t size);
-       char *error;
-       void *ptr;
-
-       /* get address of libc malloc */
-       if (!mallocp) {
-               mallocp = (void * (*)(size_t))dlsym(RTLD_NEXT, "malloc");
-               if ((error = dlerror()) != NULL) {
-                       fputs(error, stderr);
-                       exit(EXIT_FAILURE);
-               }
-       }
-       ptr = mallocp(size);
-       return ptr;
-}
-
 /** Non-snapshotting free for our use. */
 void model_free(void *ptr)
 {
@@ -150,10 +132,15 @@ void * HandleEarlyAllocationRequest(size_t sz)
        return pointer;
 }
 
+/** @brief Global mspace reference for the model-checker's snapshotting heap */
+mspace model_snapshot_space = NULL;
+
 #if USE_MPROTECT_SNAPSHOT
 
-/** @brief Global mspace reference for the snapshotting heap */
-mspace snapshot_space = NULL;
+/** @brief Global mspace reference for the user's snapshotting heap
+ *  @todo use this ONLY for user's allocations, not for internal snapshotting
+ *  state */
+mspace user_snapshot_space = NULL;
 
 /** Check whether this is bootstrapped memory that we should not free */
 static bool DontFree(void *ptr)
@@ -164,8 +151,8 @@ static bool DontFree(void *ptr)
 /** @brief Snapshotting malloc implementation for user programs */
 void *malloc(size_t size)
 {
-       if (snapshot_space) {
-               void *tmp = mspace_malloc(snapshot_space, size);
+       if (user_snapshot_space) {
+               void *tmp = mspace_malloc(user_snapshot_space, size);
                ASSERT(tmp);
                return tmp;
        } else
@@ -176,13 +163,13 @@ void *malloc(size_t size)
 void free(void * ptr)
 {
        if (!DontFree(ptr))
-               mspace_free(snapshot_space, ptr);
+               mspace_free(user_snapshot_space, ptr);
 }
 
 /** @brief Snapshotting realloc implementation for user programs */
 void *realloc(void *ptr, size_t size)
 {
-       void *tmp = mspace_realloc(snapshot_space, ptr, size);
+       void *tmp = mspace_realloc(user_snapshot_space, ptr, size);
        ASSERT(tmp);
        return tmp;
 }
@@ -190,8 +177,8 @@ void *realloc(void *ptr, size_t size)
 /** @brief Snapshotting calloc implementation for user programs */
 void * calloc(size_t num, size_t size)
 {
-       if (snapshot_space) {
-               void *tmp = mspace_calloc(snapshot_space, num, size);
+       if (user_snapshot_space) {
+               void *tmp = mspace_calloc(user_snapshot_space, num, size);
                ASSERT(tmp);
                return tmp;
        } else {