tracepoint: split provider and event name
[lttng-ust.git] / include / lttng / tracepoint.h
index b47b1e0e1c00ab5eb5d1a79356762b8852b35874..98c3c8dd89bfd2b6419bca7f6e15b255967209aa 100644 (file)
@@ -20,6 +20,8 @@
 #include <lttng/ust-compiler.h>
 #include <lttng/ust-tracer.h>
 
+#define LTTNG_UST_TRACEPOINT_NAME_LEN_MAX      256
+
 #ifdef LTTNG_UST_HAVE_SDT_INTEGRATION
 /*
  * Instead of using SDT_USE_VARIADIC from 'sys/sdt.h', use our own namespaced
@@ -154,6 +156,25 @@ extern "C" {
 #define _TP_ARGS_DATA_VAR(...)         _TP_DATA_VAR_N(_TP_NARGS(0, ##__VA_ARGS__), ##__VA_ARGS__)
 #define _TP_PARAMS(...)                        __VA_ARGS__
 
+/*
+ * sizeof(#_provider) - 1 : length of the provider string (excluding \0).
+ * sizeof(#_name) - 1     : length of the name string (excluding \0).
+ * + 1                    : separator between provider and event name.
+ *
+ * Upper bound (inclusive) is LTTNG_UST_TRACEPOINT_NAME_LEN_MAX - 1 to
+ * account for \0.
+ *
+ * The comparison is:
+ *   left hand side:   sizeof(#_provider) - 1 + sizeof(#_name) - 1 + 1
+ *   right hand side:  LTTNG_UST_TRACEPOINT_NAME_LEN_MAX - 1
+ *   operator:         <=  (inclusive)
+ * Simplified in the code below.
+ */
+#define lttng_ust_tracepoint_validate_name_len(_provider, _name)                                               \
+       lttng_ust_static_assert(sizeof(#_provider) + sizeof(#_name) <= LTTNG_UST_TRACEPOINT_NAME_LEN_MAX,       \
+               "Tracepoint name length is too long",                                                           \
+               Tracepoint_name_length_is_too_long)
+
 /*
  * The tracepoint cb is marked always inline so we can distinguish
  * between caller's ip addresses within the probe using the return
@@ -186,31 +207,31 @@ end:                                                                                      \
        tp_rcu_read_unlock();                                                           \
 }                                                                                      \
 static inline                                                                          \
-void __tracepoint_register_##_provider##___##_name(char *name,                         \
+void __tracepoint_register_##_provider##___##_name(char *provider_name, char *event_name, \
                void (*func)(void), void *data)                                         \
        lttng_ust_notrace;                                                              \
 static inline                                                                          \
-void __tracepoint_register_##_provider##___##_name(char *name,                         \
+void __tracepoint_register_##_provider##___##_name(char *provider_name, char *event_name, \
                void (*func)(void), void *data)                                         \
 {                                                                                      \
-       __tracepoint_probe_register(name, func, data,                                   \
+       __tracepoint_probe_register(provider_name, event_name, func, data,              \
                __tracepoint_##_provider##___##_name.signature);                        \
 }                                                                                      \
 static inline                                                                          \
-void __tracepoint_unregister_##_provider##___##_name(char *name,                       \
+void __tracepoint_unregister_##_provider##___##_name(char *provider_name, char *event_name, \
                void (*func)(void), void *data)                                         \
        lttng_ust_notrace;                                                              \
 static inline                                                                          \
-void __tracepoint_unregister_##_provider##___##_name(char *name,                       \
+void __tracepoint_unregister_##_provider##___##_name(char *provider_name, char *event_name, \
                void (*func)(void), void *data)                                         \
 {                                                                                      \
-       __tracepoint_probe_unregister(name, func, data);                                \
+       __tracepoint_probe_unregister(provider_name, event_name, func, data);           \
 }
 
-extern int __tracepoint_probe_register(const char *name, void (*func)(void),
-               void *data, const char *signature);
-extern int __tracepoint_probe_unregister(const char *name, void (*func)(void),
-               void *data);
+extern int __tracepoint_probe_register(const char *provider_name, const char *event_name,
+               void (*func)(void), void *data, const char *signature);
+extern int __tracepoint_probe_unregister(const char *provider_name, const char *event_name,
+               void (*func)(void), void *data);
 
 /*
  * tracepoint dynamic linkage handling (callbacks). Hidden visibility:
@@ -446,14 +467,19 @@ extern struct lttng_ust_tracepoint * const __stop___tracepoints_ptrs[]
 #define _TP_EXTRACT_STRING(...)        #__VA_ARGS__
 
 #define _DEFINE_TRACEPOINT(_provider, _name, _args)                            \
+       lttng_ust_tracepoint_validate_name_len(_provider, _name);               \
        extern int __tracepoint_provider_##_provider;                           \
-       static const char __tp_strtab_##_provider##___##_name[]                 \
+       static const char __tp_provider_strtab_##_provider##___##_name[]        \
+               __attribute__((section("__tracepoints_strings"))) =             \
+                       #_provider;                                             \
+       static const char __tp_name_strtab_##_provider##___##_name[]            \
                __attribute__((section("__tracepoints_strings"))) =             \
-                       #_provider ":" #_name;                                  \
+                       #_name;                                                 \
        struct lttng_ust_tracepoint __tracepoint_##_provider##___##_name        \
                __attribute__((section("__tracepoints"))) = {                   \
                        sizeof(struct lttng_ust_tracepoint),                    \
-                       __tp_strtab_##_provider##___##_name,                    \
+                       __tp_provider_strtab_##_provider##___##_name,           \
+                       __tp_name_strtab_##_provider##___##_name,               \
                        0,                                                      \
                        NULL,                                                   \
                        _TRACEPOINT_UNDEFINED_REF(_provider),                   \
This page took 0.024917 seconds and 4 git commands to generate.