3 #include "snapshotimp.h"
6 #if !USE_MPROTECT_SNAPSHOT
7 static mspace sStaticSpace = NULL;
10 /** Non-snapshotting malloc for our use. */
12 void *MYMALLOC(size_t size) {
13 #if USE_MPROTECT_SNAPSHOT
14 static void *(*mallocp)(size_t size);
18 /* get address of libc malloc */
20 mallocp = ( void * ( * )( size_t ) )dlsym(RTLD_NEXT, "malloc");
21 if ((error = dlerror()) != NULL) {
30 createSharedLibrary();
32 if( NULL == sStaticSpace )
33 sStaticSpace = create_mspace_with_base( ( void * )( sTheRecord->mSharedMemoryBase ), SHARED_MEMORY_DEFAULT -sizeof( struct Snapshot_t ), 1 );
34 return mspace_malloc( sStaticSpace, size );
38 void *system_malloc( size_t size ){
39 static void *(*mallocp)(size_t size);
43 /* get address of libc malloc */
45 mallocp = ( void * ( * )( size_t ) )dlsym(RTLD_NEXT, "malloc");
46 if ((error = dlerror()) != NULL) {
55 void system_free( void * ptr ){
56 static void (*freep)(void *);
59 /* get address of libc free */
61 freep = ( void ( * )( void * ) )dlsym(RTLD_NEXT, "free");
62 if ((error = dlerror()) != NULL) {
70 /** Non-snapshotting free for our use. */
71 void MYFREE(void *ptr) {
72 #if USE_MPROTECT_SNAPSHOT
73 static void (*freep)(void *);
76 /* get address of libc free */
78 freep = ( void ( * )( void * ) )dlsym(RTLD_NEXT, "free");
79 if ((error = dlerror()) != NULL) {
86 mspace_free( sStaticSpace, ptr );
91 /** This global references the mspace for the snapshotting heap */
92 mspace mySpace = NULL;
94 /** This global references the unaligned memory address that was malloced for the snapshotting heap */
95 void * basemySpace = NULL;
97 //Subramanian --- please make these work for the fork based approach
99 /** Snapshotting malloc implementation for user programs. */
101 void *malloc( size_t size ) {
102 return mspace_malloc( mySpace, size );
105 /** Snapshotting free implementation for user programs. */
107 void free( void * ptr ){
108 mspace_free( mySpace, ptr );
111 /** Snapshotting realloc implementation for user programs. */
113 void *realloc( void *ptr, size_t size ){
114 return mspace_realloc( mySpace, ptr, size );
117 /** Snapshotting new operator for user programs. */
119 void * operator new(size_t size) throw(std::bad_alloc) {
123 /** Snapshotting delete operator for user programs. */
125 void operator delete(void *p) throw() {
129 /** Snapshotting new[] operator for user programs. */
131 void * operator new[](size_t size) throw(std::bad_alloc) {
135 /** Snapshotting delete[] operator for user programs. */
137 void operator delete[](void *p, size_t size) {