* elf32-ppc.c (add_stub_sym): Pass info rather than htab.
authorAlan Modra <amodra@gmail.com>
Tue, 27 Dec 2005 03:54:33 +0000 (03:54 +0000)
committerAlan Modra <amodra@gmail.com>
Tue, 27 Dec 2005 03:54:33 +0000 (03:54 +0000)
Use different names for pic vs non-pic, '.' instead of '_'.
(allocate_dynrelocs): Adjust add_stub_sym call.

bfd/ChangeLog
bfd/elf32-ppc.c

index fc1390125a6392863fe5f0c97670282bc8eb9e88..5c58b8107b9dc632973b8ed157b967f402cbf21e 100644 (file)
@@ -1,3 +1,9 @@
+2005-12-27  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf32-ppc.c (add_stub_sym): Pass info rather than htab.
+       Use different names for pic vs non-pic, '.' instead of '_'.
+       (allocate_dynrelocs): Adjust add_stub_sym call.
+
 2005-12-27  Alan Modra  <amodra@bigpond.net.au>
 
        * elf.c (bfd_section_from_shdr): Treat invalid reloc sections as
index 5b8c955a6787425503684eb38b98004b01fb44e0..e6de049abe09c33e087acb41a2297674ce5589b8 100644 (file)
@@ -4213,34 +4213,41 @@ ppc_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
   return TRUE;
 }
 \f
-/* Generate a symbol to mark plt call stubs, of the form
-   xxxxxxxx_plt_call_<callee> where xxxxxxxx is a hex number, usually 0,
-   specifying the addend on the plt relocation, or for -fPIC,
-   xxxxxxxx.got2_plt_call_<callee>.  */
+/* Generate a symbol to mark plt call stubs.  For non-PIC code the sym is
+   xxxxxxxx.plt_call32.<callee> where xxxxxxxx is a hex number, usually 0,
+   specifying the addend on the plt relocation.  For -fpic code, the sym
+   is xxxxxxxx.plt_pic32.<callee>, and for -fPIC
+   xxxxxxxx.got2.plt_pic32.<callee>.  */
 
 static bfd_boolean
 add_stub_sym (struct plt_entry *ent,
              struct elf_link_hash_entry *h,
-             struct ppc_elf_link_hash_table *htab)
+             struct bfd_link_info *info)
 {
   struct elf_link_hash_entry *sh;
   size_t len1, len2, len3;
   char *name;
+  const char *stub;
+  struct ppc_elf_link_hash_table *htab = ppc_elf_hash_table (info);
+
+  if (info->shared || info->pie)
+    stub = ".plt_pic32.";
+  else
+    stub = ".plt_call32.";
 
   len1 = strlen (h->root.root.string);
-  len2 = sizeof ("plt_call_") - 1;
+  len2 = strlen (stub);
   len3 = 0;
   if (ent->sec)
     len3 = strlen (ent->sec->name);
-  name = bfd_malloc (len1 + len2 + len3 + 10);
+  name = bfd_malloc (len1 + len2 + len3 + 9);
   if (name == NULL)
     return FALSE;
   sprintf (name, "%08x", (unsigned) ent->addend & 0xffffffff);
   if (ent->sec)
     memcpy (name + 8, ent->sec->name, len3);
-  name[len3 + 8] = '_';
-  memcpy (name + len3 + 9, "plt_call_", len2);
-  memcpy (name + len3 + 9 + len2, h->root.root.string, len1 + 1);
+  memcpy (name + 8 + len3, stub, len2);
+  memcpy (name + 8 + len3 + len2, h->root.root.string, len1 + 1);
   sh = elf_link_hash_lookup (&htab->elf, name, TRUE, FALSE, FALSE);
   if (sh == NULL)
     return FALSE;
@@ -4361,7 +4368,7 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
                    ent->glink_offset = glink_offset;
 
                    if (htab->emit_stub_syms
-                       && !add_stub_sym (ent, h, htab))
+                       && !add_stub_sym (ent, h, info))
                      return FALSE;
                  }
                else
This page took 0.034472 seconds and 4 git commands to generate.