/* extern declaration definition */
struct SnapShot * snapshotrecord = NULL;
+/** PageAlignedAdressUpdate return a page aligned address for the
+ * address being added as a side effect the numBytes are also changed.
+ */
+static void * PageAlignAddressUpward(void * addr) {
+ return (void *)((((uintptr_t)addr)+PAGESIZE-1)&~(PAGESIZE-1));
+}
+
#if !USE_MPROTECT_SNAPSHOT
/** @statics
* These variables are necessary because the stack is shared region and
#else /* USE_MPROTECT_SNAPSHOT */
-/** PageAlignedAdressUpdate return a page aligned address for the
- * address being added as a side effect the numBytes are also changed.
- */
-static void * PageAlignAddressUpward(void * addr) {
- return (void *)((((uintptr_t)addr)+PAGESIZE-1)&~(PAGESIZE-1));
-}
-
/** ReturnPageAlignedAddress returns a page aligned address for the
* address being added as a side effect the numBytes are also changed.
*/
if( si->si_code == SEGV_MAPERR ){
printf("Real Fault at %p\n", si->si_addr);
print_trace();
+ printf("For debugging, place breakpoint at: %s:%d\n",
+ __FILE__, __LINE__);
exit( EXIT_FAILURE );
}
void* addr = ReturnPageAlignedAddress(si->si_addr);
void *basemySpace = model_malloc((numheappages+1)*PAGESIZE);
void * pagealignedbase=PageAlignAddressUpward(basemySpace);
- snapshot_space = create_mspace_with_base(pagealignedbase, numheappages*PAGESIZE, 1 );
+ user_snapshot_space = create_mspace_with_base(pagealignedbase, numheappages * PAGESIZE, 1);
addMemoryRegionToSnapShot(pagealignedbase, numheappages);
+
+ void *base_model_snapshot_space = model_malloc((numheappages + 1) * PAGESIZE);
+ pagealignedbase = PageAlignAddressUpward(base_model_snapshot_space);
+ model_snapshot_space = create_mspace_with_base(pagealignedbase, numheappages * PAGESIZE, 1);
+ addMemoryRegionToSnapShot(pagealignedbase, numheappages);
+
entryPoint();
}
#else
if (!snapshotrecord)
createSharedMemory();
+ void *base_model_snapshot_space = malloc((numheappages + 1) * PAGESIZE);
+ void *pagealignedbase = PageAlignAddressUpward(base_model_snapshot_space);
+ model_snapshot_space = create_mspace_with_base(pagealignedbase, numheappages * PAGESIZE, 1);
+
//step 2 setup the stack context.
ucontext_t newContext;
getcontext( &newContext );