+#undef lttng_ust__field_array_encoded
+#define lttng_ust__field_array_encoded(_type, _item, _src, _byte_order, \
+ _length, _encoding, _nowrite, \
+ _elem_type_base) \
+ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_event_field, { \
+ .struct_size = sizeof(struct lttng_ust_event_field), \
+ .name = #_item, \
+ .type = (const struct lttng_ust_type_common *) LTTNG_UST_COMPOUND_LITERAL(const 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 lttng_ust__field_sequence_encoded
+#define lttng_ust__field_sequence_encoded(_type, _item, _src, _byte_order, \
+ _length_type, _src_length, _encoding, _nowrite, \
+ _elem_type_base) \
+ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_event_field, { \
+ .struct_size = sizeof(struct lttng_ust_event_field), \
+ .name = "_" #_item "_length", \
+ .type = lttng_ust_type_integer_define(_length_type, LTTNG_UST_BYTE_ORDER, 10), \
+ .nowrite = _nowrite, \
+ .nofilter = 1, \
+ }), \
+ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_event_field, { \
+ .struct_size = sizeof(struct lttng_ust_event_field), \
+ .name = #_item, \
+ .type = (const struct lttng_ust_type_common *) LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_type_sequence, { \
+ .parent = { \
+ .type = lttng_ust_type_sequence, \
+ }, \
+ .struct_size = sizeof(struct lttng_ust_type_sequence), \
+ .length_name = NULL, /* Use previous field. */ \
+ .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 lttng_ust__field_string
+#define lttng_ust__field_string(_item, _src, _nowrite) \
+ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_event_field, { \
+ .struct_size = sizeof(struct lttng_ust_event_field), \
+ .name = #_item, \
+ .type = (const struct lttng_ust_type_common *) LTTNG_UST_COMPOUND_LITERAL(const 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 lttng_ust__field_unused
+#define lttng_ust__field_unused(_src)
+
+#undef lttng_ust__field_enum
+#define lttng_ust__field_enum(_provider, _name, _type, _item, _src, _nowrite) \
+ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_event_field, { \
+ .struct_size = sizeof(struct lttng_ust_event_field), \
+ .name = #_item, \
+ .type = (const struct lttng_ust_type_common *) LTTNG_UST_COMPOUND_LITERAL(const 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, LTTNG_UST_BYTE_ORDER, 10), \
+ }), \
+ .nowrite = _nowrite, \
+ .nofilter = 0, \
+ }),
+
+#undef LTTNG_UST_TP_FIELDS
+#define LTTNG_UST_TP_FIELDS(...) __VA_ARGS__ /* Only one used in this phase */
+
+#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS
+#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \
+ static const struct lttng_ust_event_field * const lttng_ust__event_fields___##_provider##___##_name[] = { \
+ _fields \
+ lttng_ust_field_integer(int, dummy, 0) /* Dummy, C99 forbids 0-len array. */ \
+ }; \
+ static const struct lttng_ust_tracepoint_class lttng_ust__event_class___##_provider##___##_name = { \
+ .struct_size = sizeof(struct lttng_ust_tracepoint_class), \
+ .fields = lttng_ust__event_fields___##_provider##___##_name, \
+ .nr_fields = LTTNG_UST__TP_ARRAY_SIZE(lttng_ust__event_fields___##_provider##___##_name) - 1, \
+ .probe_callback = (void (*)(void)) <tng_ust__event_probe__##_provider##___##_name, \
+ .signature = __tp_event_signature___##_provider##___##_name, \
+ .probe_desc = <tng_ust__probe_desc___##_provider, \
+ };
+
+#undef LTTNG_UST_TRACEPOINT_ENUM
+#define LTTNG_UST_TRACEPOINT_ENUM(_provider, _name, _values) \
+ static const 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 = LTTNG_UST__TP_ARRAY_SIZE(__enum_values__##_provider##_##_name) - 1, \
+ .probe_desc = <tng_ust__probe_desc___##_provider, \
+ };
+
+#include LTTNG_UST_TRACEPOINT_INCLUDE