X-Git-Url: http://git.efficios.com/?p=babeltrace.git;a=blobdiff_plain;f=lib%2Fdebuginfo.c;h=21afcb5247d907a2e4373b8c4423782d78ff6b4c;hp=9366819e350113e0a8246ecc14f7e9c153794266;hb=51a9f65dcf8b3e55791131ec530331a10439026a;hpb=47857613b2dcb56c016d9013c28fd51e19188fa5 diff --git a/lib/debuginfo.c b/lib/debuginfo.c index 9366819e..21afcb52 100644 --- a/lib/debuginfo.c +++ b/lib/debuginfo.c @@ -4,6 +4,7 @@ * Copyright (c) 2015 EfficiOS Inc. and Linux Foundation * Copyright (c) 2015 Philippe Proulx * Copyright (c) 2015 Antoine Busque + * Copyright (c) 2016 Jérémie Galarneau * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -30,6 +31,8 @@ #include #include #include +#include +#include struct proc_debug_info_sources { /* @@ -82,7 +85,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); } @@ -107,30 +111,40 @@ struct debug_info_source *debug_info_source_create_from_so(struct so_info *so, } /* Can't retrieve src_loc from ELF only, skip it */ - if (so->is_elf_only) { - goto end; - } - - /* Lookup source location */ - ret = so_info_lookup_source_location(so, ip, &src_loc); - if (ret) { - goto error; + if (!so->is_elf_only) { + /* Lookup source location */ + ret = so_info_lookup_source_location(so, ip, &src_loc); + if (ret) { + goto error; + } } if (src_loc) { 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; } + + debug_info_src->short_src_path = get_filename_from_path( + debug_info_src->src_path); } 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;