char padding[USTCTL_UST_FLOAT_TYPE_PADDING];
} LTTNG_PACKED;
+#define USTCTL_UST_ENUM_VALUE_PADDING 15
+struct ustctl_enum_value {
+ uint64_t value;
+ uint8_t signedness;
+ char padding[USTCTL_UST_ENUM_VALUE_PADDING];
+} LTTNG_PACKED;
+
#define USTCTL_UST_ENUM_ENTRY_PADDING 32
struct ustctl_enum_entry {
- uint64_t start, end; /* start and end are inclusive */
+ struct ustctl_enum_value start, end; /* start and end are inclusive */
char string[LTTNG_UST_SYM_NAME_LEN];
char padding[USTCTL_UST_ENUM_ENTRY_PADDING];
-};
+} LTTNG_PACKED;
#define USTCTL_UST_BASIC_TYPE_PADDING 296
union _ustctl_basic_type {
NR_STRING_ENCODINGS,
};
+struct lttng_enum_value {
+ unsigned long long value;
+ unsigned int signedness:1;
+};
+
#define LTTNG_UST_ENUM_ENTRY_PADDING 16
struct lttng_enum_entry {
- unsigned long long start, end; /* start and end are inclusive */
+ struct lttng_enum_value start, end; /* start and end are inclusive */
const char *string;
char padding[LTTNG_UST_ENUM_ENTRY_PADDING];
};
/* Enumeration entry (single value) */
#undef ctf_enum_value
#define ctf_enum_value(_string, _value) \
- { _value, _value, _string },
+ { \
+ .start = { \
+ .signedness = lttng_is_signed_type(__typeof__(_value)), \
+ .value = lttng_is_signed_type(__typeof__(_value)) ? \
+ (long long) (_value) : (_value), \
+ }, \
+ .end = { \
+ .signedness = lttng_is_signed_type(__typeof__(_value)), \
+ .value = lttng_is_signed_type(__typeof__(_value)) ? \
+ (long long) (_value) : (_value), \
+ }, \
+ .string = (_string), \
+ },
/* Enumeration entry (range) */
#undef ctf_enum_range
#define ctf_enum_range(_string, _range_start, _range_end) \
- { _range_start, _range_end, _string },
+ { \
+ .start = { \
+ .signedness = lttng_is_signed_type(__typeof__(_range_start)), \
+ .value = lttng_is_signed_type(__typeof__(_range_start)) ? \
+ (long long) (_range_start) : (_range_start), \
+ }, \
+ .end = { \
+ .signedness = lttng_is_signed_type(__typeof__(_range_end)), \
+ .value = lttng_is_signed_type(__typeof__(_range_end)) ? \
+ (long long) (_range_end) : (_range_end), \
+ }, \
+ .string = (_string), \
+ },
#undef TP_ENUM_VALUES
#define TP_ENUM_VALUES(...) \
uentry = &entries[i];
lentry = <tng_entries[i];
- uentry->start = lentry->start;
- uentry->end = lentry->end;
+ uentry->start.value = lentry->start.value;
+ uentry->start.signedness = lentry->start.signedness;
+ uentry->end.value = lentry->end.value;
+ uentry->end.signedness = lentry->end.signedness;
strncpy(uentry->string, lentry->string, LTTNG_UST_SYM_NAME_LEN);
uentry->string[LTTNG_UST_SYM_NAME_LEN - 1] = '\0';
}
#include <helper.h>
#include <lttng/ust-dynamic-type.h>
-static const struct lttng_enum_entry dt_enum[_NR_LTTNG_UST_DYNAMIC_TYPES] = {
- [LTTNG_UST_DYNAMIC_TYPE_NONE] = {
- .start = 0,
- .end = 0,
- .string = "_none",
- },
- [LTTNG_UST_DYNAMIC_TYPE_S8] = {
- .start = 1,
- .end = 1,
- .string = "_int8",
- },
- [LTTNG_UST_DYNAMIC_TYPE_S16] = {
- .start = 2,
- .end = 2,
- .string = "_int16",
- },
- [LTTNG_UST_DYNAMIC_TYPE_S32] = {
- .start = 3,
- .end = 3,
- .string = "_int32",
- },
- [LTTNG_UST_DYNAMIC_TYPE_S64] = {
- .start = 4,
- .end = 4,
- .string = "_int64",
- },
- [LTTNG_UST_DYNAMIC_TYPE_U8] = {
- .start = 5,
- .end = 5,
- .string = "_uint8",
- },
- [LTTNG_UST_DYNAMIC_TYPE_U16] = {
- .start = 6,
- .end = 6,
- .string = "_uint16",
- },
- [LTTNG_UST_DYNAMIC_TYPE_U32] = {
- .start = 7,
- .end = 7,
- .string = "_uint32",
- },
- [LTTNG_UST_DYNAMIC_TYPE_U64] = {
- .start = 8,
- .end = 8,
- .string = "_uint64",
- },
- [LTTNG_UST_DYNAMIC_TYPE_FLOAT] = {
- .start = 9,
- .end = 9,
- .string = "_float",
- },
- [LTTNG_UST_DYNAMIC_TYPE_DOUBLE] = {
- .start = 10,
- .end = 10,
- .string = "_double",
- },
- [LTTNG_UST_DYNAMIC_TYPE_STRING] = {
- .start = 11,
- .end = 11,
- .string = "_string",
+#define ctf_enum_value(_string, _value) \
+ { \
+ .start = { \
+ .signedness = lttng_is_signed_type(__typeof__(_value)), \
+ .value = lttng_is_signed_type(__typeof__(_value)) ? \
+ (long long) (_value) : (_value), \
+ }, \
+ .end = { \
+ .signedness = lttng_is_signed_type(__typeof__(_value)), \
+ .value = lttng_is_signed_type(__typeof__(_value)) ? \
+ (long long) (_value) : (_value), \
+ }, \
+ .string = (_string), \
},
+
+static const struct lttng_enum_entry dt_enum[_NR_LTTNG_UST_DYNAMIC_TYPES] = {
+ [LTTNG_UST_DYNAMIC_TYPE_NONE] = ctf_enum_value("_none", 0)
+ [LTTNG_UST_DYNAMIC_TYPE_S8] = ctf_enum_value("_int8", 1)
+ [LTTNG_UST_DYNAMIC_TYPE_S16] = ctf_enum_value("_int16", 2)
+ [LTTNG_UST_DYNAMIC_TYPE_S32] = ctf_enum_value("_int32", 3)
+ [LTTNG_UST_DYNAMIC_TYPE_S64] = ctf_enum_value("_int64", 4)
+ [LTTNG_UST_DYNAMIC_TYPE_U8] = ctf_enum_value("_uint8", 5)
+ [LTTNG_UST_DYNAMIC_TYPE_U16] = ctf_enum_value("_uint16", 6)
+ [LTTNG_UST_DYNAMIC_TYPE_U32] = ctf_enum_value("_uint32", 7)
+ [LTTNG_UST_DYNAMIC_TYPE_U64] = ctf_enum_value("_uint64", 8)
+ [LTTNG_UST_DYNAMIC_TYPE_FLOAT] = ctf_enum_value("_float", 9)
+ [LTTNG_UST_DYNAMIC_TYPE_DOUBLE] = ctf_enum_value("_double", 10)
+ [LTTNG_UST_DYNAMIC_TYPE_STRING] = ctf_enum_value("_string", 11)
};
static const struct lttng_enum_desc dt_enum_desc = {