PR ld/11375
authorAlan Modra <amodra@gmail.com>
Fri, 12 Mar 2010 22:31:16 +0000 (22:31 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 12 Mar 2010 22:31:16 +0000 (22:31 +0000)
* elf64-ppc.c (ppc_type_of_stub): Always set *hash to the
function descriptor symbol if there is one, not just for plt stubs.
(ppc64_elf_relocate_section): Use fdh on all ppc_get_stub_entry calls.

bfd/ChangeLog
bfd/elf64-ppc.c

index 201e132..27a3327 100644 (file)
@@ -1,3 +1,10 @@
+2010-03-13  Alan Modra  <amodra@gmail.com>
+
+       PR ld/11375
+       * elf64-ppc.c (ppc_type_of_stub): Always set *hash to the
+       function descriptor symbol if there is one, not just for plt stubs.
+       (ppc64_elf_relocate_section): Use fdh on all ppc_get_stub_entry calls.
+
 2010-03-05  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
 
        * elflink.c (bfd_elf_size_dynamic_sections): Don't emit base
index ffd37dd..5696838 100644 (file)
@@ -8976,13 +8976,15 @@ ppc_type_of_stub (asection *input_sec,
       struct ppc_link_hash_entry *fdh = h;
       if (h->oh != NULL
          && h->oh->is_func_descriptor)
-       fdh = ppc_follow_link (h->oh);
+       {
+         fdh = ppc_follow_link (h->oh);
+         *hash = fdh;
+       }
 
       for (ent = fdh->elf.plt.plist; ent != NULL; ent = ent->next)
        if (ent->addend == rel->r_addend
            && ent->plt.offset != (bfd_vma) -1)
          {
-           *hash = fdh;
            *plt_ent = ent;
            return ppc_stub_plt_call;
          }
@@ -11933,7 +11935,7 @@ ppc64_elf_relocate_section (bfd *output_bfd,
                  >= 2 * max_br_offset)
              && r_type != R_PPC64_ADDR14_BRTAKEN
              && r_type != R_PPC64_ADDR14_BRNTAKEN)
-           stub_entry = ppc_get_stub_entry (input_section, sec, h, rel,
+           stub_entry = ppc_get_stub_entry (input_section, sec, fdh, rel,
                                             htab);
 
          if (stub_entry != NULL)