* elf64-ppc.c (toc_adjusting_stub_needed): Return true for
authorAlan Modra <amodra@gmail.com>
Fri, 11 Feb 2005 14:18:15 +0000 (14:18 +0000)
committerAlan Modra <amodra@gmail.com>
Fri, 11 Feb 2005 14:18:15 +0000 (14:18 +0000)
old-style branches to undefined dot-symbols which will be
satisfied by a plt call.

bfd/ChangeLog
bfd/elf64-ppc.c

index f73afa1170d65f14b1eb236c7e69570059a6fd68..4b5600c9c546223ea09a3325a698e30930ae7624 100644 (file)
@@ -1,3 +1,9 @@
+2005-02-12  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf64-ppc.c (toc_adjusting_stub_needed): Return true for
+       old-style branches to undefined dot-symbols which will be
+       satisfied by a plt call.
+
 2005-02-11  Alan Modra  <amodra@bigpond.net.au>
 
        * elf64-ppc.c (move_plt_plist): New function, extracted from..
index 4162d55fc8574b69c258850663d13849e1038c5b..86419b994c9ba657a01b0124c8b7370bf5f20782 100644 (file)
@@ -8361,13 +8361,27 @@ toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
          break;
        }
 
-      /* Ignore branches to undefined syms.  */
+      /* Calls to dynamic lib functions go through a plt call stub
+        that uses r2.  Branches to undefined symbols might be a call
+        using old-style dot symbols that can be satisfied by a plt
+        call into a new-style dynamic library.  */
       if (sym_sec == NULL)
-       continue;
+       {
+         struct ppc_link_hash_entry *eh = (struct ppc_link_hash_entry *) h;
+         if (eh != NULL
+             && eh->oh != NULL
+             && eh->oh->elf.plt.plist != NULL)
+           {
+             ret = 1;
+             break;
+           }
 
-      /* Calls to dynamic lib functions go through a plt call stub
-        that uses r2.  Assume branches to other sections not included
-        in the link need stubs too, to cover -R and absolute syms.  */
+         /* Ignore other undefined symbols.  */
+         continue;
+       }
+
+      /* Assume branches to other sections not included in the link need
+        stubs too, to cover -R and absolute syms.  */
       if (sym_sec->output_section == NULL)
        {
          ret = 1;
@@ -8389,7 +8403,6 @@ toc_adjusting_stub_needed (struct bfd_link_info *info, asection *isec)
       opd_adjust = get_opd_info (sym_sec);
       if (opd_adjust != NULL)
        {
-
          if (h == NULL)
            {
              long adjust;
This page took 0.03659 seconds and 4 git commands to generate.