a825bb940f66f4331e723eadd8983f9bd8d05e70
[c11tester.git] / mymemory.cc
1 #include "mymemory.h"
2 #include "snapshot.h"
3 #include "snapshotimp.h"
4 #include <stdio.h>
5 #include <dlfcn.h>
6 #if !USE_CHECKPOINTING
7 static mspace sStaticSpace = NULL;
8 #endif
9
10 void *MYMALLOC(size_t size) {
11 #if USE_CHECKPOINTING
12         static void *(*mallocp)(size_t size);
13         char *error;
14         void *ptr;
15   
16         /* get address of libc malloc */
17         if (!mallocp) {
18                 mallocp = ( void * ( * )( size_t ) )dlsym(RTLD_NEXT, "malloc");
19                 if ((error = dlerror()) != NULL) {
20                         fputs(error, stderr);
21                         exit(1);
22                 }
23         }
24         ptr = mallocp(size);     
25         return ptr;
26 #else
27         if( !sTheRecord ){
28                 createSharedLibrary();
29         }
30         if( NULL == sStaticSpace )
31                 sStaticSpace = create_mspace_with_base( ( void * )( sTheRecord->mSharedMemoryBase ), SHARED_MEMORY_DEFAULT -sizeof( struct Snapshot_t ), 1 );
32         return mspace_malloc( sStaticSpace, size );
33 #endif
34 }
35
36 void MYFREE(void *ptr) {
37 #if USE_CHECKPOINTING
38         static void (*freep)(void *);
39         char *error;
40
41         /* get address of libc free */
42         if (!freep) {
43                 freep = ( void  ( * )( void * ) )dlsym(RTLD_NEXT, "free");
44                 if ((error = dlerror()) != NULL) {
45                         fputs(error, stderr);
46                         exit(1);
47                 }
48         }
49         freep(ptr);
50 #else
51         mspace_free( sStaticSpace, ptr );
52 #endif
53 }
54 mspace mySpace = NULL;
55 void * basemySpace = NULL;
56
57 void *malloc( size_t size ) {
58         return mspace_malloc( mySpace, size );
59 }
60
61 void free( void * ptr ){
62         mspace_free( mySpace, ptr );
63 }
64
65 void * operator new(size_t size) throw(std::bad_alloc) {
66         return MYMALLOC(size);
67 }
68
69 void operator delete(void *p) throw() {
70         MYFREE(p);
71 }