init ldtrace repo
[ldtrace] / wrap.c
1 #define _GNU_SOURCE
2 #define _FILE_OFFSET_BITS 64
3
4 #include <stdio.h>
5 #include <dlfcn.h>
6
7 #include "head.h"
8
9 // dprintf and dlsym are not wrapped
10
11 #define F(ret,name,args,args2) ret (name)args \
12 { \
13         static ret (*p__)args; \
14         dprintf(2, #name "\n"); \
15         if (!p__) p__ = dlsym(RTLD_NEXT, #name); \
16         return p__ args2; \
17 }
18
19 #define V(v,name,args,args2) v (name)args \
20 { \
21         static v (*p__)args; \
22         dprintf(2, #name "\n"); \
23         if (!p__) p__ = dlsym(RTLD_NEXT, #name); \
24         p__ args2; \
25 }
26
27 // vararg functions are not wrapped
28 #define XF(ret,name,args)
29 #define XV(v,name,args)
30
31 #include "func.h"