From 9d34b2263291fa3007c128d5ec667218884ee50a Mon Sep 17 00:00:00 2001 From: Stefan Seefeld Date: Wed, 7 Aug 2013 14:34:02 -0400 Subject: [PATCH] Add trace support for memalign and posix_memalign Signed-off-by: Stefan Seefeld Signed-off-by: Mathieu Desnoyers --- liblttng-ust-libc-wrapper/lttng-ust-malloc.c | 34 ++++++++++++++++++++ liblttng-ust-libc-wrapper/ust_libc.h | 19 +++++++++++ 2 files changed, 53 insertions(+) diff --git a/liblttng-ust-libc-wrapper/lttng-ust-malloc.c b/liblttng-ust-libc-wrapper/lttng-ust-malloc.c index 4fe8fa97..33ed18be 100644 --- a/liblttng-ust-libc-wrapper/lttng-ust-malloc.c +++ b/liblttng-ust-libc-wrapper/lttng-ust-malloc.c @@ -133,3 +133,37 @@ void *realloc(void *ptr, size_t size) tracepoint(ust_libc, realloc, ptr, size, retval); return retval; } + +void *memalign(size_t alignment, size_t size) +{ + static void *(*plibc_memalign)(size_t alignment, size_t size); + void *retval; + + if (plibc_memalign == NULL) { + plibc_memalign = dlsym(RTLD_NEXT, "memalign"); + if (plibc_memalign == NULL) { + fprintf(stderr, "memalignwrap: unable to find memalign\n"); + return NULL; + } + } + retval = plibc_memalign(alignment, size); + tracepoint(ust_libc, memalign, alignment, size, retval); + return retval; +} + +int posix_memalign(void **memptr, size_t alignment, size_t size) +{ + static int(*plibc_posix_memalign)(void **memptr, size_t alignment, size_t size); + int retval; + + if (plibc_posix_memalign == NULL) { + plibc_posix_memalign = dlsym(RTLD_NEXT, "posix_memalign"); + if (plibc_posix_memalign == NULL) { + fprintf(stderr, "posix_memalignwrap: unable to find posix_memalign\n"); + return ENOMEM; + } + } + retval = plibc_posix_memalign(memptr, alignment, size); + tracepoint(ust_libc, posix_memalign, *memptr, alignment, size, retval); + return retval; +} diff --git a/liblttng-ust-libc-wrapper/ust_libc.h b/liblttng-ust-libc-wrapper/ust_libc.h index d2096a3a..a8ff9c65 100644 --- a/liblttng-ust-libc-wrapper/ust_libc.h +++ b/liblttng-ust-libc-wrapper/ust_libc.h @@ -65,6 +65,25 @@ TRACEPOINT_EVENT(ust_libc, realloc, ) ) +TRACEPOINT_EVENT(ust_libc, memalign, + TP_ARGS(size_t, alignment, size_t, size, void *, ptr), + TP_FIELDS( + ctf_integer(size_t, alignment, alignment) + ctf_integer(size_t, size, size) + ctf_integer_hex(void *, ptr, ptr) + ) +) + +TRACEPOINT_EVENT(ust_libc, posix_memalign, + TP_ARGS(void *, out_ptr, size_t, alignment, size_t, size, int, result), + TP_FIELDS( + ctf_integer_hex(void *, out_ptr, out_ptr) + ctf_integer(size_t, alignment, alignment) + ctf_integer(size_t, size, size) + ctf_integer(int, result, result) + ) +) + #endif /* _TRACEPOINT_UST_LIBC_H */ #undef TRACEPOINT_INCLUDE -- 2.34.1