From 0d0fb1ba5f0512ca8b670d3bdcf2083db355d3d7 Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Fri, 15 Mar 2013 16:25:00 +0000 Subject: [PATCH] * addr2line.c (slurp_symtab): If canonicalization reveals that there were no ordinary symbols, try loading the dynamic symbols instead. --- binutils/ChangeLog | 6 ++++++ binutils/addr2line.c | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 13bded1..43f490f 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +2013-03-15 Nick Clifton + + * addr2line.c (slurp_symtab): If canonicalization reveals that + there were no ordinary symbols, try loading the dynamic symbols + instead. + 2013-03-14 Markos Chandras * MAINTAINERS: Add myself as Meta maintainer. diff --git a/binutils/addr2line.c b/binutils/addr2line.c index b4f604b..0de7398 100644 --- a/binutils/addr2line.c +++ b/binutils/addr2line.c @@ -130,6 +130,17 @@ slurp_symtab (bfd *abfd) symcount = bfd_canonicalize_symtab (abfd, syms); if (symcount < 0) bfd_fatal (bfd_get_filename (abfd)); + + /* If there are no symbols left after canonicalization and + we have not tried the dynamic symbols then give them a go. */ + if (symcount == 0 + && ! dynamic + && (storage = bfd_get_dynamic_symtab_upper_bound (abfd)) > 0) + { + free (syms); + syms = xmalloc (storage); + symcount = bfd_canonicalize_dynamic_symtab (abfd, syms); + } } /* These global variables are used to pass information between -- 2.7.4