#include <stdarg.h>
TRACEPOINT_EVENT(lttng_ust_tracef, event,
- TP_ARGS(const char *, msg, unsigned int, len),
+ TP_ARGS(const char *, msg, unsigned int, len, void *, ip),
TP_FIELDS(
ctf_sequence_text(char, msg, msg, unsigned int, len)
)
#define _TP_SESSION_CHECK(session, csession) 1
#endif /* TP_SESSION_CHECK */
+#undef _TP_IP_PARAM
+#ifdef TP_IP_PARAM
+#define _TP_IP_PARAM() ip
+#else /* TP_IP_PARAM */
+#define _TP_IP_PARAM() __builtin_return_address(0)
+#endif /* TP_IP_PARAM */
+
/*
* Using twice size for filter stack data to hold size and pointer for
* each field (worse case). For integers, max size required is 64-bit.
__event_align = __event_get_align__##_provider##___##_name(_TP_ARGS_VAR(_args)); \
lib_ring_buffer_ctx_init(&__ctx, __chan->chan, __event, __event_len, \
__event_align, -1, __chan->handle); \
- __ctx.ip = __builtin_return_address(0); \
+ __ctx.ip = _TP_IP_PARAM(); \
__ret = __chan->ops->event_reserve(&__ctx, __event->id); \
if (__ret < 0) \
return; \
#endif /* _TRACEPOINT_LTTNG_UST_TRACEF_PROVIDER_H */
+#define TP_IP_PARAM /* IP context received as parameter */
#undef TRACEPOINT_INCLUDE
#define TRACEPOINT_INCLUDE "./lttng-ust-tracef.h"
/* len does not include the final \0 */
if (len < 0)
goto end;
- __tracepoint_cb_lttng_ust_tracef___event(msg, len);
+ __tracepoint_cb_lttng_ust_tracef___event(msg, len,
+ __builtin_return_address(0));
free(msg);
end:
va_end(ap);