tracepoint: introduce macros to hide tracepoint/provider symbols
[lttng-ust.git] / include / lttng / tracepoint.h
index 5d30703e3039603f272361122ce98b19962b9f66..23f01547720b67a5068eb940df210c6714c6467e 100644 (file)
@@ -4,8 +4,8 @@
  * Copyright (C) 2011-2012 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
  */
 
-#ifndef _LTTNG_TRACEPOINT_H
-#define _LTTNG_TRACEPOINT_H
+#ifndef _LTTNG_UST_TRACEPOINT_H
+#define _LTTNG_UST_TRACEPOINT_H
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -182,7 +182,8 @@ extern "C" {
  * address.
  */
 #define LTTNG_UST__DECLARE_TRACEPOINT(_provider, _name, ...)                                   \
-extern struct lttng_ust_tracepoint lttng_ust_tracepoint_##_provider##___##_name;               \
+extern struct lttng_ust_tracepoint lttng_ust_tracepoint_##_provider##___##_name                \
+               LTTNG_UST__TRACEPOINT_DEFINITION_VISIBILITY;                            \
 static inline                                                                          \
 void lttng_ust_tracepoint_cb_##_provider##___##_name(LTTNG_UST__TP_ARGS_PROTO(__VA_ARGS__))            \
        __attribute__((always_inline, unused)) lttng_ust_notrace;                       \
@@ -191,10 +192,10 @@ void lttng_ust_tracepoint_cb_##_provider##___##_name(LTTNG_UST__TP_ARGS_PROTO(__
 {                                                                                      \
        struct lttng_ust_tracepoint_probe *__tp_probe;                                  \
                                                                                        \
-       if (caa_unlikely(!TP_RCU_LINK_TEST()))                                          \
+       if (caa_unlikely(!LTTNG_UST_TP_RCU_LINK_TEST()))                                                \
                return;                                                                 \
-       tp_rcu_read_lock();                                                             \
-       __tp_probe = tp_rcu_dereference(lttng_ust_tracepoint_##_provider##___##_name.probes);   \
+       lttng_ust_tp_rcu_read_lock();                                                           \
+       __tp_probe = lttng_ust_tp_rcu_dereference(lttng_ust_tracepoint_##_provider##___##_name.probes); \
        if (caa_unlikely(!__tp_probe))                                                  \
                goto end;                                                               \
        do {                                                                            \
@@ -205,7 +206,7 @@ void lttng_ust_tracepoint_cb_##_provider##___##_name(LTTNG_UST__TP_ARGS_PROTO(__
                                (LTTNG_UST__TP_ARGS_DATA_VAR(__VA_ARGS__));                     \
        } while ((++__tp_probe)->func);                                                 \
 end:                                                                                   \
-       tp_rcu_read_unlock();                                                           \
+       lttng_ust_tp_rcu_read_unlock();                                                         \
 }                                                                                      \
 static inline                                                                          \
 void lttng_ust_tracepoint_register_##_provider##___##_name(char *provider_name, char *event_name, \
@@ -350,17 +351,17 @@ lttng_ust_tracepoint__init_urcu_sym(void)
                lttng_ust_tracepoint_dlopen_ptr->rcu_read_lock_sym =
                        URCU_FORCE_CAST(void (*)(void),
                                dlsym(lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle,
-                                       "tp_rcu_read_lock"));
+                                       "lttng_ust_tp_rcu_read_lock"));
        if (!lttng_ust_tracepoint_dlopen_ptr->rcu_read_unlock_sym)
                lttng_ust_tracepoint_dlopen_ptr->rcu_read_unlock_sym =
                        URCU_FORCE_CAST(void (*)(void),
                                dlsym(lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle,
-                                       "tp_rcu_read_unlock"));
+                                       "lttng_ust_tp_rcu_read_unlock"));
        if (!lttng_ust_tracepoint_dlopen_ptr->rcu_dereference_sym)
                lttng_ust_tracepoint_dlopen_ptr->rcu_dereference_sym =
                        URCU_FORCE_CAST(void *(*)(void *p),
                                dlsym(lttng_ust_tracepoint_dlopen_ptr->liblttngust_handle,
-                                       "tp_rcu_dereference_sym"));
+                                       "lttng_ust_tp_rcu_dereference_sym"));
 }
 #else
 static inline void
