* modified is included with the above copyright notice.
*/
-#include <urcu-bp.h>
-#include <tracepoint-types.h>
+#include <lttng/tracepoint-types.h>
+#include <lttng/tracepoint-rcu.h>
#include <urcu/compiler.h>
#include <dlfcn.h> /* for dlopen */
+#include <assert.h>
#ifdef __cplusplus
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()
{ \
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); \
+ tp_rcu_read_lock_bp(); \
+ __tp_probe = tp_rcu_dereference_bp(__tracepoint_##provider##___##name.probes); \
if (caa_unlikely(!__tp_probe)) \
goto end; \
do { \
(_TP_ARGS_DATA_VAR(__VA_ARGS__)); \
} while ((++__tp_probe)->func); \
end: \
- rcu_read_unlock_bp(); \
+ tp_rcu_read_unlock_bp(); \
} \
static inline void __tracepoint_register_##provider##___##name(char *name, \
void *func, void *data) \
if (__tracepoint_registered++)
return;
- liblttngust_handle = dlopen("liblttng-ust.so", RTLD_NOW | RTLD_GLOBAL);
+ liblttngust_handle = dlopen("liblttng-ust.so.0", 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"));
+#ifndef _LGPL_SOURCE
+ tp_rcu_read_lock_bp =
+ URCU_FORCE_CAST(void (*)(void),
+ dlsym(liblttngust_handle,
+ "tp_rcu_read_lock_bp"));
+ tp_rcu_read_unlock_bp =
+ URCU_FORCE_CAST(void (*)(void),
+ dlsym(liblttngust_handle,
+ "tp_rcu_read_unlock_bp"));
+ tp_rcu_dereference_sym_bp =
+ URCU_FORCE_CAST(void *(*)(void *p),
+ dlsym(liblttngust_handle,
+ "tp_rcu_dereference_sym_bp"));
+#endif
tracepoint_register_lib(__start___tracepoints_ptrs,
__stop___tracepoints_ptrs -
__start___tracepoints_ptrs);