print stats only at end of execution
[c11tester.git] / mymemory.cc
index cdfa37282870e6e1d1665be7cea00d856a0a2b42..6ea6b92927c4ddebabe5b690b13800667a70fd08 100644 (file)
@@ -73,19 +73,31 @@ void *model_malloc(size_t size)
 /** @brief Snapshotting malloc, for use by model-checker (not user progs) */
 void * snapshot_malloc(size_t size)
 {
-       return malloc(size);
+       void *tmp = mspace_malloc(model_snapshot_space, size);
+       ASSERT(tmp);
+       return tmp;
 }
 
 /** @brief Snapshotting calloc, for use by model-checker (not user progs) */
 void * snapshot_calloc(size_t count, size_t size)
 {
-       return calloc(count, size);
+       void *tmp = mspace_calloc(model_snapshot_space, count, size);
+       ASSERT(tmp);
+       return tmp;
+}
+
+/** @brief Snapshotting realloc, for use by model-checker (not user progs) */
+void *snapshot_realloc(void *ptr, size_t size)
+{
+       void *tmp = mspace_realloc(model_snapshot_space, ptr, size);
+       ASSERT(tmp);
+       return tmp;
 }
 
 /** @brief Snapshotting free, for use by model-checker (not user progs) */
 void snapshot_free(void *ptr)
 {
-       free(ptr);
+       mspace_free(model_snapshot_space, ptr);
 }
 
 /** Non-snapshotting free for our use. */
@@ -123,7 +135,7 @@ void * HandleEarlyAllocationRequest(size_t sz)
        sz = (sz + 7) & ~7;
 
        if (sz > (BOOTSTRAPBYTES-offset)) {
-               printf("OUT OF BOOTSTRAP MEMORY\n");
+               model_print("OUT OF BOOTSTRAP MEMORY\n");
                exit(EXIT_FAILURE);
        }
 
@@ -132,10 +144,13 @@ 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 */
+mspace user_snapshot_space = NULL;
 
 /** Check whether this is bootstrapped memory that we should not free */
 static bool DontFree(void *ptr)
@@ -146,8 +161,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
@@ -158,13 +173,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;
 }
@@ -172,8 +187,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 {