X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=include%2Flttng%2Ftracepoint.h;h=a224caebcd8485cf731648a0b6ce0e718d8d0bae;hb=5cd29ace704432c7a421f7749ef8591e30e1894c;hp=831447dd64643dc754ec0aa6ad9cd39a12ce7d36;hpb=deb6e5408bafcab23cdd3e04b080134931d83906;p=lttng-ust.git diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h index 831447dd..a224caeb 100644 --- a/include/lttng/tracepoint.h +++ b/include/lttng/tracepoint.h @@ -15,7 +15,7 @@ */ #include -#include +#include #include #include /* for dlopen */ @@ -37,8 +37,18 @@ extern "C" { * fine too). * Each tuple is also separated by a comma. */ -#define _TP_COMBINE_TOKENS1(_tokena, _tokenb) _tokena##_tokenb -#define _TP_COMBINE_TOKENS(_tokena, _tokenb) _TP_COMBINE_TOKENS1(_tokena, _tokenb) +#define __TP_COMBINE_TOKENS(_tokena, _tokenb) \ + _tokena##_tokenb +#define _TP_COMBINE_TOKENS(_tokena, _tokenb) \ + __TP_COMBINE_TOKENS(_tokena, _tokenb) +#define __TP_COMBINE_TOKENS3(_tokena, _tokenb, _tokenc) \ + _tokena##_tokenb##_tokenc +#define _TP_COMBINE_TOKENS3(_tokena, _tokenb, _tokenc) \ + __TP_COMBINE_TOKENS3(_tokena, _tokenb, _tokenc) +#define __TP_COMBINE_TOKENS4(_tokena, _tokenb, _tokenc, _tokend) \ + _tokena##_tokenb##_tokenc##_tokend +#define _TP_COMBINE_TOKENS4(_tokena, _tokenb, _tokenc, _tokend) \ + __TP_COMBINE_TOKENS4(_tokena, _tokenb, _tokenc, _tokend) /* _TP_EXVAR* extract the var names. */ #define _TP_EXVAR0() @@ -103,13 +113,19 @@ extern "C" { #define _TP_ARGS_DATA_VAR(...) _TP_DATA_VAR_N(_TP_NARGS(0, ##__VA_ARGS__), ##__VA_ARGS__) #define _TP_PARAMS(...) __VA_ARGS__ +#ifdef _LGPL_SOURCE +#define _TP_RCU_LINK_TEST() 1 +#else +#define _TP_RCU_LINK_TEST() rcu_read_lock_bp +#endif + #define _DECLARE_TRACEPOINT(provider, name, ...) \ extern struct tracepoint __tracepoint_##provider##___##name; \ static inline void __tracepoint_cb_##provider##___##name(_TP_ARGS_PROTO(__VA_ARGS__)) \ { \ struct tracepoint_probe *__tp_probe; \ \ - if (!rcu_read_lock_bp) \ + if (!_TP_RCU_LINK_TEST()) \ return; \ rcu_read_lock_bp(); \ __tp_probe = rcu_dereference_bp(__tracepoint_##provider##___##name.probes); \ @@ -182,10 +198,14 @@ static void __attribute__((constructor)) __tracepoints__init(void) liblttngust_handle = dlopen("liblttng-ust.so", RTLD_NOW | RTLD_GLOBAL); if (!liblttngust_handle) return; - tracepoint_register_lib = dlsym(liblttngust_handle, - "tracepoint_register_lib"); - tracepoint_unregister_lib = dlsym(liblttngust_handle, - "tracepoint_unregister_lib"); + tracepoint_register_lib = + URCU_FORCE_CAST(int (*)(struct tracepoint * const *, int), + dlsym(liblttngust_handle, + "tracepoint_register_lib")); + tracepoint_unregister_lib = + URCU_FORCE_CAST(int (*)(struct tracepoint * const *), + dlsym(liblttngust_handle, + "tracepoint_unregister_lib")); tracepoint_register_lib(__start___tracepoints_ptrs, __stop___tracepoints_ptrs - __start___tracepoints_ptrs);