#include TRACEPOINT_INCLUDE
+/*
+ * Stage 0.9 of tracepoint event generation
+ *
+ * Unfolding the enums
+ */
+#include <lttng/ust-tracepoint-event-reset.h>
+
+/* Enumeration entry (single value) */
+#undef ctf_enum_value
+#define ctf_enum_value(_string, _value) \
+ { _value, _value, _string },
+
+/* Enumeration entry (range) */
+#undef ctf_enum_range
+#define ctf_enum_range(_string, _range_start, _range_end) \
+ { _range_start, _range_end, _string },
+
+#undef TP_ENUM_VALUES
+#define TP_ENUM_VALUES(...) \
+ __VA_ARGS__
+
+#undef TRACEPOINT_ENUM
+#define TRACEPOINT_ENUM(_provider, _name, _values) \
+ const struct lttng_enum_entry __enum_values__##_provider##_##_name[] = { \
+ _values \
+ };
+
+#include TRACEPOINT_INCLUDE
+
/*
* Stage 1 of tracepoint event generation.
*
.nowrite = _nowrite, \
},
+#undef _ctf_enum
+#define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \
+ { \
+ .name = #_item, \
+ .type = { \
+ .atype = atype_enum, \
+ .u = { \
+ .basic = { \
+ .enumeration = { \
+ .desc = &__enum_##_provider##_##_name, \
+ .container_type = { \
+ .size = sizeof(_type) * CHAR_BIT, \
+ .alignment = lttng_alignof(_type) * CHAR_BIT, \
+ .signedness = lttng_is_signed_type(_type), \
+ .reverse_byte_order = 0, \
+ .base = 10, \
+ .encoding = lttng_encode_none, \
+ }, \
+ }, \
+ }, \
+ }, \
+ }, \
+ .nowrite = _nowrite, \
+ },
+
#undef TP_FIELDS
#define TP_FIELDS(...) __VA_ARGS__ /* Only one used in this phase */
_fields \
};
+#undef TRACEPOINT_ENUM
+#define TRACEPOINT_ENUM(_provider, _name, _values) \
+ static const struct lttng_enum_desc __enum_##_provider##_##_name = { \
+ .name = #_provider "_" #_name, \
+ .entries = __enum_values__##_provider##_##_name, \
+ .nr_entries = _TP_ARRAY_SIZE(__enum_values__##_provider##_##_name), \
+ };
+
#include TRACEPOINT_INCLUDE
/*
#include TRACEPOINT_INCLUDE
/*
- * Stage 3 of tracepoint event generation.
+ * Stage 3.0 of tracepoint event generation.
*
* Create static inline function that calculates event size.
*/
#define _ctf_string(_item, _src, _nowrite) \
__event_len += __dynamic_len[__dynamic_len_idx++] = strlen(_src) + 1;
+#undef _ctf_enum
+#define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \
+ _ctf_integer_ext(_type, _item, _src, BYTE_ORDER, 10, _nowrite)
+
#undef TP_ARGS
#define TP_ARGS(...) __VA_ARGS__
__stack_data += sizeof(void *); \
}
+#undef _ctf_enum
+#define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \
+ _ctf_integer_ext(_type, _item, _src, BYTE_ORDER, 10, _nowrite)
+
#undef TP_ARGS
#define TP_ARGS(...) __VA_ARGS__
#include TRACEPOINT_INCLUDE
-
-
/*
* Stage 4 of tracepoint event generation.
*
#undef _ctf_string
#define _ctf_string(_item, _src, _nowrite)
+#undef _ctf_enum
+#define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \
+ _ctf_integer_ext(_type, _item, _src, BYTE_ORDER, 10, _nowrite)
+
#undef TP_ARGS
#define TP_ARGS(...) __VA_ARGS__
__chan->ops->event_write(&__ctx, _src, \
__get_dynamic_len(dest));
+#undef _ctf_enum
+#define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \
+ _ctf_integer_ext(_type, _item, _src, BYTE_ORDER, 10, _nowrite)
+
/* Beware: this get len actually consumes the len value */
#undef __get_dynamic_len
#define __get_dynamic_len(field) __stackvar.__dynamic_len[__dynamic_len_idx++]
static \
void __event_probe__##_provider##___##_name(_TP_ARGS_DATA_PROTO(_args)) \
{ \
- struct lttng_event *__event = (struct lttng_event *) __tp_data; \
+ struct lttng_event *__event = (struct lttng_event *) __tp_data; \
struct lttng_channel *__chan = __event->chan; \
struct lttng_ust_lib_ring_buffer_ctx __ctx; \
+ struct lttng_stack_ctx __lttng_ctx; \
size_t __event_len, __event_align; \
size_t __dynamic_len_idx = 0; \
union { \
__event_len = __event_get_size__##_provider##___##_name(__stackvar.__dynamic_len, \
_TP_ARGS_DATA_VAR(_args)); \
__event_align = __event_get_align__##_provider##___##_name(_TP_ARGS_VAR(_args)); \
+ memset(&__lttng_ctx, 0, sizeof(__lttng_ctx)); \
+ __lttng_ctx.event = __event; \
+ __lttng_ctx.chan_ctx = tp_rcu_dereference_bp(__chan->ctx); \
+ __lttng_ctx.event_ctx = tp_rcu_dereference_bp(__event->ctx); \
lib_ring_buffer_ctx_init(&__ctx, __chan->chan, __event, __event_len, \
- __event_align, -1, __chan->handle); \
+ __event_align, -1, __chan->handle, &__lttng_ctx); \
__ctx.ip = _TP_IP_PARAM(TP_IP_PARAM); \
__ret = __chan->ops->event_reserve(&__ctx, __event->id); \
if (__ret < 0) \
.nr_fields = _TP_ARRAY_SIZE(__event_fields___##_provider##___##_template), \
.loglevel = &__ref_loglevel___##_provider##___##_name, \
.signature = __tp_event_signature___##_provider##___##_template, \
- .u = { .ext = { .model_emf_uri = &__ref_model_emf_uri___##_provider##___##_name } }, \
+ .u = { \
+ .ext = { \
+ .model_emf_uri = &__ref_model_emf_uri___##_provider##___##_name, \
+ }, \
+ }, \
};
#include TRACEPOINT_INCLUDE