X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;ds=inline;f=probes%2Flttng-events.h;h=db445f1adea405038b55b8dea2e56e7769e0e6d9;hb=d36743ab6802f2ab236b04d4f7e7af388999f249;hp=616850f4d680e1f2e90771e6e45a656a6ee6c344;hpb=3bc29f0a41b3c803245b845db2e1909042e72e9c;p=lttng-modules.git diff --git a/probes/lttng-events.h b/probes/lttng-events.h index 616850f4..db445f1a 100644 --- a/probes/lttng-events.h +++ b/probes/lttng-events.h @@ -28,6 +28,8 @@ #include "../lttng-events.h" #include "../lttng-tracer-core.h" +#define __LTTNG_NULL_STRING "(null)" + /* * Macro declarations used for all stages. */ @@ -87,6 +89,10 @@ PARAMS(assign), \ PARAMS(print)) +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_CONDITION_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_CONDITION_MAP(template, name, map, proto, args, cond) \ + LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(template, name, map, PARAMS(proto), PARAMS(args)) + /* * LTTNG_TRACEPOINT_EVENT_CLASS can be used to add a generic function * handlers for events. That is, if all events have the same parameters @@ -177,7 +183,41 @@ void trace_##_name(_proto); #undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS #define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ -void trace_##_name(void *__data); +void trace_##_name(void); + +#include TRACE_INCLUDE(TRACE_INCLUDE_FILE) + +/* + * Stage 1.1 of the trace events. + * + * 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. + */ + +#include "lttng-events-reset.h" /* Reset all macros within TRACE_EVENT */ + +#undef TP_PROTO +#define TP_PROTO(args...) args + +#undef TP_ARGS +#define TP_ARGS(args...) args + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP(_template, _name, _map, _proto, _args) \ +void __event_template_proto___##_template(_proto); + +#undef LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS +#define LTTNG_TRACEPOINT_EVENT_INSTANCE_MAP_NOARGS(_template, _name, _map) \ +void __event_template_proto___##_template(void); + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE(_name, _proto, _args, _locvar, _code, _tstruct, _assign, _print) \ +void __event_template_proto___##_name(_proto); + +#undef LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS +#define LTTNG_TRACEPOINT_EVENT_CLASS_CODE_NOARGS(_name, _locvar, _code, _tstruct, _assign, _print) \ +void __event_template_proto___##_name(void); #include TRACE_INCLUDE(TRACE_INCLUDE_FILE) @@ -467,7 +507,8 @@ static __used struct lttng_probe_desc TP_ID(__probe_desc___, TRACE_SYSTEM) = { #undef __string #define __string(_item, _src) \ - __event_len += __dynamic_len[__dynamic_len_idx++] = strlen(_src) + 1; + __event_len += __dynamic_len[__dynamic_len_idx++] = \ + strlen((_src) ? (_src) : __LTTNG_NULL_STRING) + 1; /* * strlen_user includes \0. If returns 0, it faulted, so we set size to @@ -776,8 +817,12 @@ __assign_##dest: \ __assign_##dest: \ if (0) \ (void) __typemap.dest; \ - lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(__typemap.dest)); \ - __chan->ops->event_strcpy(&__ctx, src, __get_dynamic_array_len(dest)); \ + { \ + const char *__ctf_tmp_string = \ + ((src) ? (src) : __LTTNG_NULL_STRING); \ + lib_ring_buffer_align_ctx(&__ctx, lttng_alignof(__typemap.dest)); \ + __chan->ops->event_strcpy(&__ctx, __ctf_tmp_string, __get_dynamic_array_len(dest)); \ + } \ goto __end_field_##dest; /* Named field types must be defined in lttng-types.h */