#include <assert.h>
+/*
+ * 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))
/*
#ifdef __cplusplus
#define lttng_ust_static_assert(predicate, msg, c_identifier_msg) \
static_assert(predicate, msg)
-#elif __STDC_VERSION__ >= 201112L
+#elif defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)
#define lttng_ust_static_assert(predicate, msg, c_identifier_msg) \
_Static_assert(predicate, msg)
#else
class LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_constructor_destructor_, \
name) { \
public: \
- LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_constructor_destructor_, \
- name)() __VA_ARGS__ \
- { \
- constructor_func(); \
- } \
- ~LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_constructor_destructor_, \
- name)() __VA_ARGS__ \
- { \
- destructor_func(); \
- } \
+ LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_constructor_destructor_, name)() __VA_ARGS__; \
+ ~LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_constructor_destructor_, name)() __VA_ARGS__; \
}; \
+LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_constructor_destructor_, name)::LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_constructor_destructor_, name)() \
+{ \
+ constructor_func(); \
+} \
+LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_constructor_destructor_, name)::~LTTNG_UST_COMPILER_COMBINE_TOKENS(lttng_ust_constructor_destructor_, name)() \
+{ \
+ destructor_func(); \
+} \
} \
} \
} \
#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) \
- __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(); \