#include "trace-ir-mapping.h"
#include "trace-ir-metadata-copy.h"
#include "utils.h"
+#include "plugins/common/param-validation/param-validation.h"
#define DEFAULT_DEBUG_INFO_FIELD_NAME "debug_info"
#define LTTNG_UST_STATEDUMP_PREFIX "lttng_ust"
}
static inline
-int event_get_payload_build_id_length(const bt_event *event,
+void event_get_payload_build_id_length(const bt_event *event,
const char *field_name, uint64_t *build_id_len)
{
const bt_field *build_id_field;
build_id_field_class = bt_field_borrow_class_const(build_id_field);
BT_ASSERT(bt_field_class_get_type(build_id_field_class) ==
- BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY);
+ BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD ||
+ bt_field_class_get_type(build_id_field_class) ==
+ BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD);
BT_ASSERT(bt_field_class_get_type(
bt_field_class_array_borrow_element_field_class_const(
build_id_field_class)) ==
BT_FIELD_CLASS_TYPE_UNSIGNED_INTEGER);
*build_id_len = bt_field_array_get_length(build_id_field);
-
- return 0;
}
static inline
-int event_get_payload_build_id_value(const bt_event *event,
+void event_get_payload_build_id_value(const bt_event *event,
const char *field_name, uint8_t *build_id)
{
const bt_field *curr_field, *build_id_field;
const bt_field_class *build_id_field_class;
uint64_t i, build_id_len;
- int ret;
-
- ret = 0;
build_id_field = event_borrow_payload_field(event, field_name);
build_id_field_class = bt_field_borrow_class_const(build_id_field);
BT_ASSERT(bt_field_class_get_type(build_id_field_class) ==
- BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY);
+ BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITHOUT_LENGTH_FIELD ||
+ bt_field_class_get_type(build_id_field_class) ==
+ BT_FIELD_CLASS_TYPE_DYNAMIC_ARRAY_WITH_LENGTH_FIELD);
BT_ASSERT(bt_field_class_get_type(
bt_field_class_array_borrow_element_field_class_const(
build_id_field_class)) ==
for (i = 0; i < build_id_len; i++) {
curr_field = bt_field_array_borrow_element_field_by_index_const(
- build_id_field, i);
+ build_id_field, i);
build_id[i] = bt_field_integer_unsigned_get_value(curr_field);
}
-
- return ret;
}
static
*/
goto end;
}
- ret = event_get_payload_build_id_length(event, BUILD_ID_FIELD_NAME,
+
+ event_get_payload_build_id_length(event, BUILD_ID_FIELD_NAME,
&build_id_len);
build_id = g_new0(uint8_t, build_id_len);
goto end;
}
- ret = event_get_payload_build_id_value(event, BUILD_ID_FIELD_NAME,
- build_id);
- if (ret) {
- goto end;
- }
+ event_get_payload_build_id_value(event, BUILD_ID_FIELD_NAME, build_id);
ret = bin_info_set_build_id(bin, build_id, build_id_len);
if (ret) {
return out_message;
}
+struct bt_param_validation_map_value_entry_descr debug_info_params[] = {
+ { "debug-info-field-name", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_STRING } },
+ { "debug-info-dir", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_STRING } },
+ { "target-prefix", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_STRING } },
+ { "full-path", BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_OPTIONAL, { .type = BT_VALUE_TYPE_BOOL } },
+ BT_PARAM_VALIDATION_MAP_VALUE_ENTRY_END
+};
+
static
bt_component_class_initialize_method_status init_from_params(
struct debug_info_component *debug_info_component,
{
const bt_value *value;
bt_component_class_initialize_method_status status;
+ bt_logging_level log_level = debug_info_component->log_level;
+ enum bt_param_validation_status validation_status;
+ gchar *validate_error = NULL;
+
+ validation_status = bt_param_validation_validate(params,
+ debug_info_params, &validate_error);
+ if (validation_status == BT_PARAM_VALIDATION_STATUS_MEMORY_ERROR) {
+ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_MEMORY_ERROR;
+ goto end;
+ } else if (validation_status == BT_PARAM_VALIDATION_STATUS_VALIDATION_ERROR) {
+ status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_ERROR;
+ BT_COMP_LOGE_APPEND_CAUSE(debug_info_component->self_comp,
+ "%s", validate_error);
+ goto end;
+ }
BT_ASSERT(params);
status = BT_COMPONENT_CLASS_INITIALIZE_METHOD_STATUS_OK;
+end:
+ g_free(validate_error);
+
return status;
}