X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=liblttng-ust%2Ftracelog.c;h=ed8a067d84cec0eaf6c8e08b4710da4a90ef9940;hb=bd9bb3c77252c984f8b6a7cbfb1d6ebbd069159c;hp=93eb403a6bde5807d955f2351afc543384443356;hpb=c4d667edf49aa27d106c1855ff2fa4560be8d6f3;p=lttng-ust.git diff --git a/liblttng-ust/tracelog.c b/liblttng-ust/tracelog.c index 93eb403a..ed8a067d 100644 --- a/liblttng-ust/tracelog.c +++ b/liblttng-ust/tracelog.c @@ -23,30 +23,47 @@ #define _GNU_SOURCE #define _LGPL_SOURCE #include +#include #define TRACEPOINT_CREATE_PROBES #define TRACEPOINT_DEFINE #include "lttng-ust-tracelog-provider.h" #define TRACELOG_CB(level) \ - void _lttng_ust_tracelog_##level(const char *file, \ + static inline __attribute__((always_inline)) \ + void __lttng_ust_vtracelog_##level(const char *file, \ int line, const char *func, \ - const char *fmt, ...) \ + const char *fmt, va_list ap) \ { \ - va_list ap; \ char *msg; \ - int len; \ + const int len = vasprintf(&msg, fmt, ap); \ \ - va_start(ap, fmt); \ - len = vasprintf(&msg, fmt, ap); \ /* len does not include the final \0 */ \ if (len < 0) \ goto end; \ __tracepoint_cb_lttng_ust_tracelog___##level(file, \ line, func, msg, len, \ - __builtin_return_address(0)); \ + LTTNG_UST_CALLER_IP()); \ free(msg); \ end: \ + return; \ + } \ + \ + void _lttng_ust_vtracelog_##level(const char *file, \ + int line, const char *func, \ + const char *fmt, va_list ap) \ + { \ + __lttng_ust_vtracelog_##level(file, line, func, fmt, ap); \ + } \ + \ + void _lttng_ust_tracelog_##level(const char *file, \ + int line, const char *func, \ + const char *fmt, ...) \ + { \ + va_list ap; \ + \ + va_start(ap, fmt); \ + __lttng_ust_vtracelog_##level(file, line, func, fmt, ap); \ va_end(ap); \ }