Improve tracef/tracelog to use the stack for small strings
[lttng-ust.git] / src / lib / lttng-ust / tracelog.c
index 8147d7a339abc9383ba31e4816779811c0efaa36..bd38032cba31d30654bbc4a67a0d7bcc76030bab 100644 (file)
@@ -7,6 +7,7 @@
 #define _LGPL_SOURCE
 #include <stdio.h>
 #include "common/macros.h"
+#include "common/tracer.h"
 
 /* The tracepoint definition is public, but the provider definition is hidden. */
 #define LTTNG_UST_TRACEPOINT_PROVIDER_HIDDEN_DEFINITION
 #define LTTNG_UST_TRACEPOINT_DEFINE
 #include "lttng-ust-tracelog-provider.h"
 
+#include "tracelog-internal.h"
+
 #define LTTNG_UST_TRACELOG_CB(level) \
-       static inline \
-       void lttng_ust___vtracelog_##level(const char *file, \
-                       int line, const char *func, \
-                       const char *fmt, va_list ap) \
-               __attribute__((always_inline, format(printf, 4, 0))); \
-       \
-       static inline \
-       void lttng_ust___vtracelog_##level(const char *file, \
-                       int line, const char *func, \
-                       const char *fmt, va_list ap) \
-       { \
-               char *msg; \
-               const int len = vasprintf(&msg, fmt, ap); \
-               \
-               /* len does not include the final \0 */ \
-               if (len < 0) \
-                       goto end; \
-               lttng_ust_tracepoint_cb_lttng_ust_tracelog___##level(file, \
-                       line, func, msg, len, \
-                       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) \
@@ -53,7 +31,9 @@
                        int line, const char *func, \
                        const char *fmt, va_list ap) \
        { \
-               lttng_ust___vtracelog_##level(file, line, func, fmt, ap); \
+               LTTNG_UST_TRACELOG_VALIST(fmt, ap, \
+                       lttng_ust_tracepoint_cb_lttng_ust_tracelog___##level, \
+                       file, line, func, msg, len, LTTNG_UST_CALLER_IP()); \
        } \
        \
        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); \
+               LTTNG_UST_TRACELOG_VARARG(fmt, \
+                       lttng_ust_tracepoint_cb_lttng_ust_tracelog___##level, \
+                       file, line, func, msg, len, LTTNG_UST_CALLER_IP()); \
        }
 
 LTTNG_UST_TRACELOG_CB(LTTNG_UST_TRACEPOINT_LOGLEVEL_EMERG)
This page took 0.023831 seconds and 4 git commands to generate.