@@ -482,7 +483,8 @@ extern struct lttng_ust_tracepoint * const __stop_lttng_ust_tracepoints_ptrs[]
 
 #define LTTNG_UST__DEFINE_TRACEPOINT(_provider, _name, _args)                          \
        lttng_ust_tracepoint_validate_name_len(_provider, _name);               \
-       extern int lttng_ust_tracepoint_provider_##_provider;                           \
+       extern int lttng_ust_tracepoint_provider_##_provider                    \
+               LTTNG_UST__TRACEPOINT_PROVIDER_DEFINITION_VISIBILITY;           \
        static const char lttng_ust_tp_provider_strtab_##_provider##___##_name[]        \
                __attribute__((section("lttng_ust_tracepoints_strings"))) =             \
                        #_provider;                                             \
@@ -490,7 +492,8 @@ extern struct lttng_ust_tracepoint * const __stop_lttng_ust_tracepoints_ptrs[]
                __attribute__((section("lttng_ust_tracepoints_strings"))) =             \
                        #_name;                                                 \
        struct lttng_ust_tracepoint lttng_ust_tracepoint_##_provider##___##_name        \
-               __attribute__((section("lttng_ust_tracepoints"))) = {                   \
+               __attribute__((section("lttng_ust_tracepoints")))               \
+               LTTNG_UST__TRACEPOINT_DEFINITION_VISIBILITY = {                 \
                        sizeof(struct lttng_ust_tracepoint),                    \
                        lttng_ust_tp_provider_strtab_##_provider##___##_name,           \
                        lttng_ust_tp_name_strtab_##_provider##___##_name,               \
@@ -586,17 +589,49 @@ lttng_ust__tracepoints__ptrs_destroy(void)
 #define do_tracepoint                  lttng_ust_do_tracepoint
 #define tracepoint_enabled             lttng_ust_tracepoint_enabled
 #define TP_ARGS                                LTTNG_UST_TP_ARGS
-#define TP_FIELDS                      LTTNG_UST_TP_FIELDS
 #endif /* #if LTTNG_UST_COMPAT_API(0) */
 
 #ifdef __cplusplus
 }
 #endif
 
-#endif /* _LTTNG_TRACEPOINT_H */
+#endif /* _LTTNG_UST_TRACEPOINT_H */
 
 /* The following declarations must be outside re-inclusion protection. */
 
+/*
+ * LTTNG_UST_TRACEPOINT_HIDDEN_DEFINITION: Define this before including
+ * a tracepoint instrumentation header to hide symbols associated with
+ * tracepoint module instrumentation. This is useful if all compile
+ * units using the lttng_ust_tracepoint(),
+ * lttng_ust_tracepoint_enabled() and lttng_ust_do_tracepoint() macros
+ * is within the same module as the compile unit including the
+ * tracepoint header after defining LTTNG_UST_TRACEPOINT_DEFINE.
+ */
+
+#undef LTTNG_UST__TRACEPOINT_DEFINITION_VISIBILITY
+#ifdef LTTNG_UST_TRACEPOINT_HIDDEN_DEFINITION
+#define LTTNG_UST__TRACEPOINT_DEFINITION_VISIBILITY            __attribute__((visibility("hidden")))
+#else
+#define LTTNG_UST__TRACEPOINT_DEFINITION_VISIBILITY            __attribute__((visibility("default")))
+#endif
+
+/*
+ * LTTNG_UST_TRACEPOINT_PROVIDER_HIDDEN_DEFINITION: Define this before
+ * including a tracepoint instrumentation header to hide symbols
+ * associated with the tracepoint provider. This is useful if the
+ * tracepoint definition (including the header after defining
+ * LTTNG_UST_TRACEPOINT_DEFINE) is in the same module as the provider
+ * (including the header after defining
+ * LTTNG_UST_TRACEPOINT_CREATE_PROBES).
+ */
+#undef LTTNG_UST__TRACEPOINT_PROVIDER_DEFINITION_VISIBILITY
+#ifdef LTTNG_UST_TRACEPOINT_PROVIDER_HIDDEN_DEFINITION
+#define LTTNG_UST__TRACEPOINT_PROVIDER_DEFINITION_VISIBILITY   __attribute__((visibility("hidden")))
+#else
+#define LTTNG_UST__TRACEPOINT_PROVIDER_DEFINITION_VISIBILITY   __attribute__((visibility("default")))
+#endif
+
 #ifndef LTTNG_UST_TRACEPOINT_ENUM
 
 /*
@@ -609,19 +644,19 @@ lttng_ust__tracepoints__ptrs_destroy(void)
  * An example:
  *
  * LTTNG_UST_TRACEPOINT_ENUM(someproject_component, enumname,
- *     TP_ENUM_VALUES(
- *             ctf_enum_value("even", 0)
- *             ctf_enum_value("uneven", 1)
- *             ctf_enum_range("twoto4", 2, 4)
- *             ctf_enum_value("five", 5)
+ *     LTTNG_UST_TP_ENUM_VALUES(
+ *             lttng_ust_field_enum_value("even", 0)
+ *             lttng_ust_field_enum_value("uneven", 1)
+ *             lttng_ust_field_enum_range("twoto4", 2, 4)
+ *             lttng_ust_field_enum_value("five", 5)
  *     )
  * )
  *
  * Where "someproject_component" is the name of the component this enumeration
  * belongs to and "enumname" identifies this enumeration. Inside the
- * TP_ENUM_VALUES macro is the actual mapping. Each string value can map
- * to either a single value with ctf_enum_value or a range of values
- * with ctf_enum_range.
+ * LTTNG_UST_TP_ENUM_VALUES macro is the actual mapping. Each string value can map
+ * to either a single value with lttng_ust_field_enum_value or a range of values
+ * with lttng_ust_field_enum_range.
  *
  * Enumeration ranges may overlap, but the behavior is implementation-defined,
  * each trace reader will handle overlapping as it wishes.
@@ -629,7 +664,7 @@ lttng_ust__tracepoints__ptrs_destroy(void)
  * That enumeration can then be used in a field inside the TP_FIELD macro using
  * the following line:
  *
- * ctf_enum(someproject_component, enumname, enumtype, enumfield, enumval)
+ * lttng_ust_field_enum(someproject_component, enumname, enumtype, enumfield, enumval)
  *
  * Where "someproject_component" and "enumname" match those in the
  * LTTNG_UST_TRACEPOINT_ENUM, "enumtype" is a signed or unsigned integer type
@@ -663,24 +698,24 @@ lttng_ust__tracepoints__ptrs_destroy(void)
  *
  *     LTTNG_UST_TP_FIELDS(
  *         * Integer, printed in base 10 *
- *         ctf_integer(int, field_a, arg0)
+ *         lttng_ust_field_integer(int, field_a, arg0)
  *
  *         * Integer, printed with 0x base 16 *
- *         ctf_integer_hex(unsigned long, field_d, arg1)
+ *         lttng_ust_field_integer_hex(unsigned long, field_d, arg1)
  *
  *         * Enumeration *
- *         ctf_enum(someproject_component, enum_name, int, field_e, arg0)
+ *         lttng_ust_field_enum(someproject_component, enum_name, int, field_e, arg0)
  *
  *         * Array Sequence, printed as UTF8-encoded array of bytes *
- *         ctf_array_text(char, field_b, string, FIXED_LEN)
- *         ctf_sequence_text(char, field_c, string, size_t, strlen)
+ *         lttng_ust_field_array_text(char, field_b, string, FIXED_LEN)
+ *         lttng_ust_field_sequence_text(char, field_c, string, size_t, strlen)
  *
  *         * String, printed as UTF8-encoded string *
- *         ctf_string(field_e, string)
+ *         lttng_ust_field_string(field_e, string)
  *
  *         * Array sequence of signed integer values *
- *         ctf_array(long, field_f, arg4, FIXED_LEN4)
- *         ctf_sequence(long, field_g, arg4, size_t, arg4_len)
+ *         lttng_ust_field_array(long, field_f, arg4, FIXED_LEN4)
+ *         lttng_ust_field_sequence(long, field_g, arg4, size_t, arg4_len)
  *     )
  * )
  *
@@ -815,7 +850,7 @@ lttng_ust__tracepoints__ptrs_destroy(void)
  *      LTTNG_UST_TRACEPOINT_LOGLEVEL(< [com_company_]project[_component] >, < event >,
  *              < loglevel_name >)
  *
- * The TRACEPOINT_PROVIDER must be already declared before declaring a
+ * The LTTNG_UST_TRACEPOINT_PROVIDER must be already declared before declaring a
  * LTTNG_UST_TRACEPOINT_LOGLEVEL.
  */
 
This page took 0.027673 seconds and 4 git commands to generate.