From 486ddde2c4946d3e7da2c9b217e28c08b36931f5 Mon Sep 17 00:00:00 2001 From: David Goulet Date: Tue, 3 Nov 2020 08:59:29 -0500 Subject: [PATCH] configure: Check STAP_PROBEV macro when building with USDT tracing It turns out that STAP_PROBEV() is not available on FreeBSD thus having sdt/sdt.h is not enough. Look for it now at configure time. Closes #40174 Signed-off-by: David Goulet --- changes/ticket40174 | 4 ++++ configure.ac | 24 +++++++++++++++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) create mode 100644 changes/ticket40174 diff --git a/changes/ticket40174 b/changes/ticket40174 new file mode 100644 index 0000000000..869a2756f4 --- /dev/null +++ b/changes/ticket40174 @@ -0,0 +1,4 @@ + o Minor bugfixes (configure, build): + - With USDT tracing enabled, if STAP_PROBEV() is missing, don't attempt to + build. Linux supports that macro but not the BSDs. Fixes bug 40174; bugfix + on 0.4.5.1-alpha. diff --git a/configure.ac b/configure.ac index 165b337a21..8bb6e6bbde 100644 --- a/configure.ac +++ b/configure.ac @@ -292,11 +292,25 @@ if test "x$enable_tracing_instrumentation_usdt" = "xyes"; then AC_CHECK_HEADERS([sys/sdt.h], [], [AC_MSG_ERROR([USDT instrumentation requires sys/sdt.h header. On Debian, apt install systemtap-sdt-dev])], []) - dnl LTTng generates USDT probes if the UST library was built with - dnl --with-sdt. There is unfortunately no way to check that so we always - dnl build the USDT probes even though LTTng instrumentation was requested. - AC_DEFINE([USE_TRACING_INSTRUMENTATION_USDT], [1], [Using USDT instrumentation]) - have_tracing=1 + AC_MSG_CHECKING([STAP_PROBEV()]) + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ + #define SDT_USE_VARIADIC + #include + void test(void) + { + STAP_PROBEV(p, n, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12); + } + ]])], [ + AC_MSG_RESULT([yes]) + dnl LTTng generates USDT probes if the UST library was built with + dnl --with-sdt. There is unfortunately no way to check that so we always + dnl build the USDT probes even though LTTng instrumentation was requested. + AC_DEFINE([USE_TRACING_INSTRUMENTATION_USDT], [1], [Using USDT instrumentation]) + have_tracing=1 + ], [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([USDT tracing support requires STAP_PROBEV()]) + ]) fi dnl Tracepoints event to debug logs.