Adding a priority (150) to the tracepoint and tracepoint provider
constructors/destructors ensures that we trace tracepoints located
within C constructors/destructors with a higher priority value,
including the default init priority of 65535, when the tracepoint vs
tracepoint definition vs tracepoint probe provider are in different
compile units (and in various link order one compared to another).
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Change-Id: Ia8e36317ae058402cdb81cb921da69cfa97a2f82
static void
lttng_ust__tracepoints__init(void)
static void
lttng_ust__tracepoints__init(void)
- lttng_ust_notrace __attribute__((constructor));
+ lttng_ust_notrace __attribute__((constructor(LTTNG_UST_CONSTRUCTOR_PRIO)));
static void
lttng_ust__tracepoints__init(void)
{
static void
lttng_ust__tracepoints__init(void)
{
static void
lttng_ust__tracepoints__destroy(void)
static void
lttng_ust__tracepoints__destroy(void)
- lttng_ust_notrace __attribute__((destructor));
+ lttng_ust_notrace __attribute__((destructor(LTTNG_UST_CONSTRUCTOR_PRIO)));
static void
lttng_ust__tracepoints__destroy(void)
{
static void
lttng_ust__tracepoints__destroy(void)
{
static void
lttng_ust__tracepoints__ptrs_init(void)
static void
lttng_ust__tracepoints__ptrs_init(void)
- lttng_ust_notrace __attribute__((constructor));
+ lttng_ust_notrace __attribute__((constructor(LTTNG_UST_CONSTRUCTOR_PRIO)));
static void
lttng_ust__tracepoints__ptrs_init(void)
{
static void
lttng_ust__tracepoints__ptrs_init(void)
{
static void
lttng_ust__tracepoints__ptrs_destroy(void)
static void
lttng_ust__tracepoints__ptrs_destroy(void)
- lttng_ust_notrace __attribute__((destructor));
+ lttng_ust_notrace __attribute__((destructor(LTTNG_UST_CONSTRUCTOR_PRIO)));
static void
lttng_ust__tracepoints__ptrs_destroy(void)
{
static void
lttng_ust__tracepoints__ptrs_destroy(void)
{
+/*
+ * By default, LTTng-UST uses the priority 150 for the tracepoint and probe
+ * provider constructors to trace tracepoints located within
+ * constructors/destructors with a higher priority value within the same
+ * module. This priority can be overridden by the application.
+ */
+#ifndef LTTNG_UST_CONSTRUCTOR_PRIO
+#define LTTNG_UST_CONSTRUCTOR_PRIO 150
+#endif
+
#define lttng_ust_notrace __attribute__((no_instrument_function))
/*
#define lttng_ust_notrace __attribute__((no_instrument_function))
/*
#define LTTNG_UST_DECLARE_CONSTRUCTOR_DESTRUCTOR(name, constructor_func, \
destructor_func, ...) \
static void LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_constructor_, name)(void) \
#define LTTNG_UST_DECLARE_CONSTRUCTOR_DESTRUCTOR(name, constructor_func, \
destructor_func, ...) \
static void LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_constructor_, name)(void) \
- __attribute__((constructor)) __VA_ARGS__; \
+ __attribute__((constructor(LTTNG_UST_CONSTRUCTOR_PRIO))) __VA_ARGS__; \
static void LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_constructor_, name)(void) \
{ \
constructor_func(); \
} \
static void LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_destructor_, name)(void) \
static void LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_constructor_, name)(void) \
{ \
constructor_func(); \
} \
static void LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_destructor_, name)(void) \
- __attribute__((destructor)) __VA_ARGS__; \
+ __attribute__((destructor(LTTNG_UST_CONSTRUCTOR_PRIO))) __VA_ARGS__; \
static void LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_destructor_, name)(void) \
{ \
destructor_func(); \
static void LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_destructor_, name)(void) \
{ \
destructor_func(); \