* 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>
* 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; \
#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; \
__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, \
#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
-
-#define ctf_integer lttng_ust_field_integer
-#define ctf_integer_hex lttng_ust_field_integer_hex
-#define ctf_integer_network lttng_ust_field_integer_network
-#define ctf_integer_network_hex lttng_ust_field_integer_network_hex
-#define ctf_integer_nowrite lttng_ust_field_integer_nowrite
-
-#define ctf_float lttng_ust_field_float
-#define ctf_float_nowrite lttng_ust_field_float_nowrite
-
-#define ctf_array lttng_ust_field_array
-#define ctf_array_hex lttng_ust_field_array_hex
-#define ctf_array_network lttng_ust_field_array_network
-#define ctf_array_network_hex lttng_ust_field_array_network_hex
-#define ctf_array_text lttng_ust_field_array_text
-#define ctf_array_nowrite lttng_ust_field_array_nowrite
-#define ctf_array_nowrite_hex lttng_ust_field_array_nowrite_hex
-#define ctf_array_network_nowrite lttng_ust_field_array_network_nowrite
-#define ctf_array_network_nowrite_hex lttng_ust_field_array_network_nowrite_hex
-#define ctf_array_text_nowrite lttng_ust_field_array_text_nowrite
-
-#define ctf_sequence lttng_ust_field_sequence
-#define ctf_sequence_hex lttng_ust_field_sequence_hex
-#define ctf_sequence_network lttng_ust_field_sequence_network
-#define ctf_sequence_network_hex lttng_ust_field_sequence_network_hex
-#define ctf_sequence_text lttng_ust_field_sequence_text
-#define ctf_sequence_nowrite lttng_ust_field_sequence_nowrite
-#define ctf_sequence_nowrite_hex lttng_ust_field_sequence_nowrite_hex
-#define ctf_sequence_network_nowrite lttng_ust_field_sequence_network_nowrite
-#define ctf_sequence_network_nowrite_hex lttng_ust_field_sequence_network_nowrite_hex
-#define ctf_sequence_text_nowrite lttng_ust_field_sequence_text_nowrite
-
-#define ctf_string lttng_ust_field_string
-#define ctf_string_nowrite lttng_ust_field_string_nowrite
-
-#define ctf_unused lttng_ust_field_unused
-#define ctf_unused_nowrite lttng_ust_field_unused_nowrite
-
-#define ctf_enum lttng_ust_field_enum
-#define ctf_enum_nowrite lttng_ust_field_enum_nowrite
-#define ctf_enum_value lttng_ust_field_enum_value
-#define ctf_enum_range lttng_ust_field_enum_range
-#define ctf_enum_auto lttng_ust_field_enum_auto
#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
/*