X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=include%2Flttng%2Ftracepoint.h;h=17fa2a0c68ef884857cc6dfa5066172e425d2b0d;hb=e0ca901df9ff4742dfcaf1c8839f042760197555;hp=c59a96c990218dce0f6ded3a90f9344a95b28bae;hpb=8812e921083147264ac4a299748ca6d4077e5233;p=lttng-ust.git diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h index c59a96c9..17fa2a0c 100644 --- a/include/lttng/tracepoint.h +++ b/include/lttng/tracepoint.h @@ -11,16 +11,25 @@ #include #include #include +#include +#include +#include + #include #include #include /* for dlopen */ #include /* for memset */ +#include #include /* for sdt */ #include #include #include +#if (defined(__cplusplus) && (__cplusplus <= 199711L)) +#error "C++11 support is required to build tracepoints and providers as C++" +#endif + #define LTTNG_UST_TRACEPOINT_NAME_LEN_MAX 256 #ifdef LTTNG_UST_HAVE_SDT_INTEGRATION @@ -386,6 +395,40 @@ lttng_ust_tracepoint__init_urcu_sym(void) } #endif +/* + * Use getenv() directly and bypass lttng-ust helper functions + * because we may not have access to lttng-ust shared libraries. + */ +#ifdef LTTNG_UST_DEBUG +static inline +bool lttng_ust_tracepoint_logging_debug_enabled(void) +{ + return true; +} +#else /* #ifdef LTTNG_UST_DEBUG */ +static inline +bool lttng_ust_tracepoint_logging_debug_enabled(void) +{ + return getenv("LTTNG_UST_DEBUG"); +} +#endif /* #ifdef LTTNG_UST_DEBUG */ + +#define LTTNG_UST_TRACEPOINT_THIS_IP \ + ({ __label__ here; here: &&here; }) + +static void +lttng_ust_tracepoints_print_disabled_message(void) +{ + if (!lttng_ust_tracepoint_logging_debug_enabled()) + return; + fprintf(stderr, "lttng-ust-tracepoint [%ld]: dlopen() failed to find '%s', tracepoints in this binary won't be registered. " + "(at addr=%p in %s() at " __FILE__ ":" lttng_ust_stringify(__LINE__) ")\n", + (long) getpid(), + LTTNG_UST_TRACEPOINT_LIB_SONAME, + LTTNG_UST_TRACEPOINT_THIS_IP, + __func__); +} + static void lttng_ust__tracepoints__init(void) lttng_ust_notrace __attribute__((constructor)); @@ -404,8 +447,10 @@ lttng_ust__tracepoints__init(void) 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 (!lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle) + if (!lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle) { + lttng_ust_tracepoints_print_disabled_message(); return; + } lttng_ust_tracepoint__init_urcu_sym(); } @@ -534,8 +579,10 @@ lttng_ust__tracepoints__ptrs_init(void) 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 (!lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle) + if (!lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle) { + lttng_ust_tracepoints_print_disabled_message(); return; + } if (!lttng_ust_tracepoint_destructors_syms_ptr) lttng_ust_tracepoint_destructors_syms_ptr = <tng_ust_tracepoint_destructors_syms; lttng_ust_tracepoint_dlopen_ptr->lttng_ust_tracepoint_module_register = @@ -783,14 +830,17 @@ lttng_ust__tracepoints__ptrs_destroy(void) #define LTTNG_UST_TRACEPOINT_EVENT_CLASS(provider, name, args, fields) -#define LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(provider, _template, name, args) \ +#define LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(template_provider, template_name, provider, name, args) \ LTTNG_UST__DECLARE_TRACEPOINT(provider, name, LTTNG_UST__TP_PARAMS(args)) \ LTTNG_UST__DEFINE_TRACEPOINT(provider, name, LTTNG_UST__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 +#define TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, args) \ + LTTNG_UST_TRACEPOINT_EVENT_INSTANCE(_provider, _template, \ + _provider, _name, LTTNG_UST__TP_PARAMS(args)) + #endif /* #if LTTNG_UST_COMPAT_API(0) */ #endif /* #ifndef LTTNG_UST_TRACEPOINT_EVENT */