This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Commit: addr2line: try harder to load symbols


Hi Guys,

  I am applying the patch below to fix a problem with addr2line and ELF
  targets.  The problem is that bfd_get_symtab_upper_bound() will always
  return a non-zero value (for ELF targets) because an extra entry is
  allowed to null terminate the symtab vector.  This means that, without
  this patch, addr2line will never try to load the dynamic symbols even
  if there are no ordinary symbols available.

Cheers
  Nick

binutils/ChangeLog
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.

Index: binutils/addr2line.c
===================================================================
RCS file: /cvs/src/src/binutils/addr2line.c,v
retrieving revision 1.43
diff -u -3 -p -r1.43 addr2line.c
--- binutils/addr2line.c	18 Jan 2013 13:14:35 -0000	1.43
+++ binutils/addr2line.c	15 Mar 2013 16:15:54 -0000
@@ -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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]