Merge commit: branch 'work'
[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 *malloc( size_t size ) {
56         return mspace_malloc( mySpace, size );
57 }
58
59 void free( void * ptr ){
60         mspace_free( mySpace, ptr );
61 }
62
63 void * operator new(size_t size) throw(std::bad_alloc) {
64         return MYMALLOC(size);
65 }
66
67 void operator delete(void *p) throw() {
68         MYFREE(p);
69 }