* 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"
-#include "logging.h"
+#include "plugins/comp-logging.h"
#include <glib.h>
#define PATH_FIELD_NAME "path"
struct debug_info_component {
+ bt_logging_level log_level;
+ bt_self_component *self_comp;
gchar *arg_debug_dir;
gchar *arg_debug_info_field_name;
gchar *arg_target_prefix;
};
struct debug_info_msg_iter {
+ bt_logging_level log_level;
struct debug_info_component *debug_info_component;
bt_self_message_iterator *input_iterator;
bt_self_component *self_comp;
};
struct debug_info {
+ bt_logging_level log_level;
+ bt_self_component *self_comp;
struct debug_info_component *comp;
const bt_trace *input_trace;
uint64_t destruction_listener_id;
info->q_lib_load = g_quark_from_string("lttng_ust_lib:load");
info->q_lib_unload = g_quark_from_string("lttng_ust_lib:unload");
- return bin_info_init();
+ return bin_info_init(info->log_level, info->self_comp);
}
static
static
struct debug_info_source *debug_info_source_create_from_bin(
- struct bin_info *bin, uint64_t ip)
+ struct bin_info *bin, uint64_t ip,
+ bt_self_component *self_comp)
{
int ret;
struct debug_info_source *debug_info_src = NULL;
struct source_location *src_loc = NULL;
+ bt_logging_level log_level = bin->log_level;
debug_info_src = g_new0(struct debug_info_source, 1);
/* Lookup source location */
ret = bin_info_lookup_source_location(bin, ip, &src_loc);
if (ret) {
- BT_LOGI("Failed to lookup source location: ret=%d", ret);
+ BT_COMP_LOGI("Failed to lookup source location: ret=%d", ret);
}
}
debug_info_src->line_no =
g_strdup_printf("%"PRId64, src_loc->line_no);
if (!debug_info_src->line_no) {
- BT_LOGE("Error occured when setting line_no field.");
+ BT_COMP_LOGE("Error occured when setting line_no field.");
goto error;
}
static
struct debug_info_source *proc_debug_info_sources_get_entry(
+ struct debug_info *debug_info,
struct proc_debug_info_sources *proc_dbg_info_src, uint64_t ip)
{
struct debug_info_source *debug_info_src = NULL;
* a caching policy), and entries should be prunned when
* libraries are unmapped.
*/
- debug_info_src = debug_info_source_create_from_bin(bin, ip);
+ debug_info_src = debug_info_source_create_from_bin(bin, ip,
+ debug_info->self_comp);
if (debug_info_src) {
g_hash_table_insert(
proc_dbg_info_src->ip_to_debug_info_src,
goto end;
}
- dbg_info_src = proc_debug_info_sources_get_entry(proc_dbg_info_src, ip);
+ dbg_info_src = proc_debug_info_sources_get_entry(debug_info,
+ proc_dbg_info_src, ip);
end:
return dbg_info_src;
goto end;
}
+ debug_info->log_level = comp->log_level;
+ debug_info->self_comp = comp->self_comp;
debug_info->vpid_to_proc_dbg_info_src = g_hash_table_new_full(
g_int64_hash, g_int64_equal, (GDestroyNotify) g_free,
(GDestroyNotify) proc_debug_info_sources_destroy);
static
void debug_info_destroy(struct debug_info *debug_info)
{
+ bt_logging_level log_level;
+ bt_self_component *self_comp;
bt_trace_status status;
if (!debug_info) {
goto end;
}
+ log_level = debug_info->log_level;
+ self_comp = debug_info->self_comp;
+
if (debug_info->vpid_to_proc_dbg_info_src) {
g_hash_table_destroy(debug_info->vpid_to_proc_dbg_info_src);
}
status = bt_trace_remove_destruction_listener(debug_info->input_trace,
debug_info->destruction_listener_id);
if (status != BT_TRACE_STATUS_OK) {
- BT_LOGE("Trace destruction listener removal failed.");
+ BT_COMP_LOGE("Trace destruction listener removal failed.");
}
g_free(debug_info);
bin = bin_info_create(debug_info->fd_cache, path, baddr, memsz, is_pic,
debug_info->comp->arg_debug_dir,
- debug_info->comp->arg_target_prefix);
+ debug_info->comp->arg_target_prefix,
+ debug_info->log_level, debug_info->self_comp);
if (!bin) {
goto end;
}
static
void fill_debug_info_bin_field(struct debug_info_source *dbg_info_src,
- bool full_path, bt_field *curr_field)
+ bool full_path, bt_field *curr_field,
+ bt_logging_level log_level, bt_self_component *self_comp)
{
bt_field_status status;
dbg_info_src->short_bin_path);
}
if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set path component of \"bin\" "
+ BT_COMP_LOGE("Cannot set path component of \"bin\" "
"curr_field field's value: str-fc-addr=%p",
curr_field);
}
status = bt_field_string_append(curr_field, dbg_info_src->bin_loc);
if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set bin location component of \"bin\" "
+ BT_COMP_LOGE("Cannot set bin location component of \"bin\" "
"curr_field field's value: str-fc-addr=%p",
curr_field);
}
} else {
status = bt_field_string_set_value(curr_field, "");
if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set \"bin\" curr_field field's value: "
+ BT_COMP_LOGE("Cannot set \"bin\" curr_field field's value: "
"str-fc-addr=%p", curr_field);
}
}
static
void fill_debug_info_func_field(struct debug_info_source *dbg_info_src,
- bt_field *curr_field)
+ bt_field *curr_field, bt_logging_level log_level,
+ bt_self_component *self_comp)
{
bt_field_status status;
status = bt_field_string_set_value(curr_field, "");
}
if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set \"func\" curr_field field's value: "
+ BT_COMP_LOGE("Cannot set \"func\" curr_field field's value: "
"str-fc-addr=%p", curr_field);
}
}
static
void fill_debug_info_src_field(struct debug_info_source *dbg_info_src,
- bool full_path, bt_field *curr_field)
+ bool full_path, bt_field *curr_field,
+ bt_logging_level log_level,
+ bt_self_component *self_comp)
{
bt_field_status status;
dbg_info_src->short_src_path);
}
if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set path component of \"src\" "
+ BT_COMP_LOGE("Cannot set path component of \"src\" "
"curr_field field's value: str-fc-addr=%p",
curr_field);
}
status = bt_field_string_append(curr_field, ":");
if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set colon component of \"src\" "
+ BT_COMP_LOGE("Cannot set colon component of \"src\" "
"curr_field field's value: str-fc-addr=%p",
curr_field);
}
status = bt_field_string_append(curr_field, dbg_info_src->line_no);
if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set line number component of \"src\" "
+ BT_COMP_LOGE("Cannot set line number component of \"src\" "
"curr_field field's value: str-fc-addr=%p",
curr_field);
}
} else {
status = bt_field_string_set_value(curr_field, "");
if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set \"src\" curr_field field's value: "
+ BT_COMP_LOGE("Cannot set \"src\" curr_field field's value: "
"str-fc-addr=%p", curr_field);
}
}
}
-void fill_debug_info_field_empty(bt_field *debug_info_field)
+static
+void fill_debug_info_field_empty(bt_field *debug_info_field,
+ bt_logging_level log_level, bt_self_component *self_comp)
{
bt_field_status status;
bt_field *bin_field, *func_field, *src_field;
status = bt_field_string_set_value(bin_field, "");
if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set \"bin\" bin_field field's value: "
+ BT_COMP_LOGE("Cannot set \"bin\" bin_field field's value: "
"str-fc-addr=%p", bin_field);
}
status = bt_field_string_set_value(func_field, "");
if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set \"func\" func_field field's value: "
+ BT_COMP_LOGE("Cannot set \"func\" func_field field's value: "
"str-fc-addr=%p", func_field);
}
status = bt_field_string_set_value(src_field, "");
if (status != BT_FIELD_STATUS_OK) {
- BT_LOGE("Cannot set \"src\" src_field field's value: "
+ BT_COMP_LOGE("Cannot set \"src\" src_field field's value: "
"str-fc-addr=%p", src_field);
}
}
dbg_info_src = debug_info_query(debug_info, vpid, ip);
- fill_debug_info_bin_field(dbg_info_src, debug_info->comp->arg_full_path,
- bt_field_structure_borrow_member_field_by_name(
- debug_info_field, "bin"));
+ fill_debug_info_bin_field(dbg_info_src,
+ debug_info->comp->arg_full_path,
+ bt_field_structure_borrow_member_field_by_name(
+ debug_info_field, "bin"),
+ debug_info->log_level, debug_info->self_comp);
fill_debug_info_func_field(dbg_info_src,
- bt_field_structure_borrow_member_field_by_name(
- debug_info_field, "func"));
- fill_debug_info_src_field(dbg_info_src, debug_info->comp->arg_full_path,
- bt_field_structure_borrow_member_field_by_name(
- debug_info_field, "src"));
+ bt_field_structure_borrow_member_field_by_name(
+ debug_info_field, "func"),
+ debug_info->log_level, debug_info->self_comp);
+ fill_debug_info_src_field(dbg_info_src,
+ debug_info->comp->arg_full_path,
+ bt_field_structure_borrow_member_field_by_name(
+ debug_info_field, "src"),
+ debug_info->log_level, debug_info->self_comp);
}
static
int64_t ip;
gchar *debug_info_field_name =
debug_it->debug_info_component->arg_debug_info_field_name;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
in_common_ctx_field = bt_event_borrow_common_context_field_const(
in_event);
*/
fill_debug_info_field(debug_info, vpid, ip, out_debug_info_field);
} else {
- BT_LOGD("No debug information for this trace. Setting debug "
+ BT_COMP_LOGD("No debug information for this trace. Setting debug "
"info fields to empty strings.");
- fill_debug_info_field_empty(out_debug_info_field);
+ fill_debug_info_field_empty(out_debug_info_field,
+ log_level, self_comp);
}
end:
return;
bt_event_class *out_event_class;
bt_packet *out_packet;
bt_event *out_event;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
bt_message *out_message = NULL;
}
if (!out_message) {
- BT_LOGE("Error creating output event message.");
+ BT_COMP_LOGE("Error creating output event message.");
goto error;
}
out_event = bt_message_event_borrow_event(out_message);
/* Copy the original fields to the output event. */
- copy_event_content(in_event, out_event);
+ copy_event_content(in_event, out_event, log_level, self_comp);
/*
* Try to set the debug-info fields based on debug information that is
const bt_stream *in_stream;
bt_message *out_message;
bt_stream *out_stream;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
in_stream = bt_message_stream_beginning_borrow_stream_const(in_message);
BT_ASSERT(in_stream);
out_message = bt_message_stream_beginning_create(
debug_it->input_iterator, out_stream);
if (!out_message) {
- BT_LOGE("Error creating output stream beginning message: "
+ BT_COMP_LOGE("Error creating output stream beginning message: "
"out-s-addr=%p", out_stream);
}
error:
const bt_stream *in_stream;
bt_message *out_message = NULL;
bt_stream *out_stream;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
in_stream = bt_message_stream_end_borrow_stream_const(in_message);
BT_ASSERT(in_stream);
out_message = bt_message_stream_end_create(debug_it->input_iterator,
out_stream);
if (!out_message) {
- BT_LOGE("Error creating output stream end message: out-s-addr=%p",
+ BT_COMP_LOGE("Error creating output stream end message: out-s-addr=%p",
out_stream);
}
const bt_clock_snapshot *cs;
bt_message *out_message = NULL;
bt_packet *out_packet;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
const bt_packet *in_packet =
bt_message_packet_beginning_borrow_packet_const(in_message);
debug_it->input_iterator, out_packet);
}
if (!out_message) {
- BT_LOGE("Error creating output packet beginning message: "
+ BT_COMP_LOGE("Error creating output packet beginning message: "
"out-p-addr=%p", out_packet);
}
const bt_packet *in_packet;
bt_message *out_message = NULL;
bt_packet *out_packet;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
in_packet = bt_message_packet_end_borrow_packet_const(in_message);
BT_ASSERT(in_packet);
}
if (!out_message) {
- BT_LOGE("Error creating output packet end message: "
+ BT_COMP_LOGE("Error creating output packet end message: "
"out-p-addr=%p", out_packet);
}
bt_stream *out_stream;
uint64_t cs_value;
bt_message_stream_activity_clock_snapshot_state cs_state;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
const bt_stream *in_stream =
bt_message_stream_activity_beginning_borrow_stream_const(
out_message = bt_message_stream_activity_beginning_create(
debug_it->input_iterator, out_stream);
if (!out_message) {
- BT_LOGE("Error creating output stream activity beginning "
+ BT_COMP_LOGE("Error creating output stream activity beginning "
"message: out-s-addr=%p", out_stream);
goto error;
}
bt_stream *out_stream;
uint64_t cs_value;
bt_message_stream_activity_clock_snapshot_state cs_state;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
in_stream = bt_message_stream_activity_end_borrow_stream_const(
in_message);
out_message = bt_message_stream_activity_end_create(
debug_it->input_iterator, out_stream);
if (!out_message) {
- BT_LOGE("Error creating output stream activity end message: "
+ BT_COMP_LOGE("Error creating output stream activity end message: "
"out-s-addr=%p", out_stream);
goto error;
}
bt_property_availability prop_avail;
bt_message *out_message = NULL;
bt_stream *out_stream;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
in_stream = bt_message_discarded_events_borrow_stream_const(
in_message);
debug_it->input_iterator, out_stream);
}
if (!out_message) {
- BT_LOGE("Error creating output discarded events message: "
+ BT_COMP_LOGE("Error creating output discarded events message: "
"out-s-addr=%p", out_stream);
goto error;
}
bt_property_availability prop_avail;
bt_message *out_message = NULL;
bt_stream *out_stream;
+ bt_logging_level log_level = debug_it->log_level;
+ bt_self_component *self_comp = debug_it->self_comp;
in_stream = bt_message_discarded_packets_borrow_stream_const(
in_message);
debug_it->input_iterator, out_stream);
}
if (!out_message) {
- BT_LOGE("Error creating output discarded packet message: "
+ BT_COMP_LOGE("Error creating output discarded packet message: "
"out-s-addr=%p", out_stream);
goto error;
}
BT_HIDDEN
bt_self_component_status debug_info_comp_init(
- bt_self_component_filter *self_comp,
+ bt_self_component_filter *self_comp_flt,
const bt_value *params, __attribute__((unused)) void *init_method_data)
{
int ret;
struct debug_info_component *debug_info_comp;
bt_self_component_status status = BT_SELF_COMPONENT_STATUS_OK;
+ bt_self_component *self_comp =
+ bt_self_component_filter_as_self_component(self_comp_flt);
+ bt_logging_level log_level = bt_component_get_logging_level(
+ bt_self_component_as_component(self_comp));
- BT_LOGI("Initializing debug_info component: "
+
+ BT_COMP_LOGI("Initializing debug_info component: "
"comp-addr=%p, params-addr=%p", self_comp, params);
debug_info_comp = g_new0(struct debug_info_component, 1);
if (!debug_info_comp) {
- BT_LOGE_STR("Failed to allocate one debug_info component.");
+ BT_COMP_LOGE_STR("Failed to allocate one debug_info component.");
goto error;
}
- bt_self_component_set_data(
- bt_self_component_filter_as_self_component(self_comp),
- debug_info_comp);
+ debug_info_comp->log_level = log_level;
+ debug_info_comp->self_comp = self_comp;
+ bt_self_component_set_data(self_comp, debug_info_comp);
- status = bt_self_component_filter_add_input_port(self_comp, "in",
+ status = bt_self_component_filter_add_input_port(self_comp_flt, "in",
NULL, NULL);
if (status != BT_SELF_COMPONENT_STATUS_OK) {
goto error;
}
- status = bt_self_component_filter_add_output_port(self_comp, "out",
+ status = bt_self_component_filter_add_output_port(self_comp_flt, "out",
NULL, NULL);
if (status != BT_SELF_COMPONENT_STATUS_OK) {
goto error;
ret = init_from_params(debug_info_comp, params);
if (ret) {
- BT_LOGE("Cannot configure debug_info component: "
+ BT_COMP_LOGE("Cannot configure debug_info component: "
"debug_info-comp-addr=%p, params-addr=%p",
debug_info_comp, params);
goto error;
error:
destroy_debug_info_comp(debug_info_comp);
- bt_self_component_set_data(
- bt_self_component_filter_as_self_component(self_comp),
- NULL);
+ bt_self_component_set_data(self_comp, NULL);
if (status == BT_SELF_COMPONENT_STATUS_OK) {
status = BT_SELF_COMPONENT_STATUS_ERROR;
}
BT_HIDDEN
-void debug_info_comp_finalize(bt_self_component_filter *self_comp)
+void debug_info_comp_finalize(bt_self_component_filter *self_comp_flt)
{
struct debug_info_component *debug_info =
bt_self_component_get_data(
bt_self_component_filter_as_self_component(
- self_comp));
- BT_LOGI("Finalizing debug_info self_component: comp-addr=%p",
+ self_comp_flt));
+ bt_logging_level log_level = debug_info->log_level;
+ bt_self_component *self_comp = debug_info->self_comp;
+
+ BT_COMP_LOGI("Finalizing debug_info self_component: comp-addr=%p",
self_comp);
destroy_debug_info_comp(debug_info);
BT_HIDDEN
bt_self_message_iterator_status debug_info_msg_iter_init(
bt_self_message_iterator *self_msg_iter,
- bt_self_component_filter *self_comp,
+ bt_self_component_filter *self_comp_flt,
bt_self_component_port_output *self_port)
{
bt_self_message_iterator_status status = BT_SELF_MESSAGE_ITERATOR_STATUS_OK;
struct debug_info_msg_iter *debug_info_msg_iter = NULL;
gchar *debug_info_field_name;
int ret;
+ bt_self_component *self_comp =
+ bt_self_component_filter_as_self_component(self_comp_flt);
+ bt_logging_level log_level = bt_component_get_logging_level(
+ bt_self_component_as_component(self_comp));
/* Borrow the upstream input port. */
input_port = bt_self_component_filter_borrow_input_port_by_name(
- self_comp, "in");
+ self_comp_flt, "in");
if (!input_port) {
status = BT_SELF_MESSAGE_ITERATOR_STATUS_ERROR;
goto error;
goto error;
}
+ debug_info_msg_iter->log_level = log_level;
+ debug_info_msg_iter->self_comp = self_comp;
+
/* Create an iterator on the upstream component. */
upstream_iterator = bt_self_component_port_input_message_iterator_create(
input_port);
goto error;
}
- debug_info_msg_iter->self_comp =
- bt_self_component_filter_as_self_component(self_comp);
-
- debug_info_msg_iter->debug_info_component = bt_self_component_get_data(
- bt_self_component_filter_as_self_component(
- self_comp));
+ debug_info_msg_iter->debug_info_component =
+ bt_self_component_get_data(self_comp);
debug_info_field_name =
debug_info_msg_iter->debug_info_component->arg_debug_info_field_name;
- debug_info_msg_iter->ir_maps = trace_ir_maps_create(
- bt_self_component_filter_as_self_component(self_comp),
- debug_info_field_name);
+ debug_info_msg_iter->ir_maps = trace_ir_maps_create(self_comp,
+ debug_info_field_name, log_level);
if (!debug_info_msg_iter->ir_maps) {
status = BT_SELF_MESSAGE_ITERATOR_STATUS_NOMEM;
goto error;
}
- ret = bt_fd_cache_init(&debug_info_msg_iter->fd_cache);
+ ret = bt_fd_cache_init(&debug_info_msg_iter->fd_cache, log_level);
if (ret) {
status = BT_SELF_MESSAGE_ITERATOR_STATUS_NOMEM;
goto error;