X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=include%2Flttng%2Ftracepoint.h;h=48781e8ebcf01de30106fa3f78fc52e88f65cf09;hb=0274f7f24e55825f2a51804d50100676d468c06d;hp=b47b1e0e1c00ab5eb5d1a79356762b8852b35874;hpb=b88f9167c530abc0726b43f18154a8629ee289b8;p=lttng-ust.git diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h index b47b1e0e..48781e8e 100644 --- a/include/lttng/tracepoint.h +++ b/include/lttng/tracepoint.h @@ -19,6 +19,9 @@ #include /* for sdt */ #include #include +#include + +#define LTTNG_UST_TRACEPOINT_NAME_LEN_MAX 256 #ifdef LTTNG_UST_HAVE_SDT_INTEGRATION /* @@ -47,23 +50,23 @@ extern "C" { #endif -#define tracepoint_enabled(provider, name) \ - caa_unlikely(CMM_LOAD_SHARED(__tracepoint_##provider##___##name.state)) +#define lttng_ust_tracepoint_enabled(provider, name) \ + caa_unlikely(CMM_LOAD_SHARED(lttng_ust_tracepoint_##provider##___##name.state)) -#define do_tracepoint(provider, name, ...) \ - __tracepoint_cb_##provider##___##name(__VA_ARGS__) +#define lttng_ust_do_tracepoint(provider, name, ...) \ + lttng_ust_tracepoint_cb_##provider##___##name(__VA_ARGS__) -#define tracepoint(provider, name, ...) \ - do { \ - LTTNG_UST_STAP_PROBEV(provider, name, ## __VA_ARGS__); \ - if (tracepoint_enabled(provider, name)) \ - do_tracepoint(provider, name, __VA_ARGS__); \ +#define lttng_ust_tracepoint(provider, name, ...) \ + do { \ + LTTNG_UST_STAP_PROBEV(provider, name, ## __VA_ARGS__); \ + if (lttng_ust_tracepoint_enabled(provider, name)) \ + lttng_ust_do_tracepoint(provider, name, __VA_ARGS__); \ } while (0) -#define TP_ARGS(...) __VA_ARGS__ +#define LTTNG_UST_TP_ARGS(...) __VA_ARGS__ /* - * TP_ARGS takes tuples of type, argument separated by a comma. + * LTTNG_UST_TP_ARGS takes tuples of type, argument separated by a comma. * It can take up to 10 tuples (which means that less than 10 tuples is * fine too). * Each tuple is also separated by a comma. @@ -154,25 +157,44 @@ extern "C" { #define _TP_ARGS_DATA_VAR(...) _TP_DATA_VAR_N(_TP_NARGS(0, ##__VA_ARGS__), ##__VA_ARGS__) #define _TP_PARAMS(...) __VA_ARGS__ +/* + * sizeof(#_provider) - 1 : length of the provider string (excluding \0). + * sizeof(#_name) - 1 : length of the name string (excluding \0). + * + 1 : separator between provider and event name. + * + * Upper bound (inclusive) is LTTNG_UST_TRACEPOINT_NAME_LEN_MAX - 1 to + * account for \0. + * + * The comparison is: + * left hand side: sizeof(#_provider) - 1 + sizeof(#_name) - 1 + 1 + * right hand side: LTTNG_UST_TRACEPOINT_NAME_LEN_MAX - 1 + * operator: <= (inclusive) + * Simplified in the code below. + */ +#define lttng_ust_tracepoint_validate_name_len(_provider, _name) \ + lttng_ust_static_assert(sizeof(#_provider) + sizeof(#_name) <= LTTNG_UST_TRACEPOINT_NAME_LEN_MAX, \ + "Tracepoint name length is too long", \ + Tracepoint_name_length_is_too_long) + /* * The tracepoint cb is marked always inline so we can distinguish * between caller's ip addresses within the probe using the return * address. */ -#define _DECLARE_TRACEPOINT(_provider, _name, ...) \ -extern struct lttng_ust_tracepoint __tracepoint_##_provider##___##_name; \ +#define LTTNG_UST__DECLARE_TRACEPOINT(_provider, _name, ...) \ +extern struct lttng_ust_tracepoint lttng_ust_tracepoint_##_provider##___##_name; \ static inline \ -void __tracepoint_cb_##_provider##___##_name(_TP_ARGS_PROTO(__VA_ARGS__)) \ +void lttng_ust_tracepoint_cb_##_provider##___##_name(_TP_ARGS_PROTO(__VA_ARGS__)) \ __attribute__((always_inline, unused)) lttng_ust_notrace; \ static \ -void __tracepoint_cb_##_provider##___##_name(_TP_ARGS_PROTO(__VA_ARGS__)) \ +void lttng_ust_tracepoint_cb_##_provider##___##_name(_TP_ARGS_PROTO(__VA_ARGS__)) \ { \ struct lttng_ust_tracepoint_probe *__tp_probe; \ \ if (caa_unlikely(!TP_RCU_LINK_TEST())) \ return; \ tp_rcu_read_lock(); \ - __tp_probe = tp_rcu_dereference(__tracepoint_##_provider##___##_name.probes); \ + __tp_probe = tp_rcu_dereference(lttng_ust_tracepoint_##_provider##___##_name.probes); \ if (caa_unlikely(!__tp_probe)) \ goto end; \ do { \ @@ -186,31 +208,31 @@ end: \ tp_rcu_read_unlock(); \ } \ static inline \ -void __tracepoint_register_##_provider##___##_name(char *name, \ +void lttng_ust_tracepoint_register_##_provider##___##_name(char *provider_name, char *event_name, \ void (*func)(void), void *data) \ lttng_ust_notrace; \ static inline \ -void __tracepoint_register_##_provider##___##_name(char *name, \ +void lttng_ust_tracepoint_register_##_provider##___##_name(char *provider_name, char *event_name, \ void (*func)(void), void *data) \ { \ - __tracepoint_probe_register(name, func, data, \ - __tracepoint_##_provider##___##_name.signature); \ + lttng_ust_tracepoint_probe_register(provider_name, event_name, func, data, \ + lttng_ust_tracepoint_##_provider##___##_name.signature); \ } \ static inline \ -void __tracepoint_unregister_##_provider##___##_name(char *name, \ +void lttng_ust_tracepoint_unregister_##_provider##___##_name(char *provider_name, char *event_name, \ void (*func)(void), void *data) \ lttng_ust_notrace; \ static inline \ -void __tracepoint_unregister_##_provider##___##_name(char *name, \ +void lttng_ust_tracepoint_unregister_##_provider##___##_name(char *provider_name, char *event_name, \ void (*func)(void), void *data) \ { \ - __tracepoint_probe_unregister(name, func, data); \ + lttng_ust_tracepoint_probe_unregister(provider_name, event_name, func, data); \ } -extern int __tracepoint_probe_register(const char *name, void (*func)(void), - void *data, const char *signature); -extern int __tracepoint_probe_unregister(const char *name, void (*func)(void), - void *data); +extern int lttng_ust_tracepoint_probe_register(const char *provider_name, const char *event_name, + void (*func)(void), void *data, const char *signature); +extern int lttng_ust_tracepoint_probe_unregister(const char *provider_name, const char *event_name, + void (*func)(void), void *data); /* * tracepoint dynamic linkage handling (callbacks). Hidden visibility: @@ -239,19 +261,19 @@ struct lttng_ust_tracepoint_dlopen { /* End of base ABI. Fields below should be used after checking struct_size. */ }; -extern struct lttng_ust_tracepoint_dlopen tracepoint_dlopen; -extern struct lttng_ust_tracepoint_dlopen *tracepoint_dlopen_ptr; +extern struct lttng_ust_tracepoint_dlopen lttng_ust_tracepoint_dlopen; +extern struct lttng_ust_tracepoint_dlopen *lttng_ust_tracepoint_dlopen_ptr; /* * These weak symbols, the constructor, and destructor take care of * registering only _one_ instance of the tracepoints per shared-ojbect * (or for the whole main program). */ -int __tracepoint_registered +int lttng_ust_tracepoint_registered __attribute__((weak, visibility("hidden"))); -int __tracepoint_ptrs_registered +int lttng_ust_tracepoint_ptrs_registered __attribute__((weak, visibility("hidden"))); -struct lttng_ust_tracepoint_dlopen tracepoint_dlopen +struct lttng_ust_tracepoint_dlopen lttng_ust_tracepoint_dlopen __attribute__((weak, visibility("hidden"))) = { .struct_size = sizeof(struct lttng_ust_tracepoint_dlopen), }; @@ -265,7 +287,7 @@ struct lttng_ust_tracepoint_dlopen tracepoint_dlopen * scoping match that of the other weak hidden symbols found in this * header. */ -struct lttng_ust_tracepoint_dlopen *tracepoint_dlopen_ptr +struct lttng_ust_tracepoint_dlopen *lttng_ust_tracepoint_dlopen_ptr __attribute__((weak, visibility("hidden"))); /* @@ -290,62 +312,62 @@ struct lttng_ust_tracepoint_destructors_syms { /* End of base ABI. Fields below should be used after checking struct_size. */ }; -extern struct lttng_ust_tracepoint_destructors_syms tracepoint_destructors_syms; -extern struct lttng_ust_tracepoint_destructors_syms *tracepoint_destructors_syms_ptr; +extern struct lttng_ust_tracepoint_destructors_syms lttng_ust_tracepoint_destructors_syms; +extern struct lttng_ust_tracepoint_destructors_syms *lttng_ust_tracepoint_destructors_syms_ptr; -struct lttng_ust_tracepoint_destructors_syms tracepoint_destructors_syms +struct lttng_ust_tracepoint_destructors_syms lttng_ust_tracepoint_destructors_syms __attribute__((weak, visibility("hidden"))) = { .struct_size = sizeof(struct lttng_ust_tracepoint_destructors_syms), }; -struct lttng_ust_tracepoint_destructors_syms *tracepoint_destructors_syms_ptr +struct lttng_ust_tracepoint_destructors_syms *lttng_ust_tracepoint_destructors_syms_ptr __attribute__((weak, visibility("hidden"))); static inline void tracepoint_disable_destructors(void) { - if (!tracepoint_dlopen_ptr) - tracepoint_dlopen_ptr = &tracepoint_dlopen; - if (!tracepoint_destructors_syms_ptr) - tracepoint_destructors_syms_ptr = &tracepoint_destructors_syms; - if (tracepoint_dlopen_ptr->liblttngust_handle - && tracepoint_destructors_syms_ptr->tracepoint_disable_destructors) - tracepoint_destructors_syms_ptr->tracepoint_disable_destructors(); + if (!lttng_ust_tracepoint_dlopen_ptr) + lttng_ust_tracepoint_dlopen_ptr = <tng_ust_tracepoint_dlopen; + if (!lttng_ust_tracepoint_destructors_syms_ptr) + lttng_ust_tracepoint_destructors_syms_ptr = <tng_ust_tracepoint_destructors_syms; + if (lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle + && lttng_ust_tracepoint_destructors_syms_ptr->tracepoint_disable_destructors) + lttng_ust_tracepoint_destructors_syms_ptr->tracepoint_disable_destructors(); } #ifndef _LGPL_SOURCE static inline void -__tracepoint__init_urcu_sym(void) +lttng_ust_tracepoint__init_urcu_sym(void) lttng_ust_notrace; static inline void -__tracepoint__init_urcu_sym(void) +lttng_ust_tracepoint__init_urcu_sym(void) { - if (!tracepoint_dlopen_ptr) - tracepoint_dlopen_ptr = &tracepoint_dlopen; + if (!lttng_ust_tracepoint_dlopen_ptr) + lttng_ust_tracepoint_dlopen_ptr = <tng_ust_tracepoint_dlopen; /* * Symbols below are needed by tracepoint call sites and probe * providers. */ - if (!tracepoint_dlopen_ptr->rcu_read_lock_sym) - tracepoint_dlopen_ptr->rcu_read_lock_sym = + if (!lttng_ust_tracepoint_dlopen_ptr->rcu_read_lock_sym) + lttng_ust_tracepoint_dlopen_ptr->rcu_read_lock_sym = URCU_FORCE_CAST(void (*)(void), - dlsym(tracepoint_dlopen_ptr->liblttngust_handle, + dlsym(lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle, "tp_rcu_read_lock")); - if (!tracepoint_dlopen_ptr->rcu_read_unlock_sym) - tracepoint_dlopen_ptr->rcu_read_unlock_sym = + if (!lttng_ust_tracepoint_dlopen_ptr->rcu_read_unlock_sym) + lttng_ust_tracepoint_dlopen_ptr->rcu_read_unlock_sym = URCU_FORCE_CAST(void (*)(void), - dlsym(tracepoint_dlopen_ptr->liblttngust_handle, + dlsym(lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle, "tp_rcu_read_unlock")); - if (!tracepoint_dlopen_ptr->rcu_dereference_sym) - tracepoint_dlopen_ptr->rcu_dereference_sym = + if (!lttng_ust_tracepoint_dlopen_ptr->rcu_dereference_sym) + lttng_ust_tracepoint_dlopen_ptr->rcu_dereference_sym = URCU_FORCE_CAST(void *(*)(void *p), - dlsym(tracepoint_dlopen_ptr->liblttngust_handle, + dlsym(lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle, "tp_rcu_dereference_sym")); } #else static inline void -__tracepoint__init_urcu_sym(void) +lttng_ust_tracepoint__init_urcu_sym(void) lttng_ust_notrace; static inline void -__tracepoint__init_urcu_sym(void) +lttng_ust_tracepoint__init_urcu_sym(void) { } #endif @@ -356,21 +378,21 @@ __tracepoints__init(void) static void __tracepoints__init(void) { - if (__tracepoint_registered++) { - if (!tracepoint_dlopen_ptr->liblttngust_handle) + if (lttng_ust_tracepoint_registered++) { + if (!lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle) return; - __tracepoint__init_urcu_sym(); + lttng_ust_tracepoint__init_urcu_sym(); return; } - if (!tracepoint_dlopen_ptr) - tracepoint_dlopen_ptr = &tracepoint_dlopen; - if (!tracepoint_dlopen_ptr->liblttngust_handle) - tracepoint_dlopen_ptr->liblttngust_handle = + if (!lttng_ust_tracepoint_dlopen_ptr) + lttng_ust_tracepoint_dlopen_ptr = <tng_ust_tracepoint_dlopen; + if (!lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle) + lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle = dlopen(LTTNG_UST_TRACEPOINT_LIB_SONAME, RTLD_NOW | RTLD_GLOBAL); - if (!tracepoint_dlopen_ptr->liblttngust_handle) + if (!lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle) return; - __tracepoint__init_urcu_sym(); + lttng_ust_tracepoint__init_urcu_sym(); } static void @@ -381,21 +403,21 @@ __tracepoints__destroy(void) { int ret; - if (--__tracepoint_registered) + if (--lttng_ust_tracepoint_registered) return; - if (!tracepoint_dlopen_ptr) - tracepoint_dlopen_ptr = &tracepoint_dlopen; - if (!tracepoint_destructors_syms_ptr) - tracepoint_destructors_syms_ptr = &tracepoint_destructors_syms; - if (!tracepoint_dlopen_ptr->liblttngust_handle) + if (!lttng_ust_tracepoint_dlopen_ptr) + lttng_ust_tracepoint_dlopen_ptr = <tng_ust_tracepoint_dlopen; + if (!lttng_ust_tracepoint_destructors_syms_ptr) + lttng_ust_tracepoint_destructors_syms_ptr = <tng_ust_tracepoint_destructors_syms; + if (!lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle) return; - if (__tracepoint_ptrs_registered) + if (lttng_ust_tracepoint_ptrs_registered) return; /* * Lookup if destructors must be executed using the new method. */ - if (tracepoint_destructors_syms_ptr->tracepoint_get_destructors_state - && !tracepoint_destructors_syms_ptr->tracepoint_get_destructors_state()) { + if (lttng_ust_tracepoint_destructors_syms_ptr->tracepoint_get_destructors_state + && !lttng_ust_tracepoint_destructors_syms_ptr->tracepoint_get_destructors_state()) { /* * The tracepoint_get_destructors_state symbol was found with * dlsym but its returned value is 0 meaning that destructors @@ -403,12 +425,12 @@ __tracepoints__destroy(void) */ return; } - ret = dlclose(tracepoint_dlopen_ptr->liblttngust_handle); + ret = dlclose(lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle); if (ret) { fprintf(stderr, "Error (%d) in dlclose\n", ret); abort(); } - memset(tracepoint_dlopen_ptr, 0, sizeof(*tracepoint_dlopen_ptr)); + memset(lttng_ust_tracepoint_dlopen_ptr, 0, sizeof(*lttng_ust_tracepoint_dlopen_ptr)); } #ifdef TRACEPOINT_DEFINE @@ -435,7 +457,7 @@ extern struct lttng_ust_tracepoint * const __stop___tracepoints_ptrs[] #ifdef TRACEPOINT_PROBE_DYNAMIC_LINKAGE #define _TRACEPOINT_UNDEFINED_REF(provider) NULL #else /* TRACEPOINT_PROBE_DYNAMIC_LINKAGE */ -#define _TRACEPOINT_UNDEFINED_REF(provider) &__tracepoint_provider_##provider +#define _TRACEPOINT_UNDEFINED_REF(provider) <tng_ust_tracepoint_provider_##provider #endif /* TRACEPOINT_PROBE_DYNAMIC_LINKAGE */ /* @@ -445,25 +467,30 @@ extern struct lttng_ust_tracepoint * const __stop___tracepoints_ptrs[] */ #define _TP_EXTRACT_STRING(...) #__VA_ARGS__ -#define _DEFINE_TRACEPOINT(_provider, _name, _args) \ - extern int __tracepoint_provider_##_provider; \ - static const char __tp_strtab_##_provider##___##_name[] \ +#define LTTNG_UST__DEFINE_TRACEPOINT(_provider, _name, _args) \ + lttng_ust_tracepoint_validate_name_len(_provider, _name); \ + extern int lttng_ust_tracepoint_provider_##_provider; \ + static const char __tp_provider_strtab_##_provider##___##_name[] \ __attribute__((section("__tracepoints_strings"))) = \ - #_provider ":" #_name; \ - struct lttng_ust_tracepoint __tracepoint_##_provider##___##_name \ + #_provider; \ + static const char __tp_name_strtab_##_provider##___##_name[] \ + __attribute__((section("__tracepoints_strings"))) = \ + #_name; \ + struct lttng_ust_tracepoint lttng_ust_tracepoint_##_provider##___##_name \ __attribute__((section("__tracepoints"))) = { \ sizeof(struct lttng_ust_tracepoint), \ - __tp_strtab_##_provider##___##_name, \ + __tp_provider_strtab_##_provider##___##_name, \ + __tp_name_strtab_##_provider##___##_name, \ 0, \ NULL, \ _TRACEPOINT_UNDEFINED_REF(_provider), \ _TP_EXTRACT_STRING(_args), \ }; \ static struct lttng_ust_tracepoint * \ - __tracepoint_ptr_##_provider##___##_name \ + lttng_ust_tracepoint_ptr_##_provider##___##_name \ __attribute__((section("__tracepoints_ptrs"), used)) \ __lttng_ust_variable_attribute_no_sanitize_address = \ - &__tracepoint_##_provider##___##_name; + <tng_ust_tracepoint_##_provider##___##_name; static void __tracepoints__ptrs_init(void) @@ -471,36 +498,36 @@ __tracepoints__ptrs_init(void) static void __tracepoints__ptrs_init(void) { - if (__tracepoint_ptrs_registered++) + if (lttng_ust_tracepoint_ptrs_registered++) return; - if (!tracepoint_dlopen_ptr) - tracepoint_dlopen_ptr = &tracepoint_dlopen; - if (!tracepoint_dlopen_ptr->liblttngust_handle) - tracepoint_dlopen_ptr->liblttngust_handle = + if (!lttng_ust_tracepoint_dlopen_ptr) + lttng_ust_tracepoint_dlopen_ptr = <tng_ust_tracepoint_dlopen; + if (!lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle) + lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle = dlopen(LTTNG_UST_TRACEPOINT_LIB_SONAME, RTLD_NOW | RTLD_GLOBAL); - if (!tracepoint_dlopen_ptr->liblttngust_handle) + if (!lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle) return; - if (!tracepoint_destructors_syms_ptr) - tracepoint_destructors_syms_ptr = &tracepoint_destructors_syms; - tracepoint_dlopen_ptr->tracepoint_register_lib = + if (!lttng_ust_tracepoint_destructors_syms_ptr) + lttng_ust_tracepoint_destructors_syms_ptr = <tng_ust_tracepoint_destructors_syms; + lttng_ust_tracepoint_dlopen_ptr->tracepoint_register_lib = URCU_FORCE_CAST(int (*)(struct lttng_ust_tracepoint * const *, int), - dlsym(tracepoint_dlopen_ptr->liblttngust_handle, + dlsym(lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle, "tracepoint_register_lib")); - tracepoint_dlopen_ptr->tracepoint_unregister_lib = + lttng_ust_tracepoint_dlopen_ptr->tracepoint_unregister_lib = URCU_FORCE_CAST(int (*)(struct lttng_ust_tracepoint * const *), - dlsym(tracepoint_dlopen_ptr->liblttngust_handle, + dlsym(lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle, "tracepoint_unregister_lib")); - tracepoint_destructors_syms_ptr->tracepoint_disable_destructors = + lttng_ust_tracepoint_destructors_syms_ptr->tracepoint_disable_destructors = URCU_FORCE_CAST(void (*)(void), - dlsym(tracepoint_dlopen_ptr->liblttngust_handle, + dlsym(lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle, "tp_disable_destructors")); - tracepoint_destructors_syms_ptr->tracepoint_get_destructors_state = + lttng_ust_tracepoint_destructors_syms_ptr->tracepoint_get_destructors_state = URCU_FORCE_CAST(int (*)(void), - dlsym(tracepoint_dlopen_ptr->liblttngust_handle, + dlsym(lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle, "tp_get_destructors_state")); - __tracepoint__init_urcu_sym(); - if (tracepoint_dlopen_ptr->tracepoint_register_lib) { - tracepoint_dlopen_ptr->tracepoint_register_lib(__start___tracepoints_ptrs, + lttng_ust_tracepoint__init_urcu_sym(); + if (lttng_ust_tracepoint_dlopen_ptr->tracepoint_register_lib) { + lttng_ust_tracepoint_dlopen_ptr->tracepoint_register_lib(__start___tracepoints_ptrs, __stop___tracepoints_ptrs - __start___tracepoints_ptrs); } @@ -514,33 +541,41 @@ __tracepoints__ptrs_destroy(void) { int ret; - if (--__tracepoint_ptrs_registered) + if (--lttng_ust_tracepoint_ptrs_registered) return; - if (!tracepoint_dlopen_ptr) - tracepoint_dlopen_ptr = &tracepoint_dlopen; - if (!tracepoint_destructors_syms_ptr) - tracepoint_destructors_syms_ptr = &tracepoint_destructors_syms; - if (tracepoint_dlopen_ptr->tracepoint_unregister_lib) - tracepoint_dlopen_ptr->tracepoint_unregister_lib(__start___tracepoints_ptrs); - if (tracepoint_dlopen_ptr->liblttngust_handle - && tracepoint_destructors_syms_ptr->tracepoint_get_destructors_state - && tracepoint_destructors_syms_ptr->tracepoint_get_destructors_state() - && !__tracepoint_ptrs_registered) { - ret = dlclose(tracepoint_dlopen_ptr->liblttngust_handle); + if (!lttng_ust_tracepoint_dlopen_ptr) + lttng_ust_tracepoint_dlopen_ptr = <tng_ust_tracepoint_dlopen; + if (!lttng_ust_tracepoint_destructors_syms_ptr) + lttng_ust_tracepoint_destructors_syms_ptr = <tng_ust_tracepoint_destructors_syms; + if (lttng_ust_tracepoint_dlopen_ptr->tracepoint_unregister_lib) + lttng_ust_tracepoint_dlopen_ptr->tracepoint_unregister_lib(__start___tracepoints_ptrs); + if (lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle + && lttng_ust_tracepoint_destructors_syms_ptr->tracepoint_get_destructors_state + && lttng_ust_tracepoint_destructors_syms_ptr->tracepoint_get_destructors_state() + && !lttng_ust_tracepoint_ptrs_registered) { + ret = dlclose(lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle); if (ret) { fprintf(stderr, "Error (%d) in dlclose\n", ret); abort(); } - memset(tracepoint_dlopen_ptr, 0, sizeof(*tracepoint_dlopen_ptr)); + memset(lttng_ust_tracepoint_dlopen_ptr, 0, sizeof(*lttng_ust_tracepoint_dlopen_ptr)); } } #else /* TRACEPOINT_DEFINE */ -#define _DEFINE_TRACEPOINT(_provider, _name, _args) +#define LTTNG_UST__DEFINE_TRACEPOINT(_provider, _name, _args) #endif /* #else TRACEPOINT_DEFINE */ +#if LTTNG_UST_COMPAT_API(0) +#define tracepoint lttng_ust_tracepoint +#define do_tracepoint lttng_ust_do_tracepoint +#define tracepoint_enabled lttng_ust_tracepoint_enabled +#define TP_ARGS LTTNG_UST_TP_ARGS +#define TP_FIELDS LTTNG_UST_TP_FIELDS +#endif /* #if LTTNG_UST_COMPAT_API(0) */ + #ifdef __cplusplus } #endif @@ -593,23 +628,23 @@ __tracepoints__ptrs_destroy(void) #endif /* #ifndef TRACEPOINT_ENUM */ -#ifndef TRACEPOINT_EVENT +#ifndef LTTNG_UST_TRACEPOINT_EVENT /* - * How to use the TRACEPOINT_EVENT macro: + * How to use the LTTNG_UST_TRACEPOINT_EVENT macro: * * An example: * - * TRACEPOINT_EVENT(someproject_component, event_name, + * LTTNG_UST_TRACEPOINT_EVENT(someproject_component, event_name, * - * * TP_ARGS takes from 0 to 10 "type, field_name" pairs * + * * LTTNG_UST_TP_ARGS takes from 0 to 10 "type, field_name" pairs * * - * TP_ARGS(int, arg0, void *, arg1, char *, string, size_t, strlen, + * LTTNG_UST_TP_ARGS(int, arg0, void *, arg1, char *, string, size_t, strlen, * long *, arg4, size_t, arg4_len), * - * * TP_FIELDS describes the event payload layout in the trace * + * * LTTNG_UST_TP_FIELDS describes the event payload layout in the trace * * - * TP_FIELDS( + * LTTNG_UST_TP_FIELDS( * * Integer, printed in base 10 * * ctf_integer(int, field_a, arg0) * @@ -677,17 +712,23 @@ __tracepoints__ptrs_destroy(void) * the provider:event identifier is limited to 127 characters. */ -#define TRACEPOINT_EVENT(provider, name, args, fields) \ - _DECLARE_TRACEPOINT(provider, name, _TP_PARAMS(args)) \ - _DEFINE_TRACEPOINT(provider, name, _TP_PARAMS(args)) +#define LTTNG_UST_TRACEPOINT_EVENT(provider, name, args, fields) \ + LTTNG_UST__DECLARE_TRACEPOINT(provider, name, _TP_PARAMS(args)) \ + LTTNG_UST__DEFINE_TRACEPOINT(provider, name, _TP_PARAMS(args)) + +#define LTTNG_UST_TRACEPOINT_EVENT_CLASS(provider, name, args, fields) -#define TRACEPOINT_EVENT_CLASS(provider, name, args, fields) +#define LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(provider, _template, name, args) \ + LTTNG_UST__DECLARE_TRACEPOINT(provider, name, _TP_PARAMS(args)) \ + LTTNG_UST__DEFINE_TRACEPOINT(provider, name, _TP_PARAMS(args)) -#define TRACEPOINT_EVENT_INSTANCE(provider, _template, name, args) \ - _DECLARE_TRACEPOINT(provider, name, _TP_PARAMS(args)) \ - _DEFINE_TRACEPOINT(provider, name, _TP_PARAMS(args)) +#if LTTNG_UST_COMPAT_API(0) +#define TRACEPOINT_EVENT LTTNG_UST_TRACEPOINT_EVENT +#define TRACEPOINT_EVENT_CLASS LTTNG_UST_TRACEPOINT_EVENT_CLASS +#define TRACEPOINT_EVENT_INSTANCE LTTNG_UST_TRACEPOINT_EVENT_INSTANCE +#endif /* #if LTTNG_UST_COMPAT_API(0) */ -#endif /* #ifndef TRACEPOINT_EVENT */ +#endif /* #ifndef LTTNG_UST_TRACEPOINT_EVENT */ #ifndef TRACEPOINT_LOGLEVEL @@ -743,12 +784,12 @@ __tracepoints__ptrs_destroy(void) * debug information with function-level scope * * TRACE_DEBUG_LINE 13 - * debug information with line-level scope (TRACEPOINT_EVENT default) + * debug information with line-level scope (LTTNG_UST_TRACEPOINT_EVENT default) * * TRACE_DEBUG 14 * debug-level message * - * Declare tracepoint loglevels for tracepoints. A TRACEPOINT_EVENT + * Declare tracepoint loglevels for tracepoints. A LTTNG_UST_TRACEPOINT_EVENT * should be declared prior to the the TRACEPOINT_LOGLEVEL for a given * tracepoint name. The first field is the provider name, the second * field is the name of the tracepoint, the third field is the loglevel