+/*
+ * Stage 1 of tracepoint event generation.
+ *
+ * Create event field type metadata section.
+ * Each event produce an array of fields.
+ */
+
+/* Reset all macros within TRACEPOINT_EVENT */
+#include <lttng/ust-tracepoint-event-reset.h>
+#include <lttng/ust-tracepoint-event-write.h>
+#include <lttng/ust-tracepoint-event-nowrite.h>
+
+#undef _ctf_integer_ext
+#define _ctf_integer_ext(_type, _item, _src, _byte_order, _base, _nowrite) \
+ __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \
+ .struct_size = sizeof(struct lttng_ust_event_field), \
+ .name = #_item, \
+ .type = lttng_ust_type_integer_define(_type, _byte_order, _base), \
+ .nowrite = _nowrite, \
+ .nofilter = 0, \
+ }),
+
+#undef _ctf_float
+#define _ctf_float(_type, _item, _src, _nowrite) \
+ __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \
+ .struct_size = sizeof(struct lttng_ust_event_field), \
+ .name = #_item, \
+ .type = lttng_ust_type_float_define(_type), \
+ .nowrite = _nowrite, \
+ .nofilter = 0, \
+ }),
+
+#undef _ctf_array_encoded
+#define _ctf_array_encoded(_type, _item, _src, _byte_order, \
+ _length, _encoding, _nowrite, \
+ _elem_type_base) \
+ __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \
+ .struct_size = sizeof(struct lttng_ust_event_field), \
+ .name = #_item, \
+ .type = (struct lttng_ust_type_common *) __LTTNG_COMPOUND_LITERAL(struct lttng_ust_type_array, { \
+ .parent = { \
+ .type = lttng_ust_type_array, \
+ }, \
+ .struct_size = sizeof(struct lttng_ust_type_array), \
+ .elem_type = lttng_ust_type_integer_define(_type, _byte_order, _elem_type_base), \
+ .length = _length, \
+ .alignment = 0, \
+ .encoding = lttng_ust_string_encoding_##_encoding, \
+ }), \
+ .nowrite = _nowrite, \
+ .nofilter = 0, \
+ }),
+
+#undef _ctf_sequence_encoded
+#define _ctf_sequence_encoded(_type, _item, _src, _byte_order, \
+ _length_type, _src_length, _encoding, _nowrite, \
+ _elem_type_base) \
+ __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \
+ .struct_size = sizeof(struct lttng_ust_event_field), \
+ .name = "_" #_item "_length", \
+ .type = lttng_ust_type_integer_define(_length_type, BYTE_ORDER, 10), \
+ .nowrite = _nowrite, \
+ .nofilter = 1, \
+ }), \
+ __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \
+ .struct_size = sizeof(struct lttng_ust_event_field), \
+ .name = #_item, \
+ .type = (struct lttng_ust_type_common *) __LTTNG_COMPOUND_LITERAL(struct lttng_ust_type_sequence, { \
+ .parent = { \
+ .type = lttng_ust_type_sequence, \
+ }, \
+ .struct_size = sizeof(struct lttng_ust_type_sequence), \
+ .length_name = "_" #_item "_length", \
+ .elem_type = lttng_ust_type_integer_define(_type, _byte_order, _elem_type_base), \
+ .alignment = 0, \
+ .encoding = lttng_ust_string_encoding_##_encoding, \
+ }), \
+ .nowrite = _nowrite, \
+ .nofilter = 0, \
+ }),
+
+#undef _ctf_string
+#define _ctf_string(_item, _src, _nowrite) \
+ __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \
+ .struct_size = sizeof(struct lttng_ust_event_field), \
+ .name = #_item, \
+ .type = (struct lttng_ust_type_common *) __LTTNG_COMPOUND_LITERAL(struct lttng_ust_type_string, { \
+ .parent = { \
+ .type = lttng_ust_type_string, \
+ }, \
+ .struct_size = sizeof(struct lttng_ust_type_string), \
+ .encoding = lttng_ust_string_encoding_UTF8, \
+ }), \
+ .nowrite = _nowrite, \
+ .nofilter = 0, \
+ }),
+
+#undef _ctf_enum
+#define _ctf_enum(_provider, _name, _type, _item, _src, _nowrite) \
+ __LTTNG_COMPOUND_LITERAL(struct lttng_ust_event_field, { \
+ .struct_size = sizeof(struct lttng_ust_event_field), \
+ .name = #_item, \
+ .type = (struct lttng_ust_type_common *) __LTTNG_COMPOUND_LITERAL(struct lttng_ust_type_enum, { \
+ .parent = { \
+ .type = lttng_ust_type_enum, \
+ }, \
+ .struct_size = sizeof(struct lttng_ust_type_enum), \
+ .desc = &__enum_##_provider##_##_name, \
+ .container_type = lttng_ust_type_integer_define(_type, BYTE_ORDER, 10), \
+ }), \
+ .nowrite = _nowrite, \
+ .nofilter = 0, \
+ }),
+
+#undef TP_FIELDS
+#define TP_FIELDS(...) __VA_ARGS__ /* Only one used in this phase */
+
+#undef _TRACEPOINT_EVENT_CLASS
+#define _TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \
+ static struct lttng_ust_event_field *__event_fields___##_provider##___##_name[] = { \
+ _fields \
+ ctf_integer(int, dummy, 0) /* Dummy, C99 forbids 0-len array. */ \
+ };
+
+#undef TRACEPOINT_ENUM
+#define TRACEPOINT_ENUM(_provider, _name, _values) \
+ static struct lttng_ust_enum_desc __enum_##_provider##_##_name = { \
+ .struct_size = sizeof(struct lttng_ust_enum_desc), \
+ .name = #_provider "_" #_name, \
+ .entries = __enum_values__##_provider##_##_name, \
+ .nr_entries = _TP_ARRAY_SIZE(__enum_values__##_provider##_##_name) - 1, \
+ };
+
+#include TRACEPOINT_INCLUDE