Fix: check for event class/instance prototype mismatch
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 27 Sep 2018 19:21:16 +0000 (15:21 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Thu, 27 Sep 2018 19:30:43 +0000 (15:30 -0400)
The TP_ARGS() for an event instance belonging to an event class
must have compatible types with the event class TP_ARGS().

Failure to follow this rule leads to a prototype mismatch between the
tracepoint call site and the probe function. A common effect perceived
is that events with prototype mismatch between call site and probe
function are never traced.

Fix this by enforcing a compile-time check of the event instance and
class prototypes, similarly to what is done in LTTng modules.

Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
include/lttng/ust-tracepoint-event.h

index 15399c7c2ea3f067dbe5968291d7fbc6d18cef2c..d5982c98c2fc6f7a904cbb04e04bb45a1cadd74d 100644 (file)
@@ -120,6 +120,30 @@ static const char                                                  \
 
 #include TRACEPOINT_INCLUDE
 
+/*
+ * Stage 0.2 of tracepoint event generation.
+ *
+ * Create dummy trace prototypes for each event class, and for each used
+ * template. This will allow checking whether the prototypes from the
+ * class and the instance using the class actually match.
+ */
+
+/* Reset all macros within TRACEPOINT_EVENT */
+#include <lttng/ust-tracepoint-event-reset.h>
+
+#undef TP_ARGS
+#define TP_ARGS(...)   __VA_ARGS__
+
+#undef TRACEPOINT_EVENT_INSTANCE
+#define TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \
+void __event_template_proto___##_provider##___##_template(_TP_ARGS_DATA_PROTO(_args));
+
+#undef TRACEPOINT_EVENT_CLASS
+#define TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \
+void __event_template_proto___##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args));
+
+#include TRACEPOINT_INCLUDE
+
 /*
  * Stage 0.9 of tracepoint event generation
  *
This page took 0.026619 seconds and 4 git commands to generate.