bfd/elf-ifunc.c: Add header size arg to _bfd_elf_allocate_ifunc_dyn_relocs.
authorWill Newton <willnewton@sourceware.org>
Tue, 7 May 2013 17:03:52 +0000 (17:03 +0000)
committerWill Newton <willnewton@sourceware.org>
Tue, 7 May 2013 17:03:52 +0000 (17:03 +0000)
bfd/ChangeLog:

2013-05-07  Will Newton  <will.newton@linaro.org>

* elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Add a
plt_header_size argument for ports where it differs from
plt_entry_size.
* elf-bfd.h: Likewise.
* elf32-i386.c: Pass plt_header_size to
_bfd_elf_allocate_ifunc_dyn_relocs.
* elf64-x86-64.c: Likewise.

bfd/ChangeLog
bfd/elf-bfd.h
bfd/elf-ifunc.c
bfd/elf32-i386.c
bfd/elf64-x86-64.c

index 5e24d2e1dfe0d5ea40afead71af37b232f1cbbea..a670a24d345a9b2a24369ea40c9d945ec48015cc 100644 (file)
@@ -1,3 +1,13 @@
+2013-05-07  Will Newton  <will.newton@linaro.org>
+
+       * elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Add a
+       plt_header_size argument for ports where it differs from
+       plt_entry_size.
+       * elf-bfd.h: Likewise.
+       * elf32-i386.c: Pass plt_header_size to
+       _bfd_elf_allocate_ifunc_dyn_relocs.
+       * elf64-x86-64.c: Likewise.
+
 2013-05-07  Will Newton  <will.newton@linaro.org>
 
         * elf-ifunc.c (_bfd_elf_create_ifunc_dyn_reloc): Remove unused
index d1a7e2620832ca7ca4f2769e0d62ddca168aec06..4a67d02198bb5bf11453e62c86308469c88adcc4 100644 (file)
@@ -2380,7 +2380,7 @@ extern bfd_boolean _bfd_elf_create_ifunc_sections
   (bfd *, struct bfd_link_info *);
 extern bfd_boolean _bfd_elf_allocate_ifunc_dyn_relocs
   (struct bfd_link_info *, struct elf_link_hash_entry *,
-   struct elf_dyn_relocs **, unsigned int, unsigned int);
+   struct elf_dyn_relocs **, unsigned int, unsigned int, unsigned int);
 
 extern void elf_append_rela (bfd *, asection *, Elf_Internal_Rela *);
 extern void elf_append_rel (bfd *, asection *, Elf_Internal_Rela *);
index ea08329d2ed8b6128d5a2920a8ceb20274a80226..8d48e66eef9681910f781ec17b935d88fa7c1df3 100644 (file)
@@ -112,6 +112,7 @@ _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info,
                                    struct elf_link_hash_entry *h,
                                    struct elf_dyn_relocs **head,
                                    unsigned int plt_entry_size,
+                                   unsigned int plt_header_size,
                                    unsigned int got_entry_size)
 {
   asection *plt, *gotplt, *relplt;
@@ -193,7 +194,7 @@ keep:
       /* If this is the first .plt entry, make room for the special
         first entry.  */
       if (plt->size == 0)
-       plt->size += plt_entry_size;
+       plt->size += plt_header_size;
     }
   else
     {
index 2609130d81ac126418397ecd818dfcbde3e9ae00..cc8b48efef0d089e63094d8d4abf3926df9e4a36 100644 (file)
@@ -2197,7 +2197,8 @@ elf_i386_allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
   if (h->type == STT_GNU_IFUNC
       && h->def_regular)
     return _bfd_elf_allocate_ifunc_dyn_relocs (info, h, &eh->dyn_relocs,
-                                               plt_entry_size, 4);
+                                               plt_entry_size,
+                                              plt_entry_size, 4);
   else if (htab->elf.dynamic_sections_created
           && h->plt.refcount > 0)
     {
index 9adc959f9d597751b3cafc5fa7cb468249bf9f41..758231e2c460f231f9155ba859956d8738760296 100644 (file)
@@ -2260,6 +2260,7 @@ elf_x86_64_allocate_dynrelocs (struct elf_link_hash_entry *h, void * inf)
     return _bfd_elf_allocate_ifunc_dyn_relocs (info, h,
                                               &eh->dyn_relocs,
                                               plt_entry_size,
+                                              plt_entry_size,
                                               GOT_ENTRY_SIZE);
   else if (htab->elf.dynamic_sections_created
           && h->plt.refcount > 0)