utrace support with label based signature.

This commit is contained in:
David Carlier 2020-11-23 15:00:38 +00:00 committed by David Goldblatt
parent 92e189be8b
commit 520b75fa2d
4 changed files with 30 additions and 6 deletions

View File

@ -1405,10 +1405,25 @@ JE_COMPILABLE([utrace(2)], [
utrace((void *)0, 0); utrace((void *)0, 0);
], [je_cv_utrace]) ], [je_cv_utrace])
if test "x${je_cv_utrace}" = "xno" ; then if test "x${je_cv_utrace}" = "xno" ; then
JE_COMPILABLE([utrace(2) with label], [
#include <sys/types.h>
#include <sys/param.h>
#include <sys/time.h>
#include <sys/uio.h>
#include <sys/ktrace.h>
], [
utrace((void *)0, (void *)0, 0);
], [je_cv_utrace_label])
if test "x${je_cv_utrace_label}" = "xno"; then
enable_utrace="0" enable_utrace="0"
fi fi
if test "x$enable_utrace" = "x1" ; then if test "x$enable_utrace" = "x1" ; then
AC_DEFINE([JEMALLOC_UTRACE_LABEL], [ ])
fi
else
if test "x$enable_utrace" = "x1" ; then
AC_DEFINE([JEMALLOC_UTRACE], [ ]) AC_DEFINE([JEMALLOC_UTRACE], [ ])
fi
fi fi
AC_SUBST([enable_utrace]) AC_SUBST([enable_utrace])

View File

@ -173,6 +173,9 @@
/* Support utrace(2)-based tracing. */ /* Support utrace(2)-based tracing. */
#undef JEMALLOC_UTRACE #undef JEMALLOC_UTRACE
/* Support utrace(2)-based tracing (label based signature). */
#undef JEMALLOC_UTRACE_LABEL
/* Support optional abort() on OOM. */ /* Support optional abort() on OOM. */
#undef JEMALLOC_XMALLOC #undef JEMALLOC_XMALLOC

View File

@ -4,8 +4,14 @@
#include "jemalloc_internal_defs.h" #include "jemalloc_internal_defs.h"
#include "jemalloc/internal/jemalloc_internal_decls.h" #include "jemalloc/internal/jemalloc_internal_decls.h"
#ifdef JEMALLOC_UTRACE #if defined(JEMALLOC_UTRACE) || defined(JEMALLOC_UTRACE_LABEL)
#include <sys/ktrace.h> #include <sys/ktrace.h>
# if defined(JEMALLOC_UTRACE)
# define UTRACE_CALL(p, l) utrace(p, l)
# else
# define UTRACE_CALL(p, l) utrace("jemalloc_process", p, l)
# define JEMALLOC_UTRACE
# endif
#endif #endif
#define JEMALLOC_NO_DEMANGLE #define JEMALLOC_NO_DEMANGLE

View File

@ -250,7 +250,7 @@ typedef struct {
ut.p = (a); \ ut.p = (a); \
ut.s = (b); \ ut.s = (b); \
ut.r = (c); \ ut.r = (c); \
utrace(&ut, sizeof(ut)); \ UTRACE_CALL(&ut, sizeof(ut)); \
errno = utrace_serrno; \ errno = utrace_serrno; \
} \ } \
} while (0) } while (0)