X-Git-Url: http://plrg.eecs.uci.edu/git/?p=c11tester.git;a=blobdiff_plain;f=snapshot.cc;h=a5792e56f29e67c6b7810fb9691fa314ed04da73;hp=ac4f712350aac33ab8f981b869d68a9500b4a76d;hb=7bec9f8bcc8c63a0be2b31f8aa01a61a50afe4f9;hpb=8aceb584e9f6d7c94873bf3b9f5fcb82f5868ae4 diff --git a/snapshot.cc b/snapshot.cc index ac4f7123..a5792e56 100644 --- a/snapshot.cc +++ b/snapshot.cc @@ -61,6 +61,10 @@ void initSnapShotRecord(unsigned int numbackingpages, unsigned int numsnapshots, } #endif //nothing to initialize for the fork based snapshotting. +/** HandlePF is the page fault handler for mprotect based snapshotting + * algorithm. + */ + void HandlePF( int sig, siginfo_t *si, void * unused){ #if USE_MPROTECT_SNAPSHOT if( si->si_code == SEGV_MAPERR ){ @@ -87,14 +91,18 @@ void HandlePF( int sig, siginfo_t *si, void * unused){ #endif //nothing to handle for non snapshotting case. } -//Return a page aligned address for the address being added -//as a side effect the numBytes are also changed. +/** ReturnPageAlignedAddress returns a page aligned address for the + * address being added as a side effect the numBytes are also changed. + */ + void * ReturnPageAlignedAddress(void * addr) { return (void *)(((uintptr_t)addr)&~(PAGESIZE-1)); } -//Return a page aligned address for the address being added -//as a side effect the numBytes are also changed. +/** PageAlignedAdressUpdate return a page aligned address for the + * address being added as a side effect the numBytes are also changed. + */ + void * PageAlignAddressUpward(void * addr) { return (void *)((((uintptr_t)addr)+PAGESIZE-1)&~(PAGESIZE-1)); } @@ -122,6 +130,10 @@ extern "C" { #ifdef __cplusplus } #endif + +/** The initSnapShotLibrary function initializes the Snapshot library. + * @param entryPoint the function that should run the program. + */ void initSnapShotLibrary(unsigned int numbackingpages, unsigned int numsnapshots, unsigned int nummemoryregions, unsigned int numheappages, VoidFuncPtr entryPoint) { @@ -228,7 +240,9 @@ void initSnapShotLibrary(unsigned int numbackingpages, #endif } -/* This function assumes that addr is page aligned */ + +/** The addMemoryRegionToSnapShot function assumes that addr is page aligned. + */ void addMemoryRegionToSnapShot( void * addr, unsigned int numPages) { #if USE_MPROTECT_SNAPSHOT unsigned int memoryregion=snapshotrecord->lastRegion++; @@ -241,7 +255,11 @@ void addMemoryRegionToSnapShot( void * addr, unsigned int numPages) { snapshotrecord->regionsToSnapShot[ memoryregion ].sizeInPages=numPages; #endif //NOT REQUIRED IN THE CASE OF FORK BASED SNAPSHOTS. } -//take snapshot + +/** The takeSnapshot function takes a snapshot. + * @return The snapshot identifier. + */ + snapshot_id takeSnapshot( ){ #if USE_MPROTECT_SNAPSHOT for(unsigned int region=0; regionlastRegion;region++) { @@ -264,6 +282,11 @@ snapshot_id takeSnapshot( ){ return snapshotid; #endif } + +/** The rollBack function rollback to the given snapshot identifier. + * @param theID is the snapshot identifier to rollback to. + */ + void rollBack( snapshot_id theID ){ #if USE_MPROTECT_SNAPSHOT std::map< void *, bool, std::less< void * >, MyAlloc< std::pair< const void *, bool > > > duplicateMap; @@ -303,6 +326,8 @@ void rollBack( snapshot_id theID ){ #endif } +/** The finalize method shuts down the snapshotting system. */ + void finalize(){ #if !USE_MPROTECT_SNAPSHOT sTheRecord->mbFinalize = true;