summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
0b5a631)
Fix issues with missing symbols in use-cases where tracef.h is included
before defining LTTNG_UST_TRACEPOINT_DEFINE, e.g.:
#include <lttng/tracef.h>
#define LTTNG_UST_TRACEPOINT_DEFINE
#include <provider.h>
It is caused by the fact that tracef.h includes tracepoint.h in a
context which has LTTNG_UST_TRACEPOINT_DEFINE undefined, and this is not
re-evaluated for the following includes.
Fix this by lifting the definition code in tracepoint.h outside of the
header include guards, and #undef the old LTTNG_UST__DEFINE_TRACEPOINT
before re-defining it to its new semantic. Use a new
_LTTNG_UST_TRACEPOINT_DEFINE_ONCE include guard within the
LTTNG_UST_TRACEPOINT_DEFINE defined case to ensure symbols are not
duplicated.
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: I0ef720435003a7ca0bfcf29d7bf27866c5ff8678
# endif
#endif /* #if LTTNG_UST_COMPAT_API(0) */
# endif
#endif /* #if LTTNG_UST_COMPAT_API(0) */
+#if LTTNG_UST_COMPAT_API(0)
+#define tracepoint lttng_ust_tracepoint
+#define do_tracepoint lttng_ust_do_tracepoint
+#define tracepoint_enabled lttng_ust_tracepoint_enabled
+#define TP_ARGS LTTNG_UST_TP_ARGS
+#endif /* #if LTTNG_UST_COMPAT_API(0) */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LTTNG_UST_TRACEPOINT_H */
+
+/* The following declarations must be outside re-inclusion protection. */
+
#ifdef LTTNG_UST_TRACEPOINT_DEFINE
#ifdef LTTNG_UST_TRACEPOINT_DEFINE
+#ifndef _LTTNG_UST_TRACEPOINT_DEFINE_ONCE
+#define _LTTNG_UST_TRACEPOINT_DEFINE_ONCE
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/*
* These weak symbols, the constructor, and destructor take care of
* registering only _one_ instance of the tracepoints per shared-ojbect
/*
* These weak symbols, the constructor, and destructor take care of
* registering only _one_ instance of the tracepoints per shared-ojbect
*/
#define LTTNG_UST__TP_EXTRACT_STRING(...) #__VA_ARGS__
*/
#define LTTNG_UST__TP_EXTRACT_STRING(...) #__VA_ARGS__
+#undef LTTNG_UST__DEFINE_TRACEPOINT
#define LTTNG_UST__DEFINE_TRACEPOINT(_provider, _name, _args) \
lttng_ust_tracepoint_validate_name_len(_provider, _name); \
extern int lttng_ust_tracepoint_provider_##_provider \
#define LTTNG_UST__DEFINE_TRACEPOINT(_provider, _name, _args) \
lttng_ust_tracepoint_validate_name_len(_provider, _name); \
extern int lttng_ust_tracepoint_provider_##_provider \
-#else /* LTTNG_UST_TRACEPOINT_DEFINE */
-
-#define LTTNG_UST__DEFINE_TRACEPOINT(_provider, _name, _args)
-
-#endif /* #else LTTNG_UST_TRACEPOINT_DEFINE */
-
-#if LTTNG_UST_COMPAT_API(0)
-#define tracepoint lttng_ust_tracepoint
-#define do_tracepoint lttng_ust_do_tracepoint
-#define tracepoint_enabled lttng_ust_tracepoint_enabled
-#define TP_ARGS LTTNG_UST_TP_ARGS
-#endif /* #if LTTNG_UST_COMPAT_API(0) */
-
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
}
#endif
-#endif /* _LTTNG_UST_TRACEPOINT_H */
+#endif /* _LTTNG_UST_TRACEPOINT_DEFINE_ONCE */
-/* The following declarations must be outside re-inclusion protection. */
+#else /* LTTNG_UST_TRACEPOINT_DEFINE */
+
+#undef LTTNG_UST__DEFINE_TRACEPOINT
+#define LTTNG_UST__DEFINE_TRACEPOINT(_provider, _name, _args)
+
+#endif /* #else LTTNG_UST_TRACEPOINT_DEFINE */
/*
* LTTNG_UST_TRACEPOINT_HIDDEN_DEFINITION: Define this before including
/*
* LTTNG_UST_TRACEPOINT_HIDDEN_DEFINITION: Define this before including