/* 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
/* 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 = { ");
add_comma = true;
}
- if (debug_info_src->filename) {
+ if (debug_info_src->src_path) {
if (add_comma) {
fprintf(pos->fp, ", ");
}
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, " }");
}
}
}
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);
}
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);
}
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;