X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=include%2Flttng%2Ftracepoint.h;h=66e2abd7c505a296389c4bc691a809eed4c8b812;hb=31ea1f6f0435b9e4ae91f72462fa0c2856dce8b2;hp=0629af23e67e21f121478e1da3cbaff869c249e6;hpb=99234da69ab197050d3d28ea428c54e08539667c;p=lttng-ust.git diff --git a/include/lttng/tracepoint.h b/include/lttng/tracepoint.h index 0629af23..66e2abd7 100644 --- a/include/lttng/tracepoint.h +++ b/include/lttng/tracepoint.h @@ -23,12 +23,13 @@ * SOFTWARE. */ +#include +#include #include #include #include #include /* for dlopen */ #include /* for memset */ -#include #include /* for sdt */ #include @@ -144,11 +145,16 @@ extern "C" { #define _TP_ARGS_DATA_VAR(...) _TP_DATA_VAR_N(_TP_NARGS(0, ##__VA_ARGS__), ##__VA_ARGS__) #define _TP_PARAMS(...) __VA_ARGS__ +/* + * The tracepoint cb is marked always inline so we can distinguish + * between caller's ip addresses within the probe using the return + * address. + */ #define _DECLARE_TRACEPOINT(_provider, _name, ...) \ extern struct tracepoint __tracepoint_##_provider##___##_name; \ -static inline lttng_ust_notrace \ +static inline __attribute__((always_inline)) lttng_ust_notrace \ void __tracepoint_cb_##_provider##___##_name(_TP_ARGS_PROTO(__VA_ARGS__)); \ -static inline \ +static \ void __tracepoint_cb_##_provider##___##_name(_TP_ARGS_PROTO(__VA_ARGS__)) \ { \ struct tracepoint_probe *__tp_probe; \ @@ -289,7 +295,10 @@ __tracepoints__destroy(void) return; if (tracepoint_dlopen.liblttngust_handle && !__tracepoint_ptrs_registered) { ret = dlclose(tracepoint_dlopen.liblttngust_handle); - assert(!ret); + if (ret) { + fprintf(stderr, "Error (%d) in dlclose\n", ret); + abort(); + } memset(&tracepoint_dlopen, 0, sizeof(tracepoint_dlopen)); } } @@ -343,6 +352,7 @@ extern struct tracepoint * const __stop___tracepoints_ptrs[] NULL, \ _TRACEPOINT_UNDEFINED_REF(_provider), \ _TP_EXTRACT_STRING(_args), \ + { }, \ }; \ static struct tracepoint * __tracepoint_ptr_##_provider##___##_name \ __attribute__((used, section("__tracepoints_ptrs"))) = \ @@ -389,7 +399,10 @@ __tracepoints__ptrs_destroy(void) tracepoint_dlopen.tracepoint_unregister_lib(__start___tracepoints_ptrs); if (tracepoint_dlopen.liblttngust_handle && !__tracepoint_registered) { ret = dlclose(tracepoint_dlopen.liblttngust_handle); - assert(!ret); + if (ret) { + fprintf(stderr, "Error (%d) in dlclose\n", ret); + abort(); + } memset(&tracepoint_dlopen, 0, sizeof(tracepoint_dlopen)); } }