X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=src%2Fplugins%2Flttng-utils%2Fdebug-info%2Ftrace-ir-metadata-copy.c;h=e0d73d87853d778123da6c5275bf1f8b360ff0de;hb=98f26e22c1ccebc5baa4d7edc6ef40246cc5de18;hp=924c4e66cd528ff4b7ebae2a9d3b3e608c32bb5d;hpb=a07aba4fb4f6bed63949177fc6070634b300729d;p=babeltrace.git diff --git a/src/plugins/lttng-utils/debug-info/trace-ir-metadata-copy.c b/src/plugins/lttng-utils/debug-info/trace-ir-metadata-copy.c index 924c4e66..e0d73d87 100644 --- a/src/plugins/lttng-utils/debug-info/trace-ir-metadata-copy.c +++ b/src/plugins/lttng-utils/debug-info/trace-ir-metadata-copy.c @@ -24,9 +24,10 @@ * SOFTWARE. */ +#define BT_COMP_LOG_SELF_COMP self_comp #define BT_LOG_OUTPUT_LEVEL log_level #define BT_LOG_TAG "PLUGIN/FLT.LTTNG-UTILS.DEBUG-INFO/TRACE-IR-META-COPY" -#include "logging/log.h" +#include "logging/comp-logging.h" #include #include @@ -39,96 +40,47 @@ BT_HIDDEN int copy_trace_class_content(const bt_trace_class *in_trace_class, - bt_trace_class *out_trace_class, bt_logging_level log_level) + bt_trace_class *out_trace_class, bt_logging_level log_level, + bt_self_component *self_comp) { - int ret = 0; - uint64_t i, env_field_count; - const char *in_trace_class_name; - - BT_LOGD("Copying content of trace class: in-tc-addr=%p, out-tc-addr=%p", + BT_COMP_LOGD("Copying content of trace class: in-tc-addr=%p, out-tc-addr=%p", in_trace_class, out_trace_class); - /* Use the same stream class ids as in the origin trace class. */ - bt_trace_class_set_assigns_automatic_stream_class_id(out_trace_class, - BT_FALSE); - - in_trace_class_name = bt_trace_class_get_name(in_trace_class); - if (in_trace_class_name) { - bt_trace_class_set_name(out_trace_class, in_trace_class_name); - } - /* - * Do not copy the trace class UUID as it may be modified and should no - * longer have the same UUID. + * Safe to use the same value object because it's frozen at this + * point. */ + bt_trace_class_set_user_attributes(out_trace_class, + bt_trace_class_borrow_user_attributes_const(in_trace_class)); - /* - * Go over all the entries in the environment section of the trace class - * and copy the content to the new trace class. - */ - env_field_count = bt_trace_class_get_environment_entry_count(in_trace_class); - for (i = 0; i < env_field_count; i++) { - const char *value_name; - const bt_value *value = NULL; - bt_trace_class_status trace_class_status; - - bt_trace_class_borrow_environment_entry_by_index_const( - in_trace_class, i, &value_name, &value); - - BT_LOGD("Copying trace class environnement entry: " - "index=%" PRId64 ", value-addr=%p, value-name=%s", - i, value, value_name); - - BT_ASSERT(value_name); - BT_ASSERT(value); - - if (bt_value_is_signed_integer(value)) { - trace_class_status = - bt_trace_class_set_environment_entry_integer( - out_trace_class, value_name, - bt_value_signed_integer_get( - value)); - } else if (bt_value_is_string(value)) { - trace_class_status = - bt_trace_class_set_environment_entry_string( - out_trace_class, value_name, - bt_value_string_get(value)); - } else { - abort(); - } - - if (trace_class_status != BT_TRACE_CLASS_STATUS_OK) { - ret = -1; - goto error; - } - } - - BT_LOGD("Copied content of trace class: in-tc-addr=%p, out-tc-addr=%p", + /* Use the same stream class ids as in the origin trace class. */ + bt_trace_class_set_assigns_automatic_stream_class_id(out_trace_class, + BT_FALSE); + BT_COMP_LOGD("Copied content of trace class: in-tc-addr=%p, out-tc-addr=%p", in_trace_class, out_trace_class); -error: - return ret; + return 0; } static int copy_clock_class_content(const bt_clock_class *in_clock_class, - bt_clock_class *out_clock_class, bt_logging_level log_level) + bt_clock_class *out_clock_class, bt_logging_level log_level, + bt_self_component *self_comp) { - bt_clock_class_status status; const char *clock_class_name, *clock_class_description; int64_t seconds; uint64_t cycles; bt_uuid in_uuid; int ret = 0; - BT_LOGD("Copying content of clock class: in-cc-addr=%p, out-cc-addr=%p", + BT_COMP_LOGD("Copying content of clock class: in-cc-addr=%p, out-cc-addr=%p", in_clock_class, out_clock_class); clock_class_name = bt_clock_class_get_name(in_clock_class); if (clock_class_name) { - status = bt_clock_class_set_name(out_clock_class, clock_class_name); - if (status != BT_CLOCK_CLASS_STATUS_OK) { - BT_LOGE("Error setting clock class' name cc-addr=%p, name=%p", + if (bt_clock_class_set_name(out_clock_class, clock_class_name) + != BT_CLOCK_CLASS_SET_NAME_STATUS_OK) { + BT_COMP_LOGE("Error setting clock class' name cc-addr=%p, name=%p", out_clock_class, clock_class_name); out_clock_class = NULL; ret = -1; @@ -136,13 +88,20 @@ int copy_clock_class_content(const bt_clock_class *in_clock_class, } } + /* + * Safe to use the same value object because it's frozen at this + * point. + */ + bt_clock_class_set_user_attributes(out_clock_class, + bt_clock_class_borrow_user_attributes_const(in_clock_class)); + clock_class_description = bt_clock_class_get_description(in_clock_class); if (clock_class_description) { - status = bt_clock_class_set_description(out_clock_class, - clock_class_description); - if (status != BT_CLOCK_CLASS_STATUS_OK) { - BT_LOGE("Error setting clock class' description cc-addr=%p, " + if (bt_clock_class_set_description(out_clock_class, + clock_class_description) != + BT_CLOCK_CLASS_SET_DESCRIPTION_STATUS_OK) { + BT_COMP_LOGE("Error setting clock class' description cc-addr=%p, " "name=%p", out_clock_class, clock_class_description); out_clock_class = NULL; ret = -1; @@ -164,7 +123,7 @@ int copy_clock_class_content(const bt_clock_class *in_clock_class, bt_clock_class_set_origin_is_unix_epoch(out_clock_class, bt_clock_class_origin_is_unix_epoch(in_clock_class)); - BT_LOGD("Copied content of clock class: in-cc-addr=%p, out-cc-addr=%p", + BT_COMP_LOGD("Copied content of clock class: in-cc-addr=%p, out-cc-addr=%p", in_clock_class, out_clock_class); error: @@ -193,7 +152,7 @@ bt_clock_class *create_new_mapped_clock_class( int ret; bt_logging_level log_level = md_maps->log_level; - BT_LOGD("Creating new mapped clock class: in-cc-addr=%p", + BT_COMP_LOGD("Creating new mapped clock class: in-cc-addr=%p", in_clock_class); BT_ASSERT(md_maps); @@ -203,21 +162,21 @@ bt_clock_class *create_new_mapped_clock_class( out_clock_class = bt_clock_class_create(self_comp); if (!out_clock_class) { - BT_LOGE_STR("Cannot create clock class"); + BT_COMP_LOGE_STR("Cannot create clock class"); goto end; } /* If not, create a new one and add it to the mapping. */ ret = copy_clock_class_content(in_clock_class, out_clock_class, - log_level); + log_level, self_comp); if (ret) { - BT_LOGE_STR("Cannot copy clock class"); + BT_COMP_LOGE_STR("Cannot copy clock class"); goto end; } g_hash_table_insert(md_maps->clock_class_map, (gpointer) in_clock_class, out_clock_class); - BT_LOGD("Created new mapped clock class: in-cc-addr=%p, out-cc-addr=%p", + BT_COMP_LOGD("Created new mapped clock class: in-cc-addr=%p, out-cc-addr=%p", in_clock_class, out_clock_class); end: return out_clock_class; @@ -233,12 +192,12 @@ int copy_stream_class_content(struct trace_ir_maps *ir_maps, bt_clock_class *out_clock_class; const bt_field_class *in_packet_context_fc, *in_common_context_fc; bt_field_class *out_packet_context_fc, *out_common_context_fc; - bt_stream_class_status status; const char *in_name; int ret = 0; bt_logging_level log_level = ir_maps->log_level; + bt_self_component *self_comp = ir_maps->self_comp; - BT_LOGD("Copying content of stream class: in-sc-addr=%p, out-sc-addr=%p", + BT_COMP_LOGD("Copying content of stream class: in-sc-addr=%p, out-sc-addr=%p", in_stream_class, out_stream_class); md_maps = borrow_metadata_maps_from_input_stream_class(ir_maps, in_stream_class); @@ -259,12 +218,18 @@ int copy_stream_class_content(struct trace_ir_maps *ir_maps, } - bt_stream_class_set_packets_have_beginning_default_clock_snapshot( + /* + * Safe to use the same value object because it's frozen at this + * point. + */ + bt_stream_class_set_user_attributes(out_stream_class, + bt_stream_class_borrow_user_attributes_const(in_stream_class)); + + bt_stream_class_set_supports_packets( out_stream_class, + bt_stream_class_supports_packets(in_stream_class), bt_stream_class_packets_have_beginning_default_clock_snapshot( - in_stream_class)); - bt_stream_class_set_packets_have_end_default_clock_snapshot( - out_stream_class, + in_stream_class), bt_stream_class_packets_have_end_default_clock_snapshot( in_stream_class)); bt_stream_class_set_supports_discarded_events( @@ -280,9 +245,9 @@ int copy_stream_class_content(struct trace_ir_maps *ir_maps, in_name = bt_stream_class_get_name(in_stream_class); if (in_name) { - status = bt_stream_class_set_name(out_stream_class, in_name); - if (status != BT_STREAM_CLASS_STATUS_OK) { - BT_LOGE("Error set stream class name: out-sc-addr=%p, " + if (bt_stream_class_set_name(out_stream_class, in_name) != + BT_STREAM_CLASS_SET_NAME_STATUS_OK) { + BT_COMP_LOGE("Error set stream class name: out-sc-addr=%p, " "name=%s", out_stream_class, in_name); ret = -1; goto error; @@ -316,10 +281,10 @@ int copy_stream_class_content(struct trace_ir_maps *ir_maps, goto error; } - status = bt_stream_class_set_packet_context_field_class( - out_stream_class, out_packet_context_fc); - if (status != BT_STREAM_CLASS_STATUS_OK) { - BT_LOGE("Error setting stream class' packet context " + if (bt_stream_class_set_packet_context_field_class( + out_stream_class, out_packet_context_fc) != + BT_STREAM_CLASS_SET_FIELD_CLASS_STATUS_OK) { + BT_COMP_LOGE("Error setting stream class' packet context " "field class: sc-addr=%p, packet-fc-addr=%p", out_stream_class, out_packet_context_fc); ret = -1; @@ -352,10 +317,10 @@ int copy_stream_class_content(struct trace_ir_maps *ir_maps, goto error; } - status = bt_stream_class_set_event_common_context_field_class( - out_stream_class, out_common_context_fc); - if (status != BT_STREAM_CLASS_STATUS_OK) { - BT_LOGE("Error setting stream class' packet context " + if (bt_stream_class_set_event_common_context_field_class( + out_stream_class, out_common_context_fc) != + BT_STREAM_CLASS_SET_FIELD_CLASS_STATUS_OK) { + BT_COMP_LOGE("Error setting stream class' packet context " "field class: sc-addr=%p, packet-fc-addr=%p", out_stream_class, out_common_context_fc); ret = -1; @@ -363,8 +328,7 @@ int copy_stream_class_content(struct trace_ir_maps *ir_maps, } } - /* Set packet snapshot boolean fields. */ - BT_LOGD("Copied content of stream class: in-sc-addr=%p, out-sc-addr=%p", + BT_COMP_LOGD("Copied content of stream class: in-sc-addr=%p, out-sc-addr=%p", in_stream_class, out_stream_class); error: return ret; @@ -379,27 +343,35 @@ int copy_event_class_content(struct trace_ir_maps *ir_maps, const char *in_event_class_name, *in_emf_uri; bt_property_availability prop_avail; bt_event_class_log_level ec_log_level; - bt_event_class_status status; bt_field_class *out_specific_context_fc, *out_payload_fc; const bt_field_class *in_event_specific_context, *in_event_payload; int ret = 0; bt_logging_level log_level = ir_maps->log_level; + bt_self_component *self_comp = ir_maps->self_comp; - BT_LOGD("Copying content of event class: in-ec-addr=%p, out-ec-addr=%p", + BT_COMP_LOGD("Copying content of event class: in-ec-addr=%p, out-ec-addr=%p", in_event_class, out_event_class); /* Copy event class name. */ in_event_class_name = bt_event_class_get_name(in_event_class); if (in_event_class_name) { - status = bt_event_class_set_name(out_event_class, in_event_class_name); - if (status != BT_EVENT_CLASS_STATUS_OK) { - BT_LOGE("Error setting event class' name: ec-addr=%p, " + if (bt_event_class_set_name(out_event_class, + in_event_class_name) != + BT_EVENT_CLASS_SET_NAME_STATUS_OK) { + BT_COMP_LOGE("Error setting event class' name: ec-addr=%p, " "name=%s", out_event_class, in_event_class_name); ret = -1; goto error; } } + /* + * Safe to use the same value object because it's frozen at this + * point. + */ + bt_event_class_set_user_attributes(out_event_class, + bt_event_class_borrow_user_attributes_const(in_event_class)); + /* Copy event class loglevel. */ prop_avail = bt_event_class_get_log_level(in_event_class, &ec_log_level); @@ -411,9 +383,9 @@ int copy_event_class_content(struct trace_ir_maps *ir_maps, /* Copy event class emf uri. */ in_emf_uri = bt_event_class_get_emf_uri(in_event_class); if (in_emf_uri) { - status = bt_event_class_set_emf_uri(out_event_class, in_emf_uri); - if (status != BT_EVENT_CLASS_STATUS_OK) { - BT_LOGE("Error setting event class' emf uri: ec-addr=%p, " + if (bt_event_class_set_emf_uri(out_event_class, in_emf_uri) != + BT_EVENT_CLASS_SET_EMF_URI_STATUS_OK) { + BT_COMP_LOGE("Error setting event class' emf uri: ec-addr=%p, " "emf uri=%s", out_event_class, in_emf_uri); ret = -1; goto error; @@ -446,10 +418,10 @@ int copy_event_class_content(struct trace_ir_maps *ir_maps, * Add the output specific context to the output event * class. */ - status = bt_event_class_set_specific_context_field_class( - out_event_class, out_specific_context_fc); - if (status != BT_EVENT_CLASS_STATUS_OK) { - BT_LOGE("Error setting event class' specific context " + if (bt_event_class_set_specific_context_field_class( + out_event_class, out_specific_context_fc) != + BT_EVENT_CLASS_SET_FIELD_CLASS_STATUS_OK) { + BT_COMP_LOGE("Error setting event class' specific context " "field class: ec-addr=%p, ctx-fc-addr=%p", out_event_class, out_specific_context_fc); ret = -1; @@ -477,10 +449,10 @@ int copy_event_class_content(struct trace_ir_maps *ir_maps, } /* Add the output payload to the output event class. */ - status = bt_event_class_set_payload_field_class( - out_event_class, out_payload_fc); - if (status != BT_EVENT_CLASS_STATUS_OK) { - BT_LOGE("Error setting event class' payload " + if (bt_event_class_set_payload_field_class( + out_event_class, out_payload_fc) != + BT_EVENT_CLASS_SET_FIELD_CLASS_STATUS_OK) { + BT_COMP_LOGE("Error setting event class' payload " "field class: ec-addr=%p, payload-fc-addr=%p", out_event_class, out_payload_fc); ret = -1; @@ -488,7 +460,7 @@ int copy_event_class_content(struct trace_ir_maps *ir_maps, } } - BT_LOGD("Copied content of event class: in-ec-addr=%p, out-ec-addr=%p", + BT_COMP_LOGD("Copied content of event class: in-ec-addr=%p, out-ec-addr=%p", in_event_class, out_event_class); error: return ret; @@ -501,13 +473,13 @@ int copy_event_common_context_field_class_content( const bt_field_class *in_field_class, bt_field_class *out_field_class) { - bt_field_class_status status; bt_field_class *debug_field_class = NULL, *bin_field_class = NULL, *func_field_class = NULL, *src_field_class = NULL; int ret = 0; bt_logging_level log_level = md_maps->log_level; + bt_self_component *self_comp = md_maps->self_comp; - BT_LOGD("Copying content of event common context field class: " + BT_COMP_LOGD("Copying content of event common context field class: " "in-fc-addr=%p, out-fc-addr=%p", in_field_class, out_field_class); /* Copy the content of the input common context. */ @@ -532,7 +504,7 @@ int copy_event_common_context_field_class_content( debug_field_class = bt_field_class_structure_create( md_maps->output_trace_class); if (!debug_field_class) { - BT_LOGE_STR("Failed to create debug_info structure."); + BT_COMP_LOGE_STR("Failed to create debug_info structure."); ret = -1; goto error; } @@ -540,7 +512,7 @@ int copy_event_common_context_field_class_content( bin_field_class = bt_field_class_string_create( md_maps->output_trace_class); if (!bin_field_class) { - BT_LOGE_STR("Failed to create string for field=bin."); + BT_COMP_LOGE_STR("Failed to create string for field=bin."); ret = -1; goto error; } @@ -548,7 +520,7 @@ int copy_event_common_context_field_class_content( func_field_class = bt_field_class_string_create( md_maps->output_trace_class); if (!func_field_class) { - BT_LOGE_STR("Failed to create string for field=func."); + BT_COMP_LOGE_STR("Failed to create string for field=func."); ret = -1; goto error; } @@ -556,35 +528,35 @@ int copy_event_common_context_field_class_content( src_field_class = bt_field_class_string_create( md_maps->output_trace_class); if (!src_field_class) { - BT_LOGE_STR("Failed to create string for field=src."); + BT_COMP_LOGE_STR("Failed to create string for field=src."); ret = -1; goto error; } - status = bt_field_class_structure_append_member( - debug_field_class, "bin", bin_field_class); - if (status != BT_FIELD_CLASS_STATUS_OK) { - BT_LOGE_STR("Failed to add a field to debug_info " + if (bt_field_class_structure_append_member( + debug_field_class, "bin", bin_field_class) != + BT_FIELD_CLASS_STRUCTURE_APPEND_MEMBER_STATUS_OK) { + BT_COMP_LOGE_STR("Failed to add a field to debug_info " "struct: field=bin."); ret = -1; goto error; } BT_FIELD_CLASS_PUT_REF_AND_RESET(bin_field_class); - status = bt_field_class_structure_append_member( - debug_field_class, "func", func_field_class); - if (status != BT_FIELD_CLASS_STATUS_OK) { - BT_LOGE_STR("Failed to add a field to debug_info " + if (bt_field_class_structure_append_member( + debug_field_class, "func", func_field_class) != + BT_FIELD_CLASS_STRUCTURE_APPEND_MEMBER_STATUS_OK) { + BT_COMP_LOGE_STR("Failed to add a field to debug_info " "struct: field=func."); ret = -1; goto error; } BT_FIELD_CLASS_PUT_REF_AND_RESET(func_field_class); - status = bt_field_class_structure_append_member( - debug_field_class, "src", src_field_class); - if (status != BT_FIELD_CLASS_STATUS_OK) { - BT_LOGE_STR("Failed to add a field to debug_info " + if (bt_field_class_structure_append_member( + debug_field_class, "src", src_field_class) != + BT_FIELD_CLASS_STRUCTURE_APPEND_MEMBER_STATUS_OK) { + BT_COMP_LOGE_STR("Failed to add a field to debug_info " "struct: field=src."); ret = -1; goto error; @@ -592,18 +564,17 @@ int copy_event_common_context_field_class_content( BT_FIELD_CLASS_PUT_REF_AND_RESET(src_field_class); /*Add the filled debug-info field class to the common context. */ - status = bt_field_class_structure_append_member(out_field_class, - debug_info_fc_name, - debug_field_class); - if (status != BT_FIELD_CLASS_STATUS_OK) { - BT_LOGE_STR("Failed to add debug_info field to " + if (bt_field_class_structure_append_member(out_field_class, + debug_info_fc_name, debug_field_class) != + BT_FIELD_CLASS_STRUCTURE_APPEND_MEMBER_STATUS_OK) { + BT_COMP_LOGE_STR("Failed to add debug_info field to " "event common context."); ret = -1; goto error; } BT_FIELD_CLASS_PUT_REF_AND_RESET(debug_field_class); } - BT_LOGD("Copied content of event common context field class: " + BT_COMP_LOGD("Copied content of event common context field class: " "in-fc-addr=%p, out-fc-addr=%p", in_field_class, out_field_class); goto end;