X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=libmallocwrap%2Fmallocwrap.c;h=be1f39ed3cb4bda8c1a2bb7381e127f188a6ed91;hb=93d0f2eaff675059588e958e3de74a1bb7dd4028;hp=7794527652dd9f4fb20c5449ba842b90126e3ba0;hpb=1c184644865c13e167b174cd593e80a2c62b2482;p=ust.git diff --git a/libmallocwrap/mallocwrap.c b/libmallocwrap/mallocwrap.c index 7794527..be1f39e 100644 --- a/libmallocwrap/mallocwrap.c +++ b/libmallocwrap/mallocwrap.c @@ -1,44 +1,63 @@ +/* Copyright (C) 2009 Pierre-Marc Fournier + * + * 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 -#include "marker.h" - -//INTERCEPT_PROTOTYPE(void, malloc, size_t size) -//INTERCEPT_TRACE("size %d", size) -//INTERCEPT_CALL_ARGS(size) -//INTERCEPT() -// -//#define INTERCEPT_FUNC(type, name, args...) \ -//__I_FUNC_TYPE(type) \ -//__I_FUNC_NAME(name) \ -//__I_FUNC_ARGS(args) -// -//#define INTERCEPT_TRACE(fmt, args...) \ -//#define __I_TRACE_FMT fmt \ -//#define __I_TRACE_ARGS args -// -//#define INTERCEPT_CALL_ARGS(args...) \ -//#define __I_CALL_ARGS args -// -//#define INTERCEPT() \ -//__I_FUNC_TYPE __I_FUNC_NAME(__I_FUNC_ARGS) \ -//{ \ -// static __I_FUNC_TYPE (*plibc_ ## __I_FUNC_NAME)(args) = NULL; \ -// \ -// if(plibc_ ## __I_FUNC_NAME == NULL) { \ -// plibc_ ## __I_FUNC_NAME = dlsym(RTLD_NEXT, "malloc"); \ -// if(plibc_ ## __I_FUNC_NAME == NULL) { \ -// fprintf(stderr, "mallocwrap: unable to find malloc\n"); \ -// return NULL; \ -// } \ -// } \ -// \ -// trace_mark(ust, __I_FUNC_NAME, __I_TRACE_FMT, __I_TRACE_ARGS); \ -// \ -// return plibc_ ## __I_FUNC_NAME (__I_CALL_ARGS); \ -//} +#include + +#if 0 +INTERCEPT_PROTOTYPE(void, malloc, size_t size) +INTERCEPT_TRACE("size %d", size) +INTERCEPT_CALL_ARGS(size) +INTERCEPT() + +#define INTERCEPT_FUNC(type, name, args...) \ +__I_FUNC_TYPE(type) \ +__I_FUNC_NAME(name) \ +__I_FUNC_ARGS(args) + +#define INTERCEPT_TRACE(fmt, args...) \ +#define __I_TRACE_FMT fmt \ +#define __I_TRACE_ARGS args + +#define INTERCEPT_CALL_ARGS(args...) \ +#define __I_CALL_ARGS args + +#define INTERCEPT() \ +__I_FUNC_TYPE __I_FUNC_NAME(__I_FUNC_ARGS) \ +{ \ + static __I_FUNC_TYPE (*plibc_ ## __I_FUNC_NAME)(args) = NULL; \ + \ + if(plibc_ ## __I_FUNC_NAME == NULL) { \ + plibc_ ## __I_FUNC_NAME = dlsym(RTLD_NEXT, "malloc"); \ + if(plibc_ ## __I_FUNC_NAME == NULL) { \ + fprintf(stderr, "mallocwrap: unable to find malloc\n"); \ + return NULL; \ + } \ + } \ + \ + trace_mark(ust, __I_FUNC_NAME, __I_TRACE_FMT, __I_TRACE_ARGS); \ + \ + return plibc_ ## __I_FUNC_NAME (__I_CALL_ARGS); \ +} +#endif void *malloc(size_t size) { @@ -69,13 +88,13 @@ void free(void *ptr) plibc_free = dlsym(RTLD_NEXT, "free"); if(plibc_free == NULL) { fprintf(stderr, "mallocwrap: unable to find free\n"); - return NULL; + return; } } trace_mark(ust, free, "%p", ptr); - return plibc_free(ptr); + plibc_free(ptr); } MARKER_LIB