Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-01-18 10:02:04

0001 #ifndef MAD_MEM_H
0002 #define MAD_MEM_H
0003 
0004 #ifdef _USEGC
0005 
0006 // #define GC_DEBUG
0007 
0008 #include <gc.h>
0009 
0010 #define mymalloc(fn, sz)            mytrace(sz,myptrchk(fn, GC_MALLOC_IGNORE_OFF_PAGE(sz)))
0011 #define mymalloc_atomic(fn, sz)     mytrace(sz,myptrchk(fn, GC_MALLOC_ATOMIC_IGNORE_OFF_PAGE(sz)))
0012 #define myrealloc(fn, p, sz)        mytrace(sz,myptrchk(fn, GC_REALLOC((p),(sz))))
0013 #define myfree(fn, p)               ((void)(GC_FREE(p), (void)fn, (p)=0))
0014 
0015 #define mycalloc(fn, n, sz)         memset(mymalloc(fn, (n)*(sz)), 0, (n)*(sz))
0016 #define mycalloc_atomic(fn, n, sz)  memset(mymalloc_atomic(fn, (n)*(sz)), 0, (n)*(sz))
0017 #define myrecalloc(fn, p, osz, sz)  ((void*)((char*)memset((char*)myptrchk(fn,GC_REALLOC((p),(sz)))+(osz),0,(sz)-(osz))-(osz)))
0018 
0019 #define mycollect()                 GC_gcollect()
0020 
0021 #else
0022 
0023 #define mymalloc(fn, sz)            mytrace(sz,myptrchk(fn, malloc(sz)))
0024 #define mymalloc_atomic(fn, sz)     mytrace(sz,myptrchk(fn, malloc(sz)))
0025 #define myrealloc(fn, p, sz)        mytrace(sz,myptrchk(fn, realloc((p),(sz))))
0026 #define myfree(fn, p)               ((void)(free(p), (void)fn, (p)=0))
0027 
0028 #define mycalloc(fn, n, sz)         mytrace(sz,myptrchk(fn, calloc((n),(sz))))
0029 #define mycalloc_atomic(fn, n, sz)  mytrace(sz,myptrchk(fn, calloc((n),(sz))))
0030 #define myrecalloc(fn, p, osz, sz)  ((void*)((char*)memset((char*)myptrchk(fn,realloc((p),(sz)))+(osz),0,(sz)-(osz))-(osz)))
0031 
0032 #define mycollect()                 
0033 
0034 #endif
0035 
0036 #ifdef DEBUG_MEM
0037 #define mytrace_limit 100000
0038 #define mytrace(sz,expr)           ((sz)>mytrace_limit && fprintf(stderr, "mytrace:%s:%d: %ld\n", __FILE__, __LINE__, (long)(sz)),(expr))          
0039 #else
0040 #define mytrace(sz,expr)           (expr)
0041 #endif
0042 
0043 // SIGSEGV handler
0044 void  mad_mem_handler(int sig);
0045 
0046 // Pointer check for null
0047 void* myptrchk(const char *caller, void *ptr);
0048 
0049 #endif // MAD_MEM_H