summaryrefslogtreecommitdiff
path: root/addr2line.c
diff options
context:
space:
mode:
Diffstat (limited to 'addr2line.c')
-rw-r--r--addr2line.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/addr2line.c b/addr2line.c
index 92ff6b152b..9493cf1a8a 100644
--- a/addr2line.c
+++ b/addr2line.c
@@ -514,6 +514,14 @@ fill_lines(int num_traces, void **traces, char **syms, int check_debuglink,
size_t len;
if (get_path_from_symbol(syms[i], &path, &len) &&
!strncmp(path, binary_filename, len)) {
+#if defined(HAVE_DLADDR) && defined(__pie__) && defined(__linux__)
+ if (ehdr->e_type == ET_DYN && lines[i].base_addr == 0) {
+ Dl_info info;
+ if (dladdr(fill_lines, &info)) {
+ lines[i].base_addr = (unsigned long)info.dli_fbase;
+ }
+ }
+#endif
lines[i].line = -1;
}
}