From: Roland McGrath Date: Mon, 20 Apr 2009 08:20:44 +0000 (-0700) Subject: addr2line: Honor -s and -A for file names of inline call sites. X-Git-Tag: elfutils-0.141~10 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=8a59241b0cee642d16398d19adeab75f25768aca;p=thirdparty%2Felfutils.git addr2line: Honor -s and -A for file names of inline call sites. --- diff --git a/src/ChangeLog b/src/ChangeLog index 20f5d9872..a2e209a19 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,8 @@ 2009-04-20 Roland McGrath + * addr2line.c (print_dwarf_function): Honor -s and -A for file names + of inline call sites. + * addr2line.c (just_section): New variable. (adjust_to_section): New function, broken out of ... (handle_address): ... here. diff --git a/src/addr2line.c b/src/addr2line.c index ccc10e8f4..99264b01d 100644 --- a/src/addr2line.c +++ b/src/addr2line.c @@ -284,15 +284,35 @@ print_dwarf_function (Dwfl_Module *mod, Dwarf_Addr addr) DW_AT_call_column, &attr_mem), &val) == 0) colno = val; - if (lineno == 0) + + const char *comp_dir = ""; + const char *comp_dir_sep = ""; + + if (file == NULL) + file = "???"; + else if (only_basenames) + file = basename (file); + else if (use_comp_dir && file[0] != '/') { - if (file != NULL) - printf (" from %s", file); + const char *const *dirs; + size_t ndirs; + if (dwarf_getsrcdirs (files, &dirs, &ndirs) == 0 + && dirs[0] != NULL) + { + comp_dir = dirs[0]; + comp_dir_sep = "/"; + } } + + if (lineno == 0) + printf (" from %s%s%s", + comp_dir, comp_dir_sep, file); else if (colno == 0) - printf (" at %s:%u", file, lineno); + printf (" at %s%s%s:%u", + comp_dir, comp_dir_sep, file, lineno); else - printf (" at %s:%u:%u", file, lineno, colno); + printf (" at %s%s%s:%u:%u", + comp_dir, comp_dir_sep, file, lineno, colno); } } printf (" in ");