summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoland McGrath <roland@redhat.com>2009-04-20 01:20:44 -0700
committerRoland McGrath <roland@redhat.com>2009-04-20 01:20:44 -0700
commit8a59241b0cee642d16398d19adeab75f25768aca (patch)
tree8c2ec2f61ee13e473e6c5ed5e817cb9187354513
parentd86e183403704a287d33c99badcf8bea303c0fd7 (diff)
downloadelfutils-8a59241b0cee642d16398d19adeab75f25768aca.tar.gz
addr2line: Honor -s and -A for file names of inline call sites.
-rw-r--r--src/ChangeLog3
-rw-r--r--src/addr2line.c30
2 files changed, 28 insertions, 5 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 20f5d987..a2e209a1 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,8 @@
2009-04-20 Roland McGrath <roland@redhat.com>
+ * 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 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 ");