From: Mathieu Desnoyers Date: Tue, 21 Feb 2023 19:43:29 +0000 (-0500) Subject: Fix: Reevaluate LTTNG_UST_TRACEPOINT_DEFINE each time tracepoint.h is included X-Git-Tag: v2.12.8~2 X-Git-Url: http://git.lttng.org/?a=commitdiff_plain;ds=sidebyside;h=780fc9ad99d9fe9c460886a40f724f333fd88148;p=lttng-ust.git Fix: Reevaluate LTTNG_UST_TRACEPOINT_DEFINE each time tracepoint.h is included Fix issues with missing symbols in use-cases where tracef.h is included before defining LTTNG_UST_TRACEPOINT_DEFINE, e.g.: #include #define LTTNG_UST_TRACEPOINT_DEFINE #include 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 Change-Id: Id48a5f73527d8de5fc1b3605c1d858d848b78633 --- diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h index 56249f6e..8886e900 100644 --- a/include/lttng/tracepoint.h +++ b/include/lttng/tracepoint.h @@ -405,8 +405,23 @@ __tracepoints__destroy(void) memset(tracepoint_dlopen_ptr, 0, sizeof(*tracepoint_dlopen_ptr)); } +#ifdef __cplusplus +} +#endif + +#endif /* _LTTNG_TRACEPOINT_H */ + +/* The following declarations must be outside re-inclusion protection. */ + #ifdef 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 @@ -439,6 +454,7 @@ extern struct lttng_ust_tracepoint * const __stop___tracepoints_ptrs[] */ #define _TP_EXTRACT_STRING(...) #__VA_ARGS__ +#undef _DEFINE_TRACEPOINT #define _DEFINE_TRACEPOINT(_provider, _name, _args) \ extern int __tracepoint_provider_##_provider; \ static const char __tp_strtab_##_provider##___##_name[] \ @@ -532,19 +548,18 @@ __tracepoints__ptrs_destroy(void) } } -#else /* TRACEPOINT_DEFINE */ - -#define _DEFINE_TRACEPOINT(_provider, _name, _args) - -#endif /* #else TRACEPOINT_DEFINE */ - #ifdef __cplusplus } #endif -#endif /* _LTTNG_TRACEPOINT_H */ +#endif /* _LTTNG_UST_TRACEPOINT_DEFINE_ONCE */ -/* The following declarations must be outside re-inclusion protection. */ +#else /* TRACEPOINT_DEFINE */ + +#undef _DEFINE_TRACEPOINT +#define _DEFINE_TRACEPOINT(_provider, _name, _args) + +#endif /* #else TRACEPOINT_DEFINE */ #ifndef TRACEPOINT_ENUM