-#define __type_float(_type) \
- { \
- .atype = atype_float, \
- .u = \
- { \
- ._float = \
- { \
- .exp_dig = sizeof(_type) * CHAR_BIT \
- - _float_mant_dig(_type), \
- .mant_dig = _float_mant_dig(_type), \
- .alignment = lttng_alignof(_type) * CHAR_BIT, \
- .reverse_byte_order = BYTE_ORDER != FLOAT_WORD_ORDER, \
- } \
- } \
- } \
-
-#define LTTNG_UST_FLOAT_TYPE_PADDING 24
-struct lttng_float_type {
- unsigned int exp_dig; /* exponent digits, in bits */
- unsigned int mant_dig; /* mantissa digits, in bits */
- unsigned short alignment; /* in bits */
- unsigned int reverse_byte_order:1;
- char padding[LTTNG_UST_FLOAT_TYPE_PADDING];
+#define lttng_ust_type_float_define(_type) \
+ ((struct lttng_ust_type_common *) LTTNG_UST_COMPOUND_LITERAL(struct lttng_ust_type_float, { \
+ .parent = { \
+ .type = lttng_ust_type_float, \
+ }, \
+ .struct_size = sizeof(struct lttng_ust_type_float), \
+ .exp_dig = sizeof(_type) * CHAR_BIT \
+ - lttng_ust_float_mant_dig(_type), \
+ .mant_dig = lttng_ust_float_mant_dig(_type), \
+ .alignment = lttng_ust_rb_alignof(_type) * CHAR_BIT, \
+ .reverse_byte_order = LTTNG_UST_BYTE_ORDER != LTTNG_UST_FLOAT_WORD_ORDER, \
+ }))
+
+
+struct lttng_ust_type_string {
+ struct lttng_ust_type_common parent;
+ uint32_t struct_size;
+ enum lttng_ust_string_encoding encoding;
+};
+
+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;