Fix: trace events in C constructors/destructors
[lttng-ust.git] / include / lttng / ust-compiler.h
index 6ce2b65242334e74c3ddf48f8dc8ae278f06bf42..e81246a34b63a2cfb374467e211c93286a749a65 100644 (file)
 
 #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))
 
 /*
@@ -68,7 +78,7 @@
 #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
@@ -106,17 +116,17 @@ namespace details {                                                               \
 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();                                                      \
+}                                                                              \
 }                                                                              \
 }                                                                              \
 }                                                                              \
@@ -130,13 +140,13 @@ const lttng::ust::details::LTTNG_UST_COMPILER_COMBINE_TOKENS(                     \
 #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();                                              \
This page took 0.025331 seconds and 4 git commands to generate.