From: Pierre-Marc Fournier Date: Wed, 17 Mar 2010 17:49:09 +0000 (-0400) Subject: rename libmallocwrap -> libustinstr-malloc X-Git-Tag: v0.4~2 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=d169a27dd79a872d5c44f0547a2bb33bb8402b80;p=ust.git rename libmallocwrap -> libustinstr-malloc --- diff --git a/Makefile.am b/Makefile.am index e2d131a..112e8eb 100644 --- a/Makefile.am +++ b/Makefile.am @@ -5,7 +5,7 @@ ACLOCAL_AMFLAGS = -I m4 # libust and '.' (that contains the linker script). However, '.' # must be installed after libust so it can overwrite libust.so with # the linker script. -SUBDIRS = snprintf libustcomm libust . tests libmallocwrap ustd ustctl libustfork include +SUBDIRS = snprintf libustcomm libust . tests libustinstr-malloc ustd ustctl libustfork include EXTRA_DIST = doc libust.ldscript.in libust-initializer.c dist_bin_SCRIPTS = usttrace diff --git a/configure.ac b/configure.ac index 908f547..1092d25 100644 --- a/configure.ac +++ b/configure.ac @@ -117,7 +117,7 @@ AC_CONFIG_FILES([ tests/snprintf/Makefile tests/test-nevents/Makefile tests/test-libmallocwrap/Makefile - libmallocwrap/Makefile + libustinstr-malloc/Makefile libustfork/Makefile ustd/Makefile ustctl/Makefile diff --git a/libmallocwrap/Makefile.am b/libmallocwrap/Makefile.am deleted file mode 100644 index a98fe35..0000000 --- a/libmallocwrap/Makefile.am +++ /dev/null @@ -1,8 +0,0 @@ -AM_CPPFLAGS = -I$(top_srcdir)/include - -lib_LTLIBRARIES = libmallocwrap.la -libmallocwrap_la_SOURCES = mallocwrap.c -libmallocwrap_la_LIBADD = -ldl - -noinst_SCRIPTS = run -EXTRA_DIST = run diff --git a/libmallocwrap/README b/libmallocwrap/README deleted file mode 100644 index 333a01e..0000000 --- a/libmallocwrap/README +++ /dev/null @@ -1,8 +0,0 @@ -libmallocwrap is used for instrumenting calls to malloc(3) in a program, without -need for recompiling it. - -libmallocwrap defines a malloc() function that is instrumented with a marker. It -also calls the libc malloc afterwards. When loaded with LD_PRELOAD, it replaces -the libc malloc() function, in effect instrumenting all calls to malloc(). - -See the "run" script for a usage example. diff --git a/libmallocwrap/mallocwrap.c b/libmallocwrap/mallocwrap.c deleted file mode 100644 index f5d5ce3..0000000 --- a/libmallocwrap/mallocwrap.c +++ /dev/null @@ -1,100 +0,0 @@ -/* 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 - -#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) -{ - 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); - - trace_mark(ust, malloc, "size %d ptr %p", (int)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; - } - } - - trace_mark(ust, free, "ptr %p", ptr); - - plibc_free(ptr); -} - -MARKER_LIB diff --git a/libmallocwrap/run b/libmallocwrap/run deleted file mode 100644 index ce4fd10..0000000 --- a/libmallocwrap/run +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -LD_VERBOSE=1 LD_LIBRARY_PATH=.:../libust/.libs:../../liburcu LD_PRELOAD=liburcu.so:libust.so:.libs/libmallocwrap.so $1 diff --git a/libustinstr-malloc/Makefile.am b/libustinstr-malloc/Makefile.am new file mode 100644 index 0000000..0f9007a --- /dev/null +++ b/libustinstr-malloc/Makefile.am @@ -0,0 +1,8 @@ +AM_CPPFLAGS = -I$(top_srcdir)/include + +lib_LTLIBRARIES = libustinstr-malloc.la +libustinstr_malloc_la_SOURCES = mallocwrap.c +libustinstr_malloc_la_LIBADD = -ldl + +noinst_SCRIPTS = run +EXTRA_DIST = run diff --git a/libustinstr-malloc/README b/libustinstr-malloc/README new file mode 100644 index 0000000..333a01e --- /dev/null +++ b/libustinstr-malloc/README @@ -0,0 +1,8 @@ +libmallocwrap is used for instrumenting calls to malloc(3) in a program, without +need for recompiling it. + +libmallocwrap defines a malloc() function that is instrumented with a marker. It +also calls the libc malloc afterwards. When loaded with LD_PRELOAD, it replaces +the libc malloc() function, in effect instrumenting all calls to malloc(). + +See the "run" script for a usage example. diff --git a/libustinstr-malloc/mallocwrap.c b/libustinstr-malloc/mallocwrap.c new file mode 100644 index 0000000..f5d5ce3 --- /dev/null +++ b/libustinstr-malloc/mallocwrap.c @@ -0,0 +1,100 @@ +/* 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 + +#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) +{ + 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); + + trace_mark(ust, malloc, "size %d ptr %p", (int)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; + } + } + + trace_mark(ust, free, "ptr %p", ptr); + + plibc_free(ptr); +} + +MARKER_LIB diff --git a/libustinstr-malloc/run b/libustinstr-malloc/run new file mode 100644 index 0000000..ce4fd10 --- /dev/null +++ b/libustinstr-malloc/run @@ -0,0 +1,3 @@ +#!/bin/sh + +LD_VERBOSE=1 LD_LIBRARY_PATH=.:../libust/.libs:../../liburcu LD_PRELOAD=liburcu.so:libust.so:.libs/libmallocwrap.so $1 diff --git a/usttrace b/usttrace index 0d2a68a..6ffc988 100755 --- a/usttrace +++ b/usttrace @@ -28,7 +28,7 @@ if [ -x "${USTTRACE_DIR}/ustd/ustd" ] ; then # Use the not installed libraries instead USTD="${USTTRACE_DIR}/ustd/ustd" LIBINTERFORK_PATH="${USTTRACE_DIR}/libustfork/.libs/libustfork.so" - LIBMALLOCWRAP_PATH="${USTTRACE_DIR}/libmallocwrap/.libs/libmallocwrap.so" + LIBMALLOCWRAP_PATH="${USTTRACE_DIR}/libustinstr-malloc/.libs/libustinstr-malloc.so" LIBUST_PATH="${USTTRACE_DIR}/libust/.libs/libust.so" else # Use the libraries that the dynamic link finds @@ -38,7 +38,7 @@ else exit 1 fi LIBINTERFORK_PATH="libustfork.so" - LIBMALLOCWRAP_PATH="libmallocwrap.so" + LIBMALLOCWRAP_PATH="libustinstr-malloc.so" LIBUST_PATH="libust.so.0" fi