Show binary path as part of debug info
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 15 Apr 2016 19:39:33 +0000 (15:39 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Tue, 3 May 2016 19:42:41 +0000 (15:42 -0400)
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
include/babeltrace/debuginfo.h
include/babeltrace/trace-debuginfo.h
lib/debuginfo.c

index 9849685a04500a77a71704428f08b8839f05b7b1..5e9d79cacc8e744d10659301750ca069f4d72a09 100644 (file)
@@ -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
index 963ec97fb45ff6789199422746fc283e60742fba..cf4069a228496245575bbabb6936d0ffdac5c41e 100644 (file)
@@ -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, " }");
                }
        }
index 517e1bcac8dc25d55b8d31d9661e16c1cf11cfac..d5832173de356ab2ffb8653125ebdbd3980cd99b 100644 (file)
@@ -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;
 
This page took 0.036143 seconds and 4 git commands to generate.