Remove has_strcpy check following probe provider version bump
[lttng-ust.git] / include / lttng / ust-tracepoint-event.h
index 15399c7c2ea3f067dbe5968291d7fbc6d18cef2c..ff266e8f5f704aaaa3fed43ef8239a96daa8351c 100644 (file)
@@ -20,6 +20,7 @@
  * SOFTWARE.
  */
 
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <urcu/compiler.h>
@@ -120,6 +121,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
  *
@@ -666,15 +691,6 @@ size_t __event_get_align__##_provider##___##_name(_TP_ARGS_PROTO(_args))      \
        __chan->ops->event_write(&__ctx, _src,                          \
                sizeof(_type) * __get_dynamic_len(dest));
 
-/*
- * __chan->ops->u.has_strcpy is a flag letting us know if the LTTng-UST
- * tracepoint provider ABI implements event_strcpy. This dynamic check
- * can be removed when the tracepoint provider ABI moves to 2.
- */
-#if (LTTNG_UST_PROVIDER_MAJOR > 1)
-#error "Tracepoint probe provider major version has changed. Please remove dynamic check for has_strcpy."
-#endif
-
 #undef _ctf_string
 #define _ctf_string(_item, _src, _nowrite)                             \
        {                                                                       \
@@ -682,12 +698,8 @@ size_t __event_get_align__##_provider##___##_name(_TP_ARGS_PROTO(_args))      \
                        ((_src) ? (_src) : __LTTNG_UST_NULL_STRING);            \
                lib_ring_buffer_align_ctx(&__ctx,                               \
                        lttng_alignof(*__ctf_tmp_string));                      \
-               if (__chan->ops->u.has_strcpy)                                  \
-                       __chan->ops->event_strcpy(&__ctx, __ctf_tmp_string,     \
-                               __get_dynamic_len(dest));                       \
-               else                                                            \
-                       __chan->ops->event_write(&__ctx, __ctf_tmp_string,      \
-                               __get_dynamic_len(dest));                       \
+               __chan->ops->event_strcpy(&__ctx, __ctf_tmp_string,             \
+                       __get_dynamic_len(dest));                               \
        }
 
 
@@ -756,9 +768,10 @@ void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args))          \
        struct lttng_stack_ctx __lttng_ctx;                                   \
        size_t __event_len, __event_align;                                    \
        size_t __dynamic_len_idx = 0;                                         \
+       const size_t __num_fields = _TP_ARRAY_SIZE(__event_fields___##_provider##___##_name) - 1; \
        union {                                                               \
-               size_t __dynamic_len[_TP_ARRAY_SIZE(__event_fields___##_provider##___##_name) - 1]; \
-               char __filter_stack_data[2 * sizeof(unsigned long) * (_TP_ARRAY_SIZE(__event_fields___##_provider##___##_name) - 1)]; \
+               size_t __dynamic_len[__num_fields];                           \
+               char __filter_stack_data[2 * sizeof(unsigned long) * __num_fields]; \
        } __stackvar;                                                         \
        int __ret;                                                            \
                                                                              \
@@ -782,8 +795,10 @@ void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args))          \
                        _TP_ARGS_DATA_VAR(_args));                            \
                tp_list_for_each_entry_rcu(bc_runtime, &__event->bytecode_runtime_head, node) { \
                        if (caa_unlikely(bc_runtime->filter(bc_runtime,       \
-                                       __stackvar.__filter_stack_data) & LTTNG_FILTER_RECORD_FLAG)) \
+                                       __stackvar.__filter_stack_data) & LTTNG_FILTER_RECORD_FLAG)) \
                                __filter_record = 1;                          \
+                               break;                                        \
+                       }                                                     \
                }                                                             \
                if (caa_likely(!__filter_record))                             \
                        return;                                               \
@@ -1007,7 +1022,7 @@ _TP_COMBINE_TOKENS(__lttng_events_init__, TRACEPOINT_PROVIDER)(void)
        _TP_COMBINE_TOKENS(__tracepoint_provider_check_, TRACEPOINT_PROVIDER)();
        ret = lttng_probe_register(&_TP_COMBINE_TOKENS(__probe_desc___, TRACEPOINT_PROVIDER));
        if (ret) {
-               fprintf(stderr, "LTTng-UST: Error (%d) while registering tracepoint probe. Duplicate registration of tracepoint probes having the same name is not allowed.\n", ret);
+               fprintf(stderr, "LTTng-UST: Error (%d) while registering tracepoint probe.\n", ret);
                abort();
        }
 }
This page took 0.025182 seconds and 4 git commands to generate.