From: Jérémie Galarneau Date: Fri, 15 Apr 2016 19:39:33 +0000 (-0400) Subject: Show binary path as part of debug info X-Git-Tag: v2.0.0-pre1~1024 X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=a7a607cffff3dc6aa77d03e098decdc819f6e5a2;p=babeltrace.git Show binary path as part of debug info Signed-off-by: Jérémie Galarneau --- diff --git a/include/babeltrace/debuginfo.h b/include/babeltrace/debuginfo.h index 9849685a..5e9d79ca 100644 --- a/include/babeltrace/debuginfo.h +++ b/include/babeltrace/debuginfo.h @@ -42,9 +42,12 @@ struct debug_info_source { /* Strings are owned by debug_info_source. */ char *func; uint64_t line_no; - char *filename; - /* short_filename points inside filename, no need to free. */ - const char *short_filename; + char *src_path; + /* short_src_path points inside src_path, no need to free. */ + const char *short_src_path; + char *bin_path; + /* short_bin_path points inside bin_path, no need to free. */ + const char *short_bin_path; }; BT_HIDDEN diff --git a/include/babeltrace/trace-debuginfo.h b/include/babeltrace/trace-debuginfo.h index 963ec97f..cf4069a2 100644 --- a/include/babeltrace/trace-debuginfo.h +++ b/include/babeltrace/trace-debuginfo.h @@ -46,7 +46,8 @@ void ctf_text_integer_write_debug_info(struct bt_stream_pos *ppos, /* Print debug info if available */ if (debug_info_src) { - if (debug_info_src->func || debug_info_src->filename) { + if (debug_info_src->func || debug_info_src->src_path || + debug_info_src->bin_path) { bool add_comma = false; fprintf(pos->fp, ", debug_info = { "); @@ -57,7 +58,7 @@ void ctf_text_integer_write_debug_info(struct bt_stream_pos *ppos, add_comma = true; } - if (debug_info_src->filename) { + if (debug_info_src->src_path) { if (add_comma) { fprintf(pos->fp, ", "); } @@ -65,11 +66,22 @@ void ctf_text_integer_write_debug_info(struct bt_stream_pos *ppos, fprintf(pos->fp, "src = \"%s:%" PRIu64 "\"", opt_debug_info_full_path ? - debug_info_src->filename : - debug_info_src->short_filename, + debug_info_src->src_path : + debug_info_src->short_src_path, debug_info_src->line_no); } + if (debug_info_src->bin_path) { + if (add_comma) { + fprintf(pos->fp, ", "); + } + + fprintf(pos->fp, "bin = \"%s\"", + opt_debug_info_full_path ? + debug_info_src->bin_path : + debug_info_src->short_bin_path); + } + fprintf(pos->fp, " }"); } } diff --git a/lib/debuginfo.c b/lib/debuginfo.c index 7869cc29..415c0a28 100644 --- a/lib/debuginfo.c +++ b/lib/debuginfo.c @@ -84,7 +84,8 @@ void debug_info_source_destroy(struct debug_info_source *debug_info_src) } free(debug_info_src->func); - free(debug_info_src->filename); + free(debug_info_src->src_path); + free(debug_info_src->bin_path); g_free(debug_info_src); } @@ -154,17 +155,12 @@ struct debug_info_source *debug_info_source_create_from_so(struct so_info *so, debug_info_src->line_no = src_loc->line_no; if (src_loc->filename) { - debug_info_src->filename = strdup(src_loc->filename); - if (!debug_info_src->filename) { + debug_info_src->src_path = strdup(src_loc->filename); + if (!debug_info_src->src_path) { goto error; } - /* - * The short version of the filename does not include - * the full path, it will only point to the last element - * of the path (anything after the last '/'). - */ - debug_info_src->short_filename = get_filename_from_path( + debug_info_src->short_src_path = get_filename_from_path( src_loc->filename); } @@ -172,6 +168,16 @@ struct debug_info_source *debug_info_source_create_from_so(struct so_info *so, source_location_destroy(src_loc); } + if (so->elf_path) { + debug_info_src->bin_path = strdup(so->elf_path); + if (!debug_info_src->bin_path) { + goto error; + } + + debug_info_src->short_bin_path = get_filename_from_path( + debug_info_src->bin_path); + } + end: return debug_info_src;