#include <lttng/tracepoint-types.h>
#include <lttng/tracepoint-rcu.h>
#include <urcu/compiler.h>
+#include <urcu/system.h>
#include <dlfcn.h> /* for dlopen */
#include <string.h> /* for memset */
#include <lttng/ust-config.h> /* for sdt */
#ifdef LTTNG_UST_HAVE_SDT_INTEGRATION
#define SDT_USE_VARIADIC
#include <sys/sdt.h>
+#define LTTNG_STAP_PROBEV STAP_PROBEV
#else
-#define STAP_PROBEV(...)
+#define LTTNG_STAP_PROBEV(...)
#endif
#ifdef __cplusplus
extern "C" {
#endif
+#define tracepoint_enabled(provider, name) \
+ caa_unlikely(CMM_LOAD_SHARED(__tracepoint_##provider##___##name.state))
+
+#define do_tracepoint(provider, name, ...) \
+ __tracepoint_cb_##provider##___##name(__VA_ARGS__)
+
#define tracepoint(provider, name, ...) \
do { \
- STAP_PROBEV(provider, name, ## __VA_ARGS__); \
- if (caa_unlikely(__tracepoint_##provider##___##name.state)) \
- __tracepoint_cb_##provider##___##name(__VA_ARGS__); \
+ LTTNG_STAP_PROBEV(provider, name, ## __VA_ARGS__); \
+ if (tracepoint_enabled(provider, name)) \
+ do_tracepoint(provider, name, __VA_ARGS__); \
} while (0)
#define TP_ARGS(...) __VA_ARGS__