bool cmp;
tracer_convert_string_to_utf8(side_ptr_get(attr->key.p), attr->key.unit_size,
- attr->key.byte_order, NULL, &utf8_str);
+ side_enum_get(attr->key.byte_order), NULL, &utf8_str);
cmp = strcmp(utf8_str, "std.integer.base");
if (utf8_str != side_ptr_get(attr->key.p))
free(utf8_str);
char *utf8_str = NULL;
tracer_convert_string_to_utf8(side_ptr_get(attr->key.p), attr->key.unit_size,
- attr->key.byte_order, NULL, &utf8_str);
+ side_enum_get(attr->key.byte_order), NULL, &utf8_str);
printf("{ key%s \"%s\", value%s ", separator, utf8_str, separator);
if (utf8_str != side_ptr_get(attr->key.p))
free(utf8_str);
case SIDE_ATTR_TYPE_STRING:
tracer_print_string(side_ptr_get(attr->value.u.string_value.p),
attr->value.u.string_value.unit_size,
- attr->value.u.string_value.byte_order, NULL);
+ side_enum_get(attr->value.u.string_value.byte_order), NULL);
break;
default:
fprintf(stderr, "ERROR: <UNKNOWN ATTRIBUTE TYPE>");
len_bits = type_integer->len_bits;
if (len_bits + offset_bits > type_integer->integer_size * CHAR_BIT)
abort();
- reverse_bo = type_integer->byte_order != SIDE_TYPE_BYTE_ORDER_HOST;
+ reverse_bo = side_enum_get(type_integer->byte_order) != SIDE_TYPE_BYTE_ORDER_HOST;
switch (type_integer->integer_size) {
case 1:
if (type_integer->signedness)
}
if (v64.s >= mapping->range_begin && v64.s <= mapping->range_end) {
printf("%s", print_count++ ? ", " : "");
- tracer_print_string(side_ptr_get(mapping->label.p), mapping->label.unit_size, mapping->label.byte_order, NULL);
+ tracer_print_string(side_ptr_get(mapping->label.p), mapping->label.unit_size,
+ side_enum_get(mapping->label.byte_order), NULL);
}
}
if (!print_count)
match:
if (match) {
printf("%s", print_count++ ? ", " : "");
- tracer_print_string(side_ptr_get(mapping->label.p), mapping->label.unit_size, mapping->label.byte_order, NULL);
+ tracer_print_string(side_ptr_get(mapping->label.p), mapping->label.unit_size,
+ side_enum_get(mapping->label.byte_order), NULL);
}
}
if (!print_count)
len_bits = type_bool->len_bits;
if (len_bits + offset_bits > type_bool->bool_size * CHAR_BIT)
abort();
- reverse_bo = type_bool->byte_order != SIDE_TYPE_BYTE_ORDER_HOST;
+ reverse_bo = side_enum_get(type_bool->byte_order) != SIDE_TYPE_BYTE_ORDER_HOST;
switch (type_bool->bool_size) {
case 1:
v = value->side_bool8;
bool reverse_bo;
tracer_print_type_header(separator, side_ptr_get(type_float->attr), type_float->nr_attr);
- reverse_bo = type_float->byte_order != SIDE_TYPE_FLOAT_WORD_ORDER_HOST;
+ reverse_bo = side_enum_get(type_float->byte_order) != SIDE_TYPE_FLOAT_WORD_ORDER_HOST;
switch (type_float->float_size) {
case 2:
{
case SIDE_TYPE_STRING_UTF32:
tracer_print_type_header(":", side_ptr_get(type_desc->u.side_string.attr), type_desc->u.side_string.nr_attr);
tracer_print_string(side_ptr_get(item->u.side_static.string_value),
- type_desc->u.side_string.unit_size, type_desc->u.side_string.byte_order, NULL);
+ type_desc->u.side_string.unit_size, side_enum_get(type_desc->u.side_string.byte_order), NULL);
break;
/* Stack-copy compound types */
type_gather->u.side_string.type.nr_attr);
if (ptr) {
tracer_print_string(ptr, type_gather->u.side_string.type.unit_size,
- type_gather->u.side_string.type.byte_order, &string_len);
+ side_enum_get(type_gather->u.side_string.type.byte_order), &string_len);
} else {
printf("<NULL>");
string_len = type_gather->u.side_string.type.unit_size;
.write_elem = tracer_write_elem_cb,
.priv = &tracer_priv,
};
+ side_visitor_func func;
print_attributes("attr", ":", side_ptr_get(type_desc->u.side_vla_visitor.attr), type_desc->u.side_vla_visitor.nr_attr);
printf("%s", type_desc->u.side_vla_visitor.nr_attr ? ", " : "");
printf("elements: ");
printf("[ ");
- status = type_desc->u.side_vla_visitor.visitor(&tracer_ctx, app_ctx);
+ func = side_ptr_get(type_desc->u.side_vla_visitor.visitor);
+ status = func(&tracer_ctx, app_ctx);
switch (status) {
case SIDE_VISITOR_STATUS_OK:
break;
.write_field = tracer_dynamic_struct_write_elem_cb,
.priv = &tracer_priv,
};
- void *app_ctx = item->u.side_dynamic.side_dynamic_struct_visitor.app_ctx;
+ void *app_ctx = side_ptr_get(item->u.side_dynamic.side_dynamic_struct_visitor.app_ctx);
print_attributes("attr", "::", side_ptr_get(item->u.side_dynamic.side_dynamic_struct_visitor.attr), item->u.side_dynamic.side_dynamic_struct_visitor.nr_attr);
printf("%s", item->u.side_dynamic.side_dynamic_struct_visitor.nr_attr ? ", " : "");
printf("fields:: ");
printf("[ ");
- status = item->u.side_dynamic.side_dynamic_struct_visitor.visitor(&tracer_ctx, app_ctx);
+ status = side_ptr_get(item->u.side_dynamic.side_dynamic_struct_visitor.visitor)(&tracer_ctx, app_ctx);
switch (status) {
case SIDE_VISITOR_STATUS_OK:
break;
.write_elem = tracer_dynamic_vla_write_elem_cb,
.priv = &tracer_priv,
};
- void *app_ctx = item->u.side_dynamic.side_dynamic_vla_visitor.app_ctx;
+ void *app_ctx = side_ptr_get(item->u.side_dynamic.side_dynamic_vla_visitor.app_ctx);
print_attributes("attr", "::", side_ptr_get(item->u.side_dynamic.side_dynamic_vla_visitor.attr), item->u.side_dynamic.side_dynamic_vla_visitor.nr_attr);
printf("%s", item->u.side_dynamic.side_dynamic_vla_visitor.nr_attr ? ", " : "");
printf("elements:: ");
printf("[ ");
- status = item->u.side_dynamic.side_dynamic_vla_visitor.visitor(&tracer_ctx, app_ctx);
+ status = side_ptr_get(item->u.side_dynamic.side_dynamic_vla_visitor.visitor)(&tracer_ctx, app_ctx);
switch (status) {
case SIDE_VISITOR_STATUS_OK:
break;
tracer_print_type_header("::", side_ptr_get(item->u.side_dynamic.side_string.type.attr), item->u.side_dynamic.side_string.type.nr_attr);
tracer_print_string((const char *)(uintptr_t) item->u.side_dynamic.side_string.value,
item->u.side_dynamic.side_string.type.unit_size,
- item->u.side_dynamic.side_string.type.byte_order, NULL);
+ side_enum_get(item->u.side_dynamic.side_string.type.byte_order), NULL);
break;
/* Dynamic compound types */
/* Skip NULL pointers */
if (!event)
continue;
+ if (event->version != SIDE_ABI_VERSION) {
+ printf("Error: event SIDE ABI version (%u) does not match the SIDE ABI version supported by the tracer (%u)\n",
+ event->version, SIDE_ABI_VERSION);
+ return;
+ }
printf("provider: %s, event: %s\n",
side_ptr_get(event->provider_name), side_ptr_get(event->event_name));
+ if (event->struct_size != side_offsetofend(struct side_event_description, side_event_description_orig_abi_last)) {
+ printf("Warning: Event %s.%s contains fields unknown to the tracer\n",
+ side_ptr_get(event->provider_name), side_ptr_get(event->event_name));
+ }
if (notif == SIDE_TRACER_NOTIFICATION_INSERT_EVENTS) {
+ if (event->nr_side_type_label > _NR_SIDE_TYPE_LABEL) {
+ printf("Warning: event %s:%s may contain unknown field types (%u unknown types)\n",
+ side_ptr_get(event->provider_name), side_ptr_get(event->event_name),
+ event->nr_side_type_label - _NR_SIDE_TYPE_LABEL);
+ }
+ if (event->nr_side_attr_type > _NR_SIDE_ATTR_TYPE) {
+ printf("Warning: event %s:%s may contain unknown attribute types (%u unknown types)\n",
+ side_ptr_get(event->provider_name), side_ptr_get(event->event_name),
+ event->nr_side_attr_type - _NR_SIDE_ATTR_TYPE);
+ }
if (event->flags & SIDE_EVENT_FLAG_VARIADIC) {
ret = side_tracer_callback_variadic_register(event, tracer_call_variadic, NULL);
if (ret)