struct side_arg_dynamic_struct;
struct side_events_register_handle;
struct side_arg_variant;
+struct side_event_state;
enum side_type_label {
/* Stack-copy basic types */
struct side_type_raw_string {
side_ptr_t(const void) p; /* pointer to string */
uint8_t unit_size; /* 1, 2, or 4 bytes */
- uint8_t byte_order; /* enum side_type_label_byte_order */
+ side_enum_t(enum side_type_label_byte_order, uint8_t) byte_order;
} SIDE_PACKED;
struct side_attr_value {
uint32_t nr_attr;
uint16_t bool_size; /* bytes */
uint16_t len_bits; /* bits. 0 for (bool_size * CHAR_BITS) */
- uint8_t byte_order; /* enum side_type_label_byte_order */
+ side_enum_t(enum side_type_label_byte_order, uint8_t) byte_order;
} SIDE_PACKED;
struct side_type_byte {
side_ptr_t(const struct side_attr) attr;
uint32_t nr_attr;
uint8_t unit_size; /* 1, 2, or 4 bytes */
- uint8_t byte_order; /* enum side_type_label_byte_order */
+ side_enum_t(enum side_type_label_byte_order, uint8_t) byte_order;
} SIDE_PACKED;
struct side_type_integer {
uint16_t integer_size; /* bytes */
uint16_t len_bits; /* bits. 0 for (integer_size * CHAR_BITS) */
uint8_t signedness; /* true/false */
- uint8_t byte_order; /* enum side_type_label_byte_order */
+ side_enum_t(enum side_type_label_byte_order, uint8_t) byte_order;
} SIDE_PACKED;
struct side_type_float {
side_ptr_t(const struct side_attr) attr;
uint32_t nr_attr;
uint16_t float_size; /* bytes */
- uint8_t byte_order; /* enum side_type_label_byte_order */
+ side_enum_t(enum side_type_label_byte_order, uint8_t) byte_order;
} SIDE_PACKED;
struct side_enum_mapping {
void *priv; /* Private tracer context. */
} SIDE_PACKED;
-/*
- * This structure is _not_ packed to allow atomic operations on its
- * fields.
- */
-struct side_event_state {
- uintptr_t enabled;
- const struct side_callback *callbacks;
- uint32_t nr_callbacks;
-};
-
struct side_event_description {
side_ptr_t(struct side_event_state) state;
side_ptr_t(const char) provider_name;
side_enum_t(enum side_loglevel, uint32_t) loglevel;
uint32_t nr_fields;
uint32_t nr_attr;
+ uint32_t nr_callbacks;
} SIDE_PACKED;
+/*
+ * This structure is _not_ packed to allow atomic operations on its
+ * fields.
+ */
+struct side_event_state {
+ uintptr_t enabled;
+ const struct side_callback *callbacks;
+ struct side_event_description *desc;
+};
+
/* Event and type attributes */
#define side_attr(_key, _value) \
.key = { \
.p = SIDE_PTR_INIT(_key), \
.unit_size = sizeof(uint8_t), \
- .byte_order = SIDE_TYPE_BYTE_ORDER_HOST, \
+ .byte_order = SIDE_ENUM_INIT(SIDE_TYPE_BYTE_ORDER_HOST), \
}, \
.value = SIDE_PARAM(_value), \
}
.string_value = { \
.p = SIDE_PTR_INIT(_val), \
.unit_size = _unit_size, \
- .byte_order = _byte_order, \
+ .byte_order = SIDE_ENUM_INIT(_byte_order), \
}, \
}, \
}
.label = { \
.p = SIDE_PTR_INIT(_label), \
.unit_size = sizeof(uint8_t), \
- .byte_order = SIDE_TYPE_BYTE_ORDER_HOST, \
+ .byte_order = SIDE_ENUM_INIT(SIDE_TYPE_BYTE_ORDER_HOST), \
}, \
}
.label = { \
.p = SIDE_PTR_INIT(_label), \
.unit_size = sizeof(uint8_t), \
- .byte_order = SIDE_TYPE_BYTE_ORDER_HOST, \
+ .byte_order = SIDE_ENUM_INIT(SIDE_TYPE_BYTE_ORDER_HOST), \
}, \
}
.label = { \
.p = SIDE_PTR_INIT(_label), \
.unit_size = sizeof(uint8_t), \
- .byte_order = SIDE_TYPE_BYTE_ORDER_HOST, \
+ .byte_order = SIDE_ENUM_INIT(SIDE_TYPE_BYTE_ORDER_HOST), \
}, \
}
.label = { \
.p = SIDE_PTR_INIT(_label), \
.unit_size = sizeof(uint8_t), \
- .byte_order = SIDE_TYPE_BYTE_ORDER_HOST, \
+ .byte_order = SIDE_ENUM_INIT(SIDE_TYPE_BYTE_ORDER_HOST), \
}, \
}
.nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
.bool_size = sizeof(uint8_t), \
.len_bits = 0, \
- .byte_order = SIDE_TYPE_BYTE_ORDER_HOST, \
+ .byte_order = SIDE_ENUM_INIT(SIDE_TYPE_BYTE_ORDER_HOST), \
}, \
}, \
}
.attr = SIDE_PTR_INIT(_attr), \
.nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
.unit_size = _unit_size, \
- .byte_order = _byte_order, \
+ .byte_order = SIDE_ENUM_INIT(_byte_order), \
}, \
}, \
}
.integer_size = _integer_size, \
.len_bits = _len_bits, \
.signedness = _signedness, \
- .byte_order = _byte_order, \
+ .byte_order = SIDE_ENUM_INIT(_byte_order), \
}, \
}, \
}
.attr = SIDE_PTR_INIT(_attr), \
.nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM(_attr)), \
.float_size = _float_size, \
- .byte_order = _byte_order, \
+ .byte_order = SIDE_ENUM_INIT(_byte_order), \
}, \
}, \
}
.nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
.bool_size = _bool_size, \
.len_bits = _len_bits, \
- .byte_order = _byte_order, \
+ .byte_order = SIDE_ENUM_INIT(_byte_order), \
}, \
.offset_bits = _offset_bits, \
}, \
.integer_size = _integer_size, \
.len_bits = _len_bits, \
.signedness = _signedness, \
- .byte_order = _byte_order, \
+ .byte_order = SIDE_ENUM_INIT(_byte_order), \
}, \
.offset_bits = _offset_bits, \
}, \
.attr = SIDE_PTR_INIT(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
.nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
.float_size = _float_size, \
- .byte_order = _byte_order, \
+ .byte_order = SIDE_ENUM_INIT(_byte_order), \
}, \
}, \
}, \
.attr = SIDE_PTR_INIT(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
.nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
.unit_size = _unit_size, \
- .byte_order = _byte_order, \
+ .byte_order = SIDE_ENUM_INIT(_byte_order), \
}, \
}, \
}, \
.nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
.bool_size = sizeof(uint8_t), \
.len_bits = 0, \
- .byte_order = SIDE_TYPE_BYTE_ORDER_HOST, \
+ .byte_order = SIDE_ENUM_INIT(SIDE_TYPE_BYTE_ORDER_HOST), \
}, \
.value = { \
.side_bool8 = !!(_val), \
.attr = SIDE_PTR_INIT(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
.nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
.unit_size = _unit_size, \
- .byte_order = _byte_order, \
+ .byte_order = SIDE_ENUM_INIT(_byte_order), \
}, \
.value = (uintptr_t) (_val), \
}, \
.integer_size = _integer_size, \
.len_bits = _len_bits, \
.signedness = _signedness, \
- .byte_order = _byte_order, \
+ .byte_order = SIDE_ENUM_INIT(_byte_order), \
}, \
.value = { \
_field = (_val), \
.attr = SIDE_PTR_INIT(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
.nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
.float_size = _float_size, \
- .byte_order = _byte_order, \
+ .byte_order = SIDE_ENUM_INIT(_byte_order), \
}, \
.value = { \
_field = (_val), \
.sav = SIDE_PTR_INIT(side_sav), \
.len = SIDE_ARRAY_SIZE(side_sav), \
}; \
- side_call(&(_identifier), &side_arg_vec); \
+ side_call(&(side_event_state__##_identifier), &side_arg_vec); \
}
#define side_event(_identifier, _sav) \
.len = SIDE_ARRAY_SIZE(side_fields), \
.nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
}; \
- side_call_variadic(&(_identifier), &side_arg_vec, &var_struct); \
+ side_call_variadic(&(side_event_state__##_identifier), &side_arg_vec, &var_struct); \
}
#define side_event_variadic(_identifier, _sav, _var, _attr...) \
side_event_call_variadic(_identifier, SIDE_PARAM(_sav), SIDE_PARAM(_var), SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list()))
#define _side_define_event(_linkage, _identifier, _provider, _event, _loglevel, _fields, _flags, _attr...) \
+ _linkage struct side_event_description __attribute__((section("side_event_description"))) \
+ _identifier; \
_linkage struct side_event_state __attribute__((section("side_event_state"))) \
side_event_state__##_identifier = { \
.enabled = 0, \
.callbacks = &side_empty_callback, \
- .nr_callbacks = 0, \
+ .desc = &_identifier, \
}; \
_linkage struct side_event_description __attribute__((section("side_event_description"))) \
_identifier = { \
.loglevel = SIDE_ENUM_INIT(_loglevel), \
.nr_fields = SIDE_ARRAY_SIZE(SIDE_PARAM(_fields)), \
.nr_attr = SIDE_ARRAY_SIZE(SIDE_PARAM_SELECT_ARG1(_, ##_attr, side_attr_list())), \
+ .nr_callbacks = 0, \
}; \
static const struct side_event_description *side_event_ptr__##_identifier \
__attribute__((section("side_event_description_ptr"), used)) = &(_identifier);
extern const struct side_callback side_empty_callback;
-void side_call(const struct side_event_description *desc,
+void side_call(const struct side_event_state *state,
const struct side_arg_vec *side_arg_vec);
-void side_call_variadic(const struct side_event_description *desc,
+void side_call_variadic(const struct side_event_state *state,
const struct side_arg_vec *side_arg_vec,
const struct side_arg_dynamic_struct *var_struct);