Tracepoint and TRACEPOINT_EVENT API cleanup
[ust.git] / include / ust / ust_trace.h
index e1b02576d6ef93b88c45bca1cdcdcf071e355d09..fe27da2b11e1c44aad99c10c0d8d22e89810bf13 100644 (file)
@@ -1,11 +1,12 @@
 /*
  * Copyright (C) 2009     Steven Rostedt <srostedt@redhat.com>
  * Copyright (C) 2010     Nils Carlson <nils.carlson@ericsson.com>
+ * Copyright (C) 2011     Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  *
  * 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
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
- *
  */
 
 /*
- * This whole file is currently a dummy, mapping a TRACE_EVENT
- * to a printf
+ * This whole file is currently a dummy.
  */
 
-/*
- * 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));
+#include <stdio.h>
 
-#undef __field
-#define __field(type, item)            type    item;
+#undef TRACEPOINT_EVENT
+#define TRACEPOINT_EVENT(name, proto, args, fields)                    \
+       TRACEPOINT_EVENT_CLASS(name,                                    \
+                       TP_PARAMS(proto),                               \
+                       TP_PARAMS(args),                                \
+                       TP_PARAMS(fields));                             \
+       TRACEPOINT_EVENT_INSTANCE(name, name, TP_PARAMS(proto),         \
+                       TP_PARAMS(args));
 
-#undef TP_STRUCT__entry
-#define TP_STRUCT__entry(args...) args
+#undef TRACEPOINT_EVENT_NOARGS
+#define TRACEPOINT_EVENT_NOARGS(name, fields)                          \
+       TRACEPOINT_EVENT_CLASS_NOARGS(name,                             \
+                       TP_PARAMS(fields));                             \
+       TRACEPOINT_EVENT_INSTANCE_NOARGS(name, name);
 
-#undef TP_printf
-#define TP_printf(fmt, args...) fmt "\n", args
+#undef tp_field
+#define tp_field(type, item, src)      type    item;
 
-#undef TP_fast_assign
-#define TP_fast_assign(args...) args
+#undef TP_FIELDS
+#define TP_FIELDS(args...) args
 
-#undef DEFINE_TRACE_EVENT
-#define DEFINE_TRACE_EVENT(template, name, proto, args)
+#undef TRACEPOINT_EVENT_INSTANCE
+#define TRACEPOINT_EVENT_INSTANCE(template, name, proto, args)
 
+#undef TRACEPOINT_EVENT_INSTANCE_NOARGS
+#define TRACEPOINT_EVENT_INSTANCE_NOARGS(template, name)
 
-#undef DECLARE_TRACE_EVENT_CLASS
-#define DECLARE_TRACE_EVENT_CLASS(name, proto, args, tstruct, assign, print)   \
+#undef TRACEPOINT_EVENT_CLASS
+#define TRACEPOINT_EVENT_CLASS(name, proto, args, fields)              \
        struct trace_raw_##name {                                       \
-               tstruct                                                 \
+               fields                                                  \
        };                                                              \
        static void trace_printf_##name(void *dummy, proto)             \
        {                                                               \
-               struct trace_raw_##name entry_struct, *__entry;         \
-               __entry = &entry_struct;                                \
-               { assign };                                     \
-                                                                       \
-               printf(print);                                          \
        }                                                               \
+       struct trace_event __event_##name = {                           \
+               __tpstrtab_##name,                                      \
+       };                                                              \
+       static struct trace_event * const __event_ptrs_##name           \
+       __attribute__((used, section("__trace_events_ptrs"))) =         \
+               &__event_##name;                                        \
+                                                                       \
        static void __attribute__((constructor)) init_##name()          \
        {                                                               \
-               void *dummy;                                            \
-               printf("connecting tracepoint " #name "\n");            \
-               register_trace_##name(trace_printf_##name, dummy);      \
+               void *dummy = NULL;                                     \
+               __register_tracepoint(name, trace_printf_##name, dummy);\
        }
 
+#undef TRACEPOINT_EVENT_CLASS_NOARGS
+#define TRACEPOINT_EVENT_CLASS_NOARGS(name, fields)                    \
+       struct trace_raw_##name {                                       \
+               fields                                                  \
+       };                                                              \
+       static void trace_printf_##name(void *dummy)                    \
+       {                                                               \
+       }                                                               \
+       struct trace_event __event_##name = {                           \
+               __tpstrtab_##name,                                      \
+       };                                                              \
+       static struct trace_event * const __event_ptrs_##name           \
+       __attribute__((used, section("__trace_events_ptrs"))) =         \
+               &__event_##name;                                        \
+                                                                       \
+       static void __attribute__((constructor)) init_##name()          \
+       {                                                               \
+               void *dummy = NULL;                                     \
+               __register_tracepoint(name, trace_printf_##name, dummy);\
+       }
 
 #include TRACE_INCLUDE(TRACE_INCLUDE_FILE)
This page took 0.033773 seconds and 4 git commands to generate.