diff options
| author | Roland McGrath <[email protected]> | 2009-04-20 01:20:44 -0700 |
|---|---|---|
| committer | Roland McGrath <[email protected]> | 2009-04-20 01:20:44 -0700 |
| commit | 8a59241b0cee642d16398d19adeab75f25768aca (patch) | |
| tree | 8c2ec2f61ee13e473e6c5ed5e817cb9187354513 /src/addr2line.c | |
| parent | d86e183403704a287d33c99badcf8bea303c0fd7 (diff) | |
addr2line: Honor -s and -A for file names of inline call sites.
Diffstat (limited to 'src/addr2line.c')
| -rw-r--r-- | src/addr2line.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/addr2line.c b/src/addr2line.c index ccc10e8f..99264b01 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 "); |
