#include <lttng/ust-compiler.h>
#ifdef LTTNG_UST_HAVE_SDT_INTEGRATION
-#define SDT_USE_VARIADIC
+/*
+ * Instead of using SDT_USE_VARIADIC from 'sys/sdt.h', use our own namespaced
+ * macros since the instrumented application might already have included
+ * 'sys/sdt.h' without variadic support.
+ */
#include <sys/sdt.h>
-#define LTTNG_STAP_PROBEV STAP_PROBEV
+
+#define _LTTNG_SDT_NARG(...) \
+ __LTTNG_SDT_NARG(__VA_ARGS__, 12,11,10,9,8,7,6,5,4,3,2,1,0)
+
+#define __LTTNG_SDT_NARG(_0,_1,_2,_3,_4,_5,_6,_7,_8,_9,_10,_11,_12, N, ...) N
+
+#define _LTTNG_SDT_PROBE_N(provider, name, N, ...) \
+ _SDT_PROBE(provider, name, N, (__VA_ARGS__))
+
+#define LTTNG_STAP_PROBEV(provider, name, ...) \
+ _LTTNG_SDT_PROBE_N(provider, name, _LTTNG_SDT_NARG(0, ##__VA_ARGS__), ##__VA_ARGS__)
+
#else
#define LTTNG_STAP_PROBEV(...)
#endif
}; \
static struct lttng_ust_tracepoint * \
__tracepoint_ptr_##_provider##___##_name \
- __attribute__((used, section("__tracepoints_ptrs"))) = \
+ __attribute__((section("__tracepoints_ptrs"), used)) \
+ __lttng_ust_variable_attribute_no_sanitize_address = \
&__tracepoint_##_provider##___##_name;
static void lttng_ust_notrace __attribute__((constructor))
* How to use the TRACEPOINT_EVENT macro:
*
* An example:
- *
+ *
* TRACEPOINT_EVENT(someproject_component, event_name,
*
* * TP_ARGS takes from 0 to 10 "type, field_name" pairs *
* * TP_FIELDS describes the event payload layout in the trace *
*
* TP_FIELDS(
- * * Integer, printed in base 10 *
+ * * Integer, printed in base 10 *
* ctf_integer(int, field_a, arg0)
*
- * * Integer, printed with 0x base 16 *
+ * * Integer, printed with 0x base 16 *
* ctf_integer_hex(unsigned long, field_d, arg1)
*
* * Enumeration *
* ctf_enum(someproject_component, enum_name, int, field_e, arg0)
*
- * * Array Sequence, printed as UTF8-encoded array of bytes *
+ * * Array Sequence, printed as UTF8-encoded array of bytes *
* ctf_array_text(char, field_b, string, FIXED_LEN)
* ctf_sequence_text(char, field_c, string, size_t, strlen)
*
- * * String, printed as UTF8-encoded string *
+ * * String, printed as UTF8-encoded string *
* ctf_string(field_e, string)
*
- * * Array sequence of signed integer values *
+ * * Array sequence of signed integer values *
* ctf_array(long, field_f, arg4, FIXED_LEN4)
* ctf_sequence(long, field_g, arg4, size_t, arg4_len)
* )