diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 74c6032a15..4107449f96 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +2009-08-03 H.J. Lu + + PR ld/10433 + * elf-ifunc.c (_bfd_elf_allocate_ifunc_dyn_relocs): Set got + to htab->init_got_offset and plt to htab->init_plt_offset + when discarding space for dynamic relocations. + 2009-08-03 Alan Modra * elf32-ppc.c (struct plt_entry): Revise comments. diff --git a/bfd/elf-ifunc.c b/bfd/elf-ifunc.c index b9b50c3628..0de236f8c2 100644 --- a/bfd/elf-ifunc.c +++ b/bfd/elf-ifunc.c @@ -185,6 +185,8 @@ _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info, return FALSE; } + htab = elf_hash_table (info); + /* Return and discard space for dynamic relocations against it if it is never referenced in a non-shared object. */ if (!h->ref_regular) @@ -192,7 +194,8 @@ _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info, if (h->plt.refcount > 0 || h->got.refcount > 0) abort (); - h->got.offset = (bfd_vma) -1; + h->got = htab->init_got_offset; + h->plt = htab->init_plt_offset; *head = NULL; return TRUE; } @@ -203,8 +206,6 @@ _bfd_elf_allocate_ifunc_dyn_relocs (struct bfd_link_info *info, else sizeof_reloc = bed->s->sizeof_rel; - htab = elf_hash_table (info); - /* When building a static executable, use .iplt, .igot.plt and .rel[a].iplt sections for STT_GNU_IFUNC symbols. */ if (htab->splt != NULL)