From 7b70956dc8e3886e5fa483d72847f68a5008346c Mon Sep 17 00:00:00 2001 From: Will Newton Date: Tue, 7 May 2013 17:03:52 +0000 Subject: [PATCH] bfd/elf-ifunc.c: Add header size arg to _bfd_elf_allocate_ifunc_dyn_relocs. bfd/ChangeLog: 2013-05-07 Will Newton * 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 | 10 ++++++++++ bfd/elf-bfd.h | 2 +- bfd/elf-ifunc.c | 3 ++- bfd/elf32-i386.c | 3 ++- bfd/elf64-x86-64.c | 1 + 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 5e24d2e..a670a24 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,15 @@ 2013-05-07 Will Newton + * 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 + * elf-ifunc.c (_bfd_elf_create_ifunc_dyn_reloc): Remove unused function. * elf-bfd.h: Likewise. diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h index d1a7e26..4a67d02 100644 --- a/bfd/elf-bfd.h +++ b/bfd/elf-bfd.h @@ -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 *); diff --git a/bfd/elf-ifunc.c b/bfd/elf-ifunc.c index ea08329..8d48e66 100644 --- a/bfd/elf-ifunc.c +++ b/bfd/elf-ifunc.c @@ -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 { diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c index 2609130..cc8b48e 100644 --- a/bfd/elf32-i386.c +++ b/bfd/elf32-i386.c @@ -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) { diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c index 9adc959..758231e 100644 --- a/bfd/elf64-x86-64.c +++ b/bfd/elf64-x86-64.c @@ -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) -- 2.7.4