Commit | Line | Data |
---|---|---|
b27f8e75 MD |
1 | /* |
2 | * Copyright (C) 2009 Pierre-Marc Fournier | |
1622ba22 | 3 | * Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com> |
c39c72ee PMF |
4 | * |
5 | * This library is free software; you can redistribute it and/or | |
6 | * modify it under the terms of the GNU Lesser General Public | |
7 | * License as published by the Free Software Foundation; either | |
8 | * version 2.1 of the License, or (at your option) any later version. | |
9 | * | |
10 | * This library is distributed in the hope that it will be useful, | |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 | * Lesser General Public License for more details. | |
14 | * | |
15 | * You should have received a copy of the GNU Lesser General Public | |
16 | * License along with this library; if not, write to the Free Software | |
17 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA | |
18 | */ | |
19 | ||
e541a28d PMF |
20 | #define _GNU_SOURCE |
21 | #include <dlfcn.h> | |
22 | #include <sys/types.h> | |
23 | #include <stdio.h> | |
1622ba22 MD |
24 | |
25 | #define TRACEPOINT_DEFINE | |
26 | #define TRACEPOINT_CREATE_PROBES | |
27 | #include "ust_libc.h" | |
fbd8191b | 28 | |
e541a28d PMF |
29 | void *malloc(size_t size) |
30 | { | |
1c184644 | 31 | static void *(*plibc_malloc)(size_t size) = NULL; |
1c184644 PMF |
32 | void *retval; |
33 | ||
b27f8e75 | 34 | if (plibc_malloc == NULL) { |
e541a28d | 35 | plibc_malloc = dlsym(RTLD_NEXT, "malloc"); |
b27f8e75 | 36 | if (plibc_malloc == NULL) { |
e541a28d PMF |
37 | fprintf(stderr, "mallocwrap: unable to find malloc\n"); |
38 | return NULL; | |
39 | } | |
40 | } | |
1c184644 | 41 | retval = plibc_malloc(size); |
1622ba22 | 42 | tracepoint(ust_libc, malloc, size, retval); |
1c184644 PMF |
43 | return retval; |
44 | } | |
45 | ||
46 | void free(void *ptr) | |
47 | { | |
48 | static void *(*plibc_free)(void *ptr) = NULL; | |
49 | ||
b27f8e75 | 50 | if (plibc_free == NULL) { |
1c184644 | 51 | plibc_free = dlsym(RTLD_NEXT, "free"); |
b27f8e75 | 52 | if (plibc_free == NULL) { |
1c184644 | 53 | fprintf(stderr, "mallocwrap: unable to find free\n"); |
eb0f0951 | 54 | return; |
1c184644 PMF |
55 | } |
56 | } | |
1622ba22 | 57 | tracepoint(ust_libc, free, ptr); |
eb0f0951 | 58 | plibc_free(ptr); |
e541a28d | 59 | } |