/*
* 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.
*/
#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));
+#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 __field
-#define __field(type, item) type item;
+#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_STRUCT__entry
-#define TP_STRUCT__entry(args...) args
+#undef tp_field
+#define tp_field(type, item, src) type item;
-#undef TP_printf
-#define TP_printf(fmt, args...) fmt "\n", args
+#undef TP_FIELDS
+#define TP_FIELDS(args...) args
-#undef TP_fast_assign
-#define TP_fast_assign(args...) args
+#undef TRACEPOINT_EVENT_INSTANCE
+#define TRACEPOINT_EVENT_INSTANCE(template, name, proto, args)
-#undef DEFINE_TRACE_EVENT
-#define DEFINE_TRACE_EVENT(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); \
} \
- static inline int register_event_##name(void *data) \
+ 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() \
{ \
- return register_tracepoint(name, trace_printf_##name, data); \
- } \
- static inline int unregister_event_##name(void *data) \
+ 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) \
{ \
- 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"))) = \
static void __attribute__((constructor)) init_##name() \
{ \
void *dummy = NULL; \
- register_tracepoint(name, trace_printf_##name, dummy); \
+ __register_tracepoint(name, trace_printf_##name, dummy);\
}
-
#include TRACE_INCLUDE(TRACE_INCLUDE_FILE)