OSDN Git Service

* elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Test for a
authorAlan Modra <amodra@bigpond.net.au>
Fri, 18 Jan 2002 01:22:02 +0000 (01:22 +0000)
committerAlan Modra <amodra@bigpond.net.au>
Fri, 18 Jan 2002 01:22:02 +0000 (01:22 +0000)
dynamic function descriptor symbol, not the associated function
symbol.

bfd/ChangeLog
bfd/elf64-ppc.c

index 067554d..2c738ad 100644 (file)
@@ -1,3 +1,9 @@
+2002-01-18  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf64-ppc.c (ppc64_elf_adjust_dynamic_symbol): Test for a
+       dynamic function descriptor symbol, not the associated function
+       symbol.
+
 2002-01-17  Eric Christopher  <echristo@redhat.com>
 
        * elf32-mips.c (mips_elf_calculate_relocation): Fix typo.
index 1380e0d..1e3a28e 100644 (file)
@@ -2384,16 +2384,8 @@ ppc64_elf_adjust_dynamic_symbol (info, h)
 
       if (h->plt.refcount <= 0
          || h->root.root.string[0] != '.'
-         || h->root.root.string[1] == '\0'
-         || (! info->shared
-             && (h->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
-             && (h->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) == 0))
+         || h->root.root.string[1] == '\0')
        {
-         /* This case can occur if we saw a PLT reloc in an input
-            file, but the symbol was never referred to by a dynamic
-            object, or if all references were garbage collected.  In
-            such a case, we don't actually need to build a procedure
-            linkage table entry.  */
          h->plt.offset = (bfd_vma) -1;
          h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
          return true;
@@ -2426,6 +2418,25 @@ ppc64_elf_adjust_dynamic_symbol (info, h)
              return false;
            }
        }
+
+      while (fdh->root.type == bfd_link_hash_indirect
+            || fdh->root.type == bfd_link_hash_warning)
+       fdh = (struct elf_link_hash_entry *) fdh->root.u.i.link;
+
+      if (! info->shared
+         && (fdh->elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) == 0
+         && (fdh->elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) == 0)
+       {
+         /* This case can occur if we saw a PLT reloc in an input
+            file, but the symbol was never referred to by a dynamic
+            object, or if all references were garbage collected.  In
+            such a case, we don't actually need to build a procedure
+            linkage table entry.  */
+         h->plt.offset = (bfd_vma) -1;
+         h->elf_link_hash_flags &= ~ELF_LINK_HASH_NEEDS_PLT;
+         return true;
+       }
+
       return true;
     }
   else