From 8a59241b0cee642d16398d19adeab75f25768aca Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Mon, 20 Apr 2009 01:20:44 -0700 Subject: [PATCH] addr2line: Honor -s and -A for file names of inline call sites. --- src/ChangeLog | 3 +++ src/addr2line.c | 30 +++++++++++++++++++++++++----- 2 files changed, 28 insertions(+), 5 deletions(-) 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 "); -- 2.47.2