OSDN Git Service

* elf64-ppc.c (ppc_build_one_stub): Point undefined function syms
authoramodra <amodra>
Mon, 20 May 2002 13:12:40 +0000 (13:12 +0000)
committeramodra <amodra>
Mon, 20 May 2002 13:12:40 +0000 (13:12 +0000)
at the plt call stub.

bfd/ChangeLog
bfd/elf64-ppc.c

index 02b963f..01ec5b0 100644 (file)
@@ -1,3 +1,8 @@
+2002-05-20  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf64-ppc.c (ppc_build_one_stub): Point undefined function syms
+       at the plt call stub.
+
 2002-05-19  Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
 
        * cpu-mips.c (mips_compatible): Don't try to check machine
index cd6fe7b..65ef453 100644 (file)
@@ -4153,6 +4153,20 @@ ppc_build_one_stub (gen_entry, in_arg)
       htab->sglink->_cooked_size = p - htab->sglink->contents;
       htab->sglink->reloc_count += 1;
 
+      /* Do the best we can for shared libraries built without
+        exporting ".foo" for each "foo".  This can happen when symbol
+        versioning scripts strip all bar a subset of symbols.  */
+      if (stub_entry->h->oh->root.type != bfd_link_hash_defined
+         && stub_entry->h->oh->root.type != bfd_link_hash_defweak)
+       {
+         /* Point the symbol at the stub.  There may be multiple stubs,
+            we don't really care;  The main thing is to make this sym
+            defined somewhere.  */
+         stub_entry->h->oh->root.type = bfd_link_hash_defined;
+         stub_entry->h->oh->root.u.def.section = stub_entry->stub_sec;
+         stub_entry->h->oh->root.u.def.value = stub_entry->stub_offset;
+       }
+
       /* Now build the stub.  */
       off = stub_entry->h->elf.plt.offset;
       if (off >= (bfd_vma) -2)