X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=include%2Flttng%2Ftracepoint.h;h=1cf02188f37f78eafb1f61a32b56e99f748b697e;hb=23b75ae5efa941fbd8ab666ae3dcf161789dfde5;hp=d77a2fb298c40f99c7fd290eb48eda48d36bcae9;hpb=0fd0de100bc6633e8ecf575301dc92321db32575;p=lttng-ust.git diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h index d77a2fb2..1cf02188 100644 --- a/include/lttng/tracepoint.h +++ b/include/lttng/tracepoint.h @@ -35,9 +35,24 @@ #include #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 -#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 @@ -441,7 +456,8 @@ extern struct lttng_ust_tracepoint * const __stop___tracepoints_ptrs[] }; \ 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)) @@ -580,7 +596,7 @@ __tracepoints__ptrs_destroy(void) * 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 * @@ -591,23 +607,23 @@ __tracepoints__ptrs_destroy(void) * * 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) * )