bfd: Fix objdump --dynamic-reloc for SPARC 64-bit to show symbol names.
authorSheldon Lobo <sheldon.lobo@oracle.com>
Tue, 7 Feb 2017 14:05:59 +0000 (06:05 -0800)
committerJose E. Marchesi <jose.marchesi@oracle.com>
Tue, 7 Feb 2017 14:05:59 +0000 (06:05 -0800)
Fixes ld/testsuite/ld-elf/shared.exp "Build libpr16496b.so".

The root cause is in bfd/elf64-sparc.c, elf64_sparc_slurp_one_reloc_table(),
bfd_get_symcount() was used for dynamic mode as well. The fix is to use
bfd_get_dynamic_symcount().

This has been tested with sparc64-linux-gnu, and it does not introduce any
regressions.

bfd/ChangeLog:

2017-02-06  Sheldon Lobo  <sheldon.lobo@oracle.com>

Fix sparc64 dynamic relocation processing to use the dynamic
        symbol count.
* elf64-sparc.c (elf64_sparc_slurp_one_reloc_table): Use 'dynamic'
to determine if bfd_get_symcount() or bfd_get_dynamic_symcount()
should be used.

bfd/ChangeLog
bfd/elf64-sparc.c

index 3f9bbd1..8d21e04 100644 (file)
@@ -1,3 +1,11 @@
+2017-02-06  Sheldon Lobo  <sheldon.lobo@oracle.com>
+
+       Fix sparc64 dynamic relocation processing to use the dynamic
+        symbol count.
+       * elf64-sparc.c (elf64_sparc_slurp_one_reloc_table): Use 'dynamic'
+       to determine if bfd_get_symcount() or bfd_get_dynamic_symcount()
+       should be used.
+
 2017-02-03  Nick Clifton  <nickc@redhat.com>
 
        PR 21096
index ac66ab1..0190bd2 100644 (file)
@@ -99,7 +99,9 @@ elf64_sparc_slurp_one_reloc_table (bfd *abfd, asection *asect,
 
       if (ELF64_R_SYM (rela.r_info) == STN_UNDEF
          /* PR 17512: file: 996185f8.  */
-         || ELF64_R_SYM (rela.r_info) > bfd_get_symcount (abfd))
+         || (!dynamic && ELF64_R_SYM(rela.r_info) > bfd_get_symcount(abfd))
+          || (dynamic
+              && ELF64_R_SYM(rela.r_info) > bfd_get_dynamic_symcount(abfd)))
        relent->sym_ptr_ptr = bfd_abs_section_ptr->symbol_ptr_ptr;
       else
        {