From: Mathieu Desnoyers Date: Thu, 27 Sep 2018 19:21:16 +0000 (-0400) Subject: Fix: check for event class/instance prototype mismatch X-Git-Tag: v2.9.4~4 X-Git-Url: http://git.liburcu.org/?p=lttng-ust.git;a=commitdiff_plain;h=a90205667a99c0dc684b7525bc6fb93103f6d5c1 Fix: check for event class/instance prototype mismatch 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 --- diff --git a/include/lttng/ust-tracepoint-event.h b/include/lttng/ust-tracepoint-event.h index 15399c7c..d5982c98 100644 --- a/include/lttng/ust-tracepoint-event.h +++ b/include/lttng/ust-tracepoint-event.h @@ -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 + +#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 *