#include <string.h> /* for memset */
#include <assert.h>
#include <lttng/ust-config.h> /* for sdt */
+#include <lttng/ust-compiler.h>
#ifdef LTTNG_UST_HAVE_SDT_INTEGRATION
#define SDT_USE_VARIADIC
#define _DECLARE_TRACEPOINT(_provider, _name, ...) \
extern struct tracepoint __tracepoint_##_provider##___##_name; \
-static inline void __tracepoint_cb_##_provider##___##_name(_TP_ARGS_PROTO(__VA_ARGS__)) \
+static inline lttng_ust_notrace \
+void __tracepoint_cb_##_provider##___##_name(_TP_ARGS_PROTO(__VA_ARGS__)); \
+static inline \
+void __tracepoint_cb_##_provider##___##_name(_TP_ARGS_PROTO(__VA_ARGS__)) \
{ \
struct tracepoint_probe *__tp_probe; \
\
if (caa_unlikely(!__tp_probe)) \
goto end; \
do { \
- void *__tp_cb = __tp_probe->func; \
+ void (*__tp_cb)(void) = __tp_probe->func; \
void *__tp_data = __tp_probe->data; \
\
URCU_FORCE_CAST(void (*)(_TP_ARGS_DATA_PROTO(__VA_ARGS__)), __tp_cb) \
end: \
tp_rcu_read_unlock_bp(); \
} \
-static inline void __tracepoint_register_##_provider##___##_name(char *name, \
- void *func, void *data) \
+static inline lttng_ust_notrace \
+void __tracepoint_register_##_provider##___##_name(char *name, \
+ void (*func)(void), void *data); \
+static inline \
+void __tracepoint_register_##_provider##___##_name(char *name, \
+ void (*func)(void), void *data) \
{ \
__tracepoint_probe_register(name, func, data, \
__tracepoint_##_provider##___##_name.signature); \
} \
-static inline void __tracepoint_unregister_##_provider##___##_name(char *name, \
- void *func, void *data) \
+static inline lttng_ust_notrace \
+void __tracepoint_unregister_##_provider##___##_name(char *name, \
+ void (*func)(void), void *data); \
+static inline \
+void __tracepoint_unregister_##_provider##___##_name(char *name, \
+ void (*func)(void), void *data) \
{ \
__tracepoint_probe_unregister(name, func, data); \
}
-extern int __tracepoint_probe_register(const char *name, void *func, void *data,
- const char *signature);
-extern int __tracepoint_probe_unregister(const char *name, void *func, void *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);
/*
* tracepoint dynamic linkage handling (callbacks). Hidden visibility:
struct tracepoint_dlopen tracepoint_dlopen
__attribute__((weak, visibility("hidden")));
-static void __attribute__((constructor)) __tracepoints__init(void)
+static void lttng_ust_notrace __attribute__((constructor))
+__tracepoints__init(void);
+static void
+__tracepoints__init(void)
{
if (__tracepoint_registered++)
return;
__start___tracepoints_ptrs);
}
-static void __attribute__((destructor)) __tracepoints__destroy(void)
+static void lttng_ust_notrace __attribute__((destructor))
+__tracepoints__destroy(void);
+static void
+__tracepoints__destroy(void)
{
int ret;