+#undef LTTNG_UST__TRACEPOINT_EVENT_INSTANCE
+#define LTTNG_UST__TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \
+void lttng_ust__event_template_proto___##_provider##___##_template(LTTNG_UST__TP_ARGS_DATA_PROTO(_args));
+
+#undef LTTNG_UST__TRACEPOINT_EVENT_CLASS
+#define LTTNG_UST__TRACEPOINT_EVENT_CLASS(_provider, _name, _args, _fields) \
+void lttng_ust__event_template_proto___##_provider##___##_name(LTTNG_UST__TP_ARGS_DATA_PROTO(_args));
+
+#include LTTNG_UST_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) \
+ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_enum_entry, { \
+ .struct_size = sizeof(struct lttng_ust_enum_entry), \
+ .start = { \
+ .value = lttng_ust_is_signed_type(__typeof__(_value)) ? \
+ (long long) (_value) : (_value), \
+ .signedness = lttng_ust_is_signed_type(__typeof__(_value)), \
+ }, \
+ .end = { \
+ .value = lttng_ust_is_signed_type(__typeof__(_value)) ? \
+ (long long) (_value) : (_value), \
+ .signedness = lttng_ust_is_signed_type(__typeof__(_value)), \
+ }, \
+ .string = (_string), \
+ }),
+
+/* Enumeration entry (range) */
+#undef ctf_enum_range
+#define ctf_enum_range(_string, _range_start, _range_end) \
+ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_enum_entry, { \
+ .struct_size = sizeof(struct lttng_ust_enum_entry), \
+ .start = { \
+ .value = lttng_ust_is_signed_type(__typeof__(_range_start)) ? \
+ (long long) (_range_start) : (_range_start), \
+ .signedness = lttng_ust_is_signed_type(__typeof__(_range_start)), \
+ }, \
+ .end = { \
+ .value = lttng_ust_is_signed_type(__typeof__(_range_end)) ? \
+ (long long) (_range_end) : (_range_end), \
+ .signedness = lttng_ust_is_signed_type(__typeof__(_range_end)), \
+ }, \
+ .string = (_string), \
+ }),
+
+/* Enumeration entry (automatic value; follows the rules of CTF) */
+#undef ctf_enum_auto
+#define ctf_enum_auto(_string) \
+ LTTNG_UST_COMPOUND_LITERAL(const struct lttng_ust_enum_entry, { \
+ .struct_size = sizeof(struct lttng_ust_enum_entry), \
+ .start = { \
+ .value = -1ULL, \
+ .signedness = 0, \
+ }, \
+ .end = { \
+ .value = -1ULL, \
+ .signedness = 0, \
+ }, \
+ .string = (_string), \
+ .options = LTTNG_UST_ENUM_ENTRY_OPTION_IS_AUTO, \
+ }),
+
+#undef LTTNG_UST_TP_ENUM_VALUES
+#define LTTNG_UST_TP_ENUM_VALUES(...) \
+ __VA_ARGS__
+
+#if LTTNG_UST_COMPAT_API(0)
+# undef TP_ENUM_VALUES
+# define TP_ENUM_VALUES LTTNG_UST_TP_ENUM_VALUES
+#endif /* #if LTTNG_UST_COMPAT_API(0) */
+
+#undef LTTNG_UST_TRACEPOINT_ENUM
+#define LTTNG_UST_TRACEPOINT_ENUM(_provider, _name, _values) \
+ const struct lttng_ust_enum_entry * const __enum_values__##_provider##_##_name[] = { \
+ _values \
+ ctf_enum_value("", 0) /* Dummy, 0-len array forbidden by C99. */ \
+ };
+#include LTTNG_UST_TRACEPOINT_INCLUDE
+
+/*
+ * Stage 0.9.1
+ * Verifying array and sequence elements are of an integer type.
+ */
+
+/* Reset all macros within LTTNG_UST_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_array_encoded
+#define _ctf_array_encoded(_type, _item, _src, _byte_order, \
+ _length, _encoding, _nowrite, \
+ _elem_type_base) \
+ lttng_ust_ctf_array_element_type_is_supported(_type, _item);
+
+#undef _ctf_sequence_encoded
+#define _ctf_sequence_encoded(_type, _item, _src, _byte_order, \
+ _length_type, _src_length, _encoding, _nowrite, \
+ _elem_type_base) \
+ lttng_ust_ctf_array_element_type_is_supported(_type, _item);
+
+#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) \
+ _fields
+
+#include LTTNG_UST_TRACEPOINT_INCLUDE