diff options
Diffstat (limited to 'binutils')
-rw-r--r-- | binutils/ChangeLog | 6 | ||||
-rw-r--r-- | binutils/addr2line.c | 11 |
2 files changed, 17 insertions, 0 deletions
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 <nickc@redhat.com> + + * addr2line.c (slurp_symtab): If canonicalization reveals that + there were no ordinary symbols, try loading the dynamic symbols + instead. + 2013-03-14 Markos Chandras <markos.chandras@imgtec.com> * 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 |