-#define LTTNG_UST_TYPE_PADDING 128
-struct lttng_type {
- enum lttng_abstract_types atype;
- union {
- /* provider ABI 2.0 */
- struct lttng_integer_type integer;
- struct lttng_float_type _float;
- struct {
- enum lttng_string_encodings encoding;
- } string;
- struct {
- const struct lttng_ust_enum_desc *desc; /* Enumeration mapping */
- struct lttng_type *container_type;
- } enum_nestable;
- struct {
- const struct lttng_type *elem_type;
- unsigned int length; /* Num. elems. */
- unsigned int alignment;
- } array_nestable;
- struct {
- const char *length_name; /* Length field name. */
- const struct lttng_type *elem_type;
- unsigned int alignment; /* Alignment before elements. */
- } sequence_nestable;
- struct {
- unsigned int nr_fields;
- const struct lttng_ust_event_field **fields; /* Array of pointers to fields. */
- unsigned int alignment;
- } struct_nestable;
-
- char padding[LTTNG_UST_TYPE_PADDING];
- } u;
+struct lttng_ust_type_enum {
+ struct lttng_ust_type_common parent;
+ uint32_t struct_size;
+ const struct lttng_ust_enum_desc *desc; /* Enumeration mapping */
+ const struct lttng_ust_type_common *container_type;
+};
+
+/*
+ * The alignment field in structure, array, and sequence types is a
+ * minimum alignment requirement. The actual alignment of a type may be
+ * larger than this explicit alignment value if its nested types have a
+ * larger alignment.
+ */
+
+struct lttng_ust_type_array {
+ struct lttng_ust_type_common parent;
+ uint32_t struct_size;
+ const struct lttng_ust_type_common *elem_type;
+ unsigned int length; /* Num. elems. */
+ unsigned int alignment; /* Minimum alignment for this type. */
+ enum lttng_ust_string_encoding encoding;
+};
+
+struct lttng_ust_type_sequence {
+ struct lttng_ust_type_common parent;
+ uint32_t struct_size;
+ const char *length_name; /* Length field name. If NULL, use previous field. */
+ const struct lttng_ust_type_common *elem_type;
+ unsigned int alignment; /* Minimum alignment before elements. */
+ enum lttng_ust_string_encoding encoding;
+};
+
+struct lttng_ust_type_struct {
+ struct lttng_ust_type_common parent;
+ uint32_t struct_size;
+ unsigned int nr_fields;
+ const struct lttng_ust_event_field * const *fields; /* Array of pointers to fields. */
+ unsigned int alignment; /* Minimum alignment for this type. */