#include "hashtable.h"
#include "snapshot.h"
-#include "snapshotimp.h"
#include "mymemory.h"
#include "common.h"
#define SSDEBUG(...) do { } while (0)
#endif
-/* extern declaration definition */
-struct SnapShot *snapshotrecord = NULL;
+#if USE_MPROTECT_SNAPSHOT
+/* Each snapshotrecord lists the firstbackingpage that must be written to
+ * revert to that snapshot */
+struct SnapShotRecord {
+ unsigned int firstBackingPage;
+};
+
+/** @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;
+};
+
+/* Struct 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
+ 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
+ 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
+};
+
+#else
+
+#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;
+ volatile snapshot_id mIDToRollback;
+ ucontext_t mContextToRollback;
+ snapshot_id currSnapShotID;
+};
+#endif
+
+static struct SnapShot *snapshotrecord = NULL;
/** PageAlignedAdressUpdate return a page aligned address for the
* address being added as a side effect the numBytes are also changed.
+++ /dev/null
-/** @file snapshotimp.h
- * @brief Snapshotting implementation header file..
- */
-
-#ifndef __SNAPSHOTIMP_H__
-#define __SNAPSHOTIMP_H__
-
-#include <stddef.h>
-
-#include "snapshot.h"
-
-#if USE_MPROTECT_SNAPSHOT
-//Each snapshotrecord lists the firstbackingpage that must be written to revert to that snapshot
-struct SnapShotRecord {
- unsigned int firstBackingPage;
-};
-
-/** @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;
-};
-
-//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
- 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
- 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
-};
-
-#else
-
-#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;
- volatile snapshot_id mIDToRollback;
- ucontext_t mContextToRollback;
- snapshot_id currSnapShotID;
-};
-#endif
-
-//Global reference to snapshot data structure
-extern struct SnapShot *snapshotrecord;
-
-#endif /* __SNAPSHOTIMP_H__ */