[lttng-dev] [PATCH] Fix: tracepoint.h: define SDT_USE_VARIADIC in pkg-config CFLAGS

Stefan Hajnoczi stefanha at redhat.com
Wed Jun 24 12:09:34 EDT 2020


LTTng Userspace Tracer 2.11 with sdt enabled can break builds of
applications that include <sys/sdt.h> themselves. QEMU
(https://qemu.org/) is one example.

When applications include <sys/sdt.h> themselves before LTTng Userspace
Tracer header files and the SDT_USE_VARIADIC macro is not defined,
compilation fails due to the absense of STAP_PROBEV() macro that LTTng
Userspace Tracer requires.

Define SDT_USE_VARIADIC in the pkg-config file so that all compilation
units that use LTTng Userspace Tracer are guaranteed to have the macro
defined even if <sys/sdt.h> is included elsewhere before LTTng Userspace
Tracer header files.

In other words, define SDT_USE_VARIADIC on the compiler command-line
instead of in <lttng/tracepoint.h>. This way it will always been defined
when <sys/sdt.h> is included.

Make sure to define SDT_USE_VARIADIC when <lttng/tracepoint.h> is
included without it. This happens when applications do not use
pkg-config.

Fixes: b2f60c7986bb69f81b79b68f1bfe83aafa3278a7 ("Add sdt.h integration")
Signed-off-by: Stefan Hajnoczi <stefanha at redhat.com>
---
Warning: this patch doesn't work yet. SDT_CFLAGS also needs to be passed
into LTTng Userspace Tracer's own CFLAGS so that compilation can
succeed. I don't know the autoconf/automake syntax to do this and wanted
to see what you think of this solution before investing more time.
---
 include/lttng/tracepoint.h | 2 ++
 configure.ac               | 2 ++
 lttng-ust.pc.in            | 2 +-
 3 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h
index 7cfae3e4..6b699373 100644
--- a/include/lttng/tracepoint.h
+++ b/include/lttng/tracepoint.h
@@ -35,7 +35,9 @@
 #include <lttng/ust-compiler.h>
 
 #ifdef LTTNG_UST_HAVE_SDT_INTEGRATION
+#ifndef SDT_USE_VARIADIC
 #define SDT_USE_VARIADIC
+#endif
 #include <sys/sdt.h>
 #define LTTNG_STAP_PROBEV STAP_PROBEV
 #else
diff --git a/configure.ac b/configure.ac
index eb1bb3e6..bb3eeb60 100644
--- a/configure.ac
+++ b/configure.ac
@@ -427,6 +427,7 @@ AS_IF([test "x$with_sdt" = "xyes"], [
 	]])], [
 		AC_MSG_RESULT([yes])
 		AC_DEFINE([LTTNG_UST_HAVE_SDT_INTEGRATION], [1])
+		SDT_CFLAGS="-DSDT_USE_VARIADIC"
 	], [
 		AC_MSG_RESULT([no])
 		AC_MSG_ERROR([The sdt.h integration was requested but the STAP_PROBEV define cannot be used. Make sure it is installed, and up to date, or use CPPFLAGS=-I/path/ to specify a non-standard path to sys/sdt.h])
@@ -522,6 +523,7 @@ _AC_DEFINE_AND_SUBST([LTTNG_UST_DEFAULT_CONSTRUCTOR_TIMEOUT_MS], [3000])
 AM_CFLAGS="-Wall"
 AC_SUBST(AM_CFLAGS)
 AC_SUBST(JNI_CPPFLAGS)
+AC_SUBST(SDT_CFLAGS)
 
 AC_CONFIG_FILES([
 	Makefile
diff --git a/lttng-ust.pc.in b/lttng-ust.pc.in
index f9adde87..1b96db06 100644
--- a/lttng-ust.pc.in
+++ b/lttng-ust.pc.in
@@ -9,5 +9,5 @@ Version: @PACKAGE_VERSION@
 Requires:
 Requires.private: liburcu-bp
 Libs: -L${libdir} -llttng-ust -ldl
-Cflags: -I${includedir} 
+Cflags: -I${includedir} @SDT_CFLAGS@
 
-- 
2.26.2



More information about the lttng-dev mailing list