Adding STL stuff and operator news of snapshot to model-checker. Need to actuallly...
[model-checker.git] / snapshotimp.h
diff --git a/snapshotimp.h b/snapshotimp.h
new file mode 100644 (file)
index 0000000..c28b4eb
--- /dev/null
@@ -0,0 +1,70 @@
+#ifndef _SNAPSHOTIMP_H
+#define _SNAPSHOTIMP_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 * ( 1 << 20 ) ) // 100mb for the shared memory
+#define STACK_SIZE_DEFAULT  ( ( 1 << 20 ) * 20 ) //20 mb out of the above 100 mb for my stack.
+
+#if USE_CHECKPOINTING
+//Each snapshotrecord lists the firstbackingpage that must be written to revert to that snapshot
+struct SnapShotRecord {
+  unsigned int firstBackingPage;
+};
+
+//Backing store page struct
+struct SnapShotPage {
+  char data[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;
+};
+
+//Stuct for each memory region
+struct MemoryRegion {
+  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
+  
+  unsigned int lastSnapShot; //Stores the next snapshot record we should use
+  unsigned int lastBackingPage; //Stores the next backingpage we should use
+  unsigned int lastRegion; //Stores the next memory region to be used
+
+  unsigned int maxRegions; //Stores the max number of memory regions we support
+  unsigned int maxBackingPages; //Stores the total number of backing pages
+  unsigned int maxSnapShots; //Stores the total number of snapshots we allow
+};
+
+//Global reference to snapshot data structure
+extern struct SnapShot * snapshotrecord;
+void * ReturnPageAlignedAddress( void *);
+#else
+struct Snapshot_t{
+char *mSharedMemoryBase;
+char *mStackBase;
+size_t mStackSize;
+snapshot_id mIDToRollback;
+ucontext_t mContextToRollback;
+snapshot_id currSnapShotID;
+#if DEBUG
+struct timeval startTimeGlobal;
+#endif
+volatile bool mbFinalize;
+};
+extern struct Snapshot_t * sTheRecord;
+#endif
+#endif