model: schedule appropriate fence backtracking points
[c11tester.git] / snapshot.cc
index d1c128968049187e94e199c30ddd41383713708c..fb1f911557e09345ed7b8299e19d6edce97eb399 100644 (file)
@@ -57,6 +57,7 @@ static void * ReturnPageAlignedAddress(void *addr)
 /* Primary struct for snapshotting system */
 struct mprot_snapshotter {
        mprot_snapshotter(unsigned int numbackingpages, unsigned int numsnapshots, unsigned int nummemoryregions);
+       ~mprot_snapshotter();
 
        struct MemoryRegion *regionsToSnapShot; //This pointer references an array of memory regions to snapshot
        snapshot_page_t *backingStore; //This pointer references an array of snapshotpage's that form the backing store
@@ -93,10 +94,18 @@ mprot_snapshotter::mprot_snapshotter(unsigned int backing_pages, unsigned int sn
        snapShots = (struct SnapShotRecord *)model_malloc(sizeof(struct SnapShotRecord) * snapshots);
 }
 
-/** HandlePF is the page fault handler for mprotect based snapshotting
+mprot_snapshotter::~mprot_snapshotter()
+{
+       model_free(regionsToSnapShot);
+       model_free(backingStoreBasePtr);
+       model_free(backingRecords);
+       model_free(snapShots);
+}
+
+/** mprot_handle_pf is the page fault handler for mprotect based snapshotting
  * algorithm.
  */
-static void HandlePF(int sig, siginfo_t *si, void *unused)
+static void mprot_handle_pf(int sig, siginfo_t *si, void *unused)
 {
        if (si->si_code == SEGV_MAPERR) {
                model_print("Real Fault at %p\n", si->si_addr);
@@ -138,7 +147,7 @@ static void mprot_snapshot_init(unsigned int numbackingpages,
        struct sigaction sa;
        sa.sa_flags = SA_SIGINFO | SA_NODEFER | SA_RESTART | SA_ONSTACK;
        sigemptyset(&sa.sa_mask);
-       sa.sa_sigaction = HandlePF;
+       sa.sa_sigaction = mprot_handle_pf;
 #ifdef MAC
        if (sigaction(SIGBUS, &sa, NULL) == -1) {
                model_print("SIGACTION CANNOT BE INSTALLED\n");
@@ -152,25 +161,25 @@ static void mprot_snapshot_init(unsigned int numbackingpages,
 
        mprot_snap = new mprot_snapshotter(numbackingpages, numsnapshots, nummemoryregions);
 
-       // EVIL HACK: We need to make sure that calls into the HandlePF method don't cause dynamic links
+       // EVIL HACK: We need to make sure that calls into the mprot_handle_pf method don't cause dynamic links
        // The problem is that we end up protecting state in the dynamic linker...
        // Solution is to call our signal handler before we start protecting stuff...
 
        siginfo_t si;
        memset(&si, 0, sizeof(si));
        si.si_addr = ss.ss_sp;
-       HandlePF(SIGSEGV, &si, NULL);
+       mprot_handle_pf(SIGSEGV, &si, NULL);
        mprot_snap->lastBackingPage--; //remove the fake page we copied
 
        void *basemySpace = model_malloc((numheappages + 1) * PAGESIZE);
        void *pagealignedbase = PageAlignAddressUpward(basemySpace);
        user_snapshot_space = create_mspace_with_base(pagealignedbase, numheappages * PAGESIZE, 1);
-       addMemoryRegionToSnapShot(pagealignedbase, numheappages);
+       snapshot_add_memory_region(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);
+       snapshot_add_memory_region(pagealignedbase, numheappages);
 
        entryPoint();
 }
@@ -389,10 +398,11 @@ static void fork_roll_back(snapshot_id theID)
 
 #endif /* !USE_MPROTECT_SNAPSHOT */
 
-/** The initSnapshotLibrary function initializes the snapshot library.
- *  @param entryPoint the function that should run the program.
+/**
+ * @brief Initializes the snapshot system
+ * @param entryPoint the function that should run the program.
  */
-void initSnapshotLibrary(unsigned int numbackingpages,
+void snapshot_system_init(unsigned int numbackingpages,
                unsigned int numsnapshots, unsigned int nummemoryregions,
                unsigned int numheappages, VoidFuncPtr entryPoint)
 {
@@ -403,8 +413,8 @@ void initSnapshotLibrary(unsigned int numbackingpages,
 #endif
 }
 
-/** The addMemoryRegionToSnapShot function assumes that addr is page aligned. */
-void addMemoryRegionToSnapShot(void *addr, unsigned int numPages)
+/** Assumes that addr is page aligned. */
+void snapshot_add_memory_region(void *addr, unsigned int numPages)
 {
 #if USE_MPROTECT_SNAPSHOT
        mprot_add_to_snapshot(addr, numPages);
@@ -413,10 +423,10 @@ void addMemoryRegionToSnapShot(void *addr, unsigned int numPages)
 #endif
 }
 
-/** The takeSnapshot function takes a snapshot.
+/** Takes a snapshot of memory.
  * @return The snapshot identifier.
  */
-snapshot_id takeSnapshot()
+snapshot_id take_snapshot()
 {
 #if USE_MPROTECT_SNAPSHOT
        return mprot_take_snapshot();
@@ -425,10 +435,10 @@ snapshot_id takeSnapshot()
 #endif
 }
 
-/** The rollBack function rollback to the given snapshot identifier.
+/** Rolls the memory state back to the given snapshot identifier.
  *  @param theID is the snapshot identifier to rollback to.
  */
-void rollBack(snapshot_id theID)
+void snapshot_roll_back(snapshot_id theID)
 {
 #if USE_MPROTECT_SNAPSHOT
        mprot_roll_back(theID);