mymemory/snapshot: rearrange snapshot implementation
[model-checker.git] / snapshotimp.h
index e9f6d8bd50a4ab1493a8d0264c275fdfeade3b8b..6efdbd9a4ac3799fbd628ec4e2a1eb5c1cc12f59 100644 (file)
@@ -2,17 +2,12 @@
  *     @brief Snapshotting implementation header file..
  */
 
-#ifndef _SNAPSHOTIMP_H
-#define _SNAPSHOTIMP_H
+#ifndef __SNAPSHOTIMP_H__
+#define __SNAPSHOTIMP_H__
+
+#include <stddef.h>
+
 #include "snapshot.h"
-#include <iostream>
-#include <inttypes.h>
-#include <fcntl.h>
-#include <sys/mman.h>
-#include <sys/types.h>
-#include <csignal>
-#define SHARED_MEMORY_DEFAULT  (100 * ((size_t)1 << 20)) // 100mb for the shared memory
-#define STACK_SIZE_DEFAULT      (((size_t)1 << 20) * 20)  // 20 mb out of the above 100 mb for my stack
 
 #if USE_MPROTECT_SNAPSHOT
 //Each snapshotrecord lists the firstbackingpage that must be written to revert to that snapshot
@@ -20,29 +15,27 @@ struct SnapShotRecord {
        unsigned int firstBackingPage;
 };
 
-//Backing store page struct
-struct SnapShotPage {
-       char data[PAGESIZE];
-};
+/** @brief Backing store page */
+typedef unsigned char snapshot_page_t[PAGESIZE];
 
 //List the base address of the corresponding page in the backing store so we know where to copy it to
 struct BackingPageRecord {
-       void * basePtrOfPage;
+       void *basePtrOfPage;
 };
 
 //Stuct for each memory region
 struct MemoryRegion {
-       void * basePtr; //base of memory region
+       void *basePtr; //base of memory region
        int sizeInPages; //size of memory region in pages
 };
 
 //Primary struct for snapshotting system....
 struct SnapShot {
-       struct MemoryRegion * regionsToSnapShot; //This pointer references an array of memory regions to snapshot
-       struct SnapShotPage * backingStore; //This pointer references an array of snapshotpage's that form the backing store
-       void * backingStoreBasePtr; //This pointer references an array of snapshotpage's that form the backing store
-       struct BackingPageRecord * backingRecords; //This pointer references an array of backingpagerecord's (same number of elements as backingstore
-       struct SnapShotRecord * snapShots; //This pointer references the snapshot array
+       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
+       void *backingStoreBasePtr; //This pointer references an array of snapshotpage's that form the backing store
+       struct BackingPageRecord *backingRecords; //This pointer references an array of backingpagerecord's (same number of elements as backingstore
+       struct SnapShotRecord *snapShots; //This pointer references the snapshot array
 
        unsigned int lastSnapShot; //Stores the next snapshot record we should use
        unsigned int lastBackingPage; //Stores the next backingpage we should use
@@ -53,17 +46,24 @@ struct SnapShot {
        unsigned int maxSnapShots; //Stores the total number of snapshots we allow
 };
 
-//Global reference to snapshot data structure
-extern struct SnapShot * snapshotrecord;
 #else
-struct Snapshot {
+
+#include <ucontext.h>
+
+#define SHARED_MEMORY_DEFAULT  (100 * ((size_t)1 << 20)) // 100mb for the shared memory
+#define STACK_SIZE_DEFAULT      (((size_t)1 << 20) * 20)  // 20 mb out of the above 100 mb for my stack
+
+struct SnapShot {
        void *mSharedMemoryBase;
        void *mStackBase;
        size_t mStackSize;
-       snapshot_id mIDToRollback;
+       volatile snapshot_id mIDToRollback;
        ucontext_t mContextToRollback;
        snapshot_id currSnapShotID;
 };
-extern struct Snapshot * sTheRecord;
-#endif
 #endif
+
+//Global reference to snapshot data structure
+extern struct SnapShot *snapshotrecord;
+
+#endif /* __SNAPSHOTIMP_H__ */