Tracepoints: add wrapper tracepoint() macro
[ust.git] / include / ust / tracepoint.h
index 8be8697942f567c6890735ae4dc93bfb62df6bf7..b2e03cd46bfcdbac2b01b59417ebf3ddb80e601c 100644 (file)
@@ -49,6 +49,18 @@ struct tracepoint {
 #define TP_PROTO(args...)      args
 #define TP_ARGS(args...)       args
 
+/*
+ * Tracepoints should be added to the instrumented code using the
+ * "tracepoint()" macro.
+ */
+#define tracepoint(name, args...)      __trace_##name(args)
+
+#define register_tracepoint(name, probe, data)                 \
+               __register_trace_##name(probe, data)
+
+#define unregister_tracepoint(name, probe, data)               \
+               __unregister_trace_##name(probe, data)
+
 #define CONFIG_TRACEPOINTS
 #ifdef CONFIG_TRACEPOINTS
 
@@ -99,7 +111,7 @@ struct tracepoint {
  */
 #define __DECLARE_TRACE(name, proto, args, data_proto, data_args)      \
        extern struct tracepoint __tracepoint_##name;                   \
-       static inline void trace_##name(proto)                          \
+       static inline void __trace_##name(proto)                        \
        {                                                               \
                __CHECK_TRACE(name, 0, TP_PROTO(data_proto),            \
                              TP_ARGS(data_args));                      \
@@ -110,14 +122,14 @@ struct tracepoint {
                              TP_ARGS(data_args));                      \
        }                                                               \
        static inline int                                               \
-       register_trace_##name(void (*probe)(data_proto), void *data)    \
+       __register_trace_##name(void (*probe)(data_proto), void *data)  \
        {                                                               \
                return tracepoint_probe_register(#name, (void *)probe,  \
                                                 data);                 \
                                                                        \
        }                                                               \
        static inline int                                               \
-       unregister_trace_##name(void (*probe)(data_proto), void *data)  \
+       __unregister_trace_##name(void (*probe)(data_proto), void *data)\
        {                                                               \
                return tracepoint_probe_unregister(#name, (void *)probe, \
                                                   data);               \
@@ -145,11 +157,11 @@ extern void tracepoint_update_probe_range(struct tracepoint * const *begin,
        { }                                                             \
        static inline void _trace_##name(proto)                         \
        { }                                                             \
-       static inline int register_trace_##name(void (*probe)(proto), void *data)       \
+       static inline int __register_trace_##name(void (*probe)(proto), void *data)     \
        {                                                               \
                return -ENOSYS;                                         \
        }                                                               \
-       static inline int unregister_trace_##name(void (*probe)(proto), void *data)     \
+       static inline int __unregister_trace_##name(void (*probe)(proto), void *data)   \
        {                                                               \
                return -ENOSYS;                                         \
        }
@@ -220,17 +232,20 @@ extern int tracepoint_register_lib(struct tracepoint * const *tracepoints_start,
 extern int tracepoint_unregister_lib(struct tracepoint * const *tracepoints_start);
 
 #define TRACEPOINT_LIB                                                 \
-       extern struct tracepoint * const __start___tracepoints[] __attribute__((weak, visibility("hidden"))); \
-       extern struct tracepoint * const __stop___tracepoints[] __attribute__((weak, visibility("hidden"))); \
-       static void __attribute__((constructor)) __tracepoints__init(void) \
-       {                                                               \
-               tracepoint_register_lib(__start___tracepoints,          \
-                                       (((long)__stop___tracepoints)-((long)__start___tracepoints)) / sizeof(*__start___tracepoints)); \
-       } \
-       \
-       static void __attribute__((destructor)) __tracepoints__destroy(void) \
-       {                                                               \
-               tracepoint_unregister_lib(__start___tracepoints); \
+       extern struct tracepoint * const __start___tracepoints_ptrs[] __attribute__((weak, visibility("hidden"))); \
+       extern struct tracepoint * const __stop___tracepoints_ptrs[] __attribute__((weak, visibility("hidden"))); \
+       static struct tracepoint * const __tracepoint_ptr_dummy         \
+       __attribute__((used, section("__tracepoints_ptrs"))) = NULL;    \
+       static void __attribute__((constructor)) __tracepoints__init(void)      \
+       {                                                                       \
+               tracepoint_register_lib(__start___tracepoints_ptrs,                     \
+                                       __stop___tracepoints_ptrs -                     \
+                                       __start___tracepoints_ptrs);                    \
+       }                                                                       \
+                                                                               \
+       static void __attribute__((destructor)) __tracepoints__destroy(void)    \
+       {                                                                       \
+               tracepoint_unregister_lib(__start___tracepoints_ptrs);          \
        }
 
 
@@ -376,6 +391,8 @@ extern int trace_event_unregister_lib(struct trace_event * const *start_trace_ev
        __attribute__((weak, visibility("hidden")));                    \
        extern struct trace_event * const __stop___trace_events_ptrs[]  \
        __attribute__((weak, visibility("hidden")));                    \
+       static struct trace_event * const __event_ptrs_dummy            \
+       __attribute__((used, section("__trace_events_ptrs"))) = NULL;   \
        static void __attribute__((constructor))                        \
        __trace_events__init(void)                                      \
        {                                                               \
This page took 0.034112 seconds and 4 git commands to generate.