relay.h: fix strict aliasing warning
[ust.git] / libmallocwrap / mallocwrap.c
CommitLineData
e541a28d
PMF
1#define _GNU_SOURCE
2#include <dlfcn.h>
3#include <sys/types.h>
4#include <stdio.h>
5
fbd8191b
PMF
6#include "marker.h"
7
c61f7385
PMF
8#if 0
9INTERCEPT_PROTOTYPE(void, malloc, size_t size)
10INTERCEPT_TRACE("size %d", size)
11INTERCEPT_CALL_ARGS(size)
12INTERCEPT()
13
14#define INTERCEPT_FUNC(type, name, args...) \
15__I_FUNC_TYPE(type) \
16__I_FUNC_NAME(name) \
17__I_FUNC_ARGS(args)
18
19#define INTERCEPT_TRACE(fmt, args...) \
20#define __I_TRACE_FMT fmt \
21#define __I_TRACE_ARGS args
22
23#define INTERCEPT_CALL_ARGS(args...) \
24#define __I_CALL_ARGS args
25
26#define INTERCEPT() \
27__I_FUNC_TYPE __I_FUNC_NAME(__I_FUNC_ARGS) \
28{ \
29 static __I_FUNC_TYPE (*plibc_ ## __I_FUNC_NAME)(args) = NULL; \
30 \
31 if(plibc_ ## __I_FUNC_NAME == NULL) { \
32 plibc_ ## __I_FUNC_NAME = dlsym(RTLD_NEXT, "malloc"); \
33 if(plibc_ ## __I_FUNC_NAME == NULL) { \
34 fprintf(stderr, "mallocwrap: unable to find malloc\n"); \
35 return NULL; \
36 } \
37 } \
38 \
39 trace_mark(ust, __I_FUNC_NAME, __I_TRACE_FMT, __I_TRACE_ARGS); \
40 \
41 return plibc_ ## __I_FUNC_NAME (__I_CALL_ARGS); \
42}
43#endif
e541a28d
PMF
44
45void *malloc(size_t size)
46{
1c184644
PMF
47 static void *(*plibc_malloc)(size_t size) = NULL;
48
49 void *retval;
50
e541a28d
PMF
51 if(plibc_malloc == NULL) {
52 plibc_malloc = dlsym(RTLD_NEXT, "malloc");
53 if(plibc_malloc == NULL) {
54 fprintf(stderr, "mallocwrap: unable to find malloc\n");
55 return NULL;
56 }
57 }
fbd8191b 58
1c184644
PMF
59 retval = plibc_malloc(size);
60
61 trace_mark(ust, malloc, "size %d ptr %p", (int)size, retval);
62
63 return retval;
64}
65
66void free(void *ptr)
67{
68 static void *(*plibc_free)(void *ptr) = NULL;
69
70 if(plibc_free == NULL) {
71 plibc_free = dlsym(RTLD_NEXT, "free");
72 if(plibc_free == NULL) {
73 fprintf(stderr, "mallocwrap: unable to find free\n");
74 return NULL;
75 }
76 }
77
78 trace_mark(ust, free, "%p", ptr);
fbd8191b 79
1c184644 80 return plibc_free(ptr);
e541a28d 81}
fbd8191b
PMF
82
83MARKER_LIB
This page took 0.0257 seconds and 4 git commands to generate.