X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=liblttng-ust-libc-wrapper%2Flttng-ust-malloc.c;fp=liblttng-ust-libc-wrapper%2Flttng-ust-malloc.c;h=3212ff0bacca50f7e8511977ce66b708113f3c81;hb=476037d9a24fdd5e339e3565743aadb9cb8a0a96;hp=0000000000000000000000000000000000000000;hpb=d8de13549b80d40b0c823e43e81afd55266f2fe5;p=lttng-ust.git diff --git a/liblttng-ust-libc-wrapper/lttng-ust-malloc.c b/liblttng-ust-libc-wrapper/lttng-ust-malloc.c new file mode 100644 index 00000000..3212ff0b --- /dev/null +++ b/liblttng-ust-libc-wrapper/lttng-ust-malloc.c @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2009 Pierre-Marc Fournier + * Copyright (C) 2011 Mathieu Desnoyers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#define _GNU_SOURCE +#include +#include +#include + +#define TRACEPOINT_DEFINE +#define TRACEPOINT_CREATE_PROBES +#include "ust_libc.h" + +void *malloc(size_t size) +{ + static void *(*plibc_malloc)(size_t size) = NULL; + void *retval; + + if (plibc_malloc == NULL) { + plibc_malloc = dlsym(RTLD_NEXT, "malloc"); + if (plibc_malloc == NULL) { + fprintf(stderr, "mallocwrap: unable to find malloc\n"); + return NULL; + } + } + retval = plibc_malloc(size); + tracepoint(ust_libc, malloc, size, retval); + return retval; +} + +void free(void *ptr) +{ + static void *(*plibc_free)(void *ptr) = NULL; + + if (plibc_free == NULL) { + plibc_free = dlsym(RTLD_NEXT, "free"); + if (plibc_free == NULL) { + fprintf(stderr, "mallocwrap: unable to find free\n"); + return; + } + } + tracepoint(ust_libc, free, ptr); + plibc_free(ptr); +}