X-Git-Url: http://plrg.eecs.uci.edu/git/?p=satcheck.git;a=blobdiff_plain;f=mymemory.cc;h=23f448f3b1dfefb04b2a55b96913adab54967f61;hp=d911f5d348c1f49132549f35c9a4e1b3a050d4c0;hb=HEAD;hpb=44e8eabc8f7a0ab23c29037a770463d8a2de7b4a diff --git a/mymemory.cc b/mymemory.cc index d911f5d..23f448f 100644 --- a/mymemory.cc +++ b/mymemory.cc @@ -26,6 +26,7 @@ size_t allocatedReqs[REQUESTS_BEFORE_ALLOC] = { 0 }; int nextRequest = 0; int howManyFreed = 0; +int switch_alloc = 0; #if !USE_MPROTECT_SNAPSHOT static mspace sStaticSpace = NULL; #endif @@ -159,7 +160,7 @@ void model_free(void *ptr) /** Bootstrap allocation. Problem is that the dynamic linker calls require * calloc to work and calloc requires the dynamic linker to work. */ -#define BOOTSTRAPBYTES 4096 +#define BOOTSTRAPBYTES 131072 char bootstrapmemory[BOOTSTRAPBYTES]; size_t offset = 0; @@ -169,7 +170,7 @@ void * HandleEarlyAllocationRequest(size_t sz) sz = (sz + 7) & ~7; if (sz > (BOOTSTRAPBYTES-offset)) { - model_print("OUT OF BOOTSTRAP MEMORY\n"); + model_print("OUT OF BOOTSTRAP MEMORY. Increase the size of BOOTSTRAPBYTES in mymemory.cc\n"); exit(EXIT_FAILURE); } @@ -211,7 +212,7 @@ void * real_user_malloc(size_t size) size=(size+7)&~((size_t)7); void *tmp = snapshot_struct->allocation_ptr; snapshot_struct->allocation_ptr = (void *)((char *) snapshot_struct->allocation_ptr +size); - + ASSERT(snapshot_struct->allocation_ptr <= snapshot_struct->top_ptr); return tmp; } @@ -226,7 +227,11 @@ void *malloc(size_t size) { if (user_snapshot_space) { /* Only perform user allocations from user context */ - return user_malloc(size); + if (switch_alloc) { + return model_malloc(size); + } else { + return user_malloc(size); + } } else return HandleEarlyAllocationRequest(size); } @@ -234,8 +239,13 @@ void *malloc(size_t size) /** @brief Snapshotting free implementation for user programs */ void free(void * ptr) { - if (!DontFree(ptr)) - mspace_free(user_snapshot_space, ptr); + if (!DontFree(ptr)) { + if (switch_alloc) { + model_free(ptr); + } else { + mspace_free(user_snapshot_space, ptr); + } + } } /** @brief Snapshotting realloc implementation for user programs */ @@ -298,7 +308,7 @@ void operator delete[](void *p, size_t size) free(p); } -#else /* !USE_MPROTECT_SNAPSHOT */ +#else /* !USE_MPROTECT_SNAPSHOT */ /** @brief Snapshotting allocation function for use by the Thread class only */ void * Thread_malloc(size_t size) @@ -312,4 +322,4 @@ void Thread_free(void *ptr) free(ptr); } -#endif /* !USE_MPROTECT_SNAPSHOT */ +#endif/* !USE_MPROTECT_SNAPSHOT */