LGPLv2.1 relicensing agreements
[ust.git] / include / ust / ust_trace.h
index 098c5f8f6f0230e31b28bb157b34e7e0d4ffee68..f2ccbe21e868fbbc579b871f3026f1a6a9283ff9 100644 (file)
@@ -4,8 +4,8 @@
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License.
  *
  * This library is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -23,6 +23,8 @@
  * to a printf
  */
 
+#include <stdio.h>
+
 /*
  * Stage 1. Create a struct and a printf calling function
  * that is connected to the tracepoint at load time.
 #undef TRACE_EVENT
 #define TRACE_EVENT(name, proto, args, tstruct, assign, print)         \
        DECLARE_TRACE_EVENT_CLASS(name,                                 \
-                                 PARAMS(proto),                        \
-                                 PARAMS(args),                         \
-                                 PARAMS(tstruct),                      \
-                                 PARAMS(assign),                       \
-                                 PARAMS(print));                       \
-       DEFINE_TRACE_EVENT(name, name, PARAMS(proto), PARAMS(args));
+                                 TP_PARAMS(proto),                     \
+                                 TP_PARAMS(args),                      \
+                                 TP_PARAMS(tstruct),                   \
+                                 TP_PARAMS(assign),                    \
+                                 TP_PARAMS(print));                    \
+       DEFINE_TRACE_EVENT(name, name, TP_PARAMS(proto), TP_PARAMS(args));
 
 #undef __field
 #define __field(type, item)            type    item;
@@ -58,7 +60,7 @@
        struct trace_raw_##name {                                       \
                tstruct                                                 \
        };                                                              \
-       static void trace_printf_##name(proto)                          \
+       static void trace_printf_##name(void *dummy, proto)             \
        {                                                               \
                struct trace_raw_##name entry_struct, *__entry;         \
                __entry = &entry_struct;                                \
                                                                        \
                printf(print);                                          \
        }                                                               \
+       static inline int register_event_##name(void *data)             \
+       {                                                               \
+               return register_tracepoint(name, trace_printf_##name, data); \
+       }                                                               \
+       static inline int unregister_event_##name(void *data)           \
+       {                                                               \
+               return unregister_tracepoint(name, trace_printf_##name, data); \
+       }                                                               \
+       struct trace_event __event_##name = {                           \
+               __tpstrtab_##name,                                      \
+               register_event_##name,                                  \
+               unregister_event_##name                                 \
+       };                                                              \
+       static struct trace_event * const __event_ptrs_##name           \
+       __attribute__((used, section("__trace_events_ptrs"))) =         \
+               &__event_##name;                                        \
+                                                                       \
        static void __attribute__((constructor)) init_##name()          \
        {                                                               \
-               printf("connecting tracepoint " #name "\n");            \
-               register_trace_##name(trace_printf_##name);             \
+               void *dummy = NULL;                                     \
+               register_tracepoint(name, trace_printf_##name, dummy);  \
        }
 
 
This page took 0.024084 seconds and 4 git commands to generate.