diff options
author | H.J. Lu <hjl@lucon.org> | 2009-08-03 15:50:51 +0000 |
---|---|---|
committer | H.J. Lu <hjl@lucon.org> | 2009-08-03 15:50:51 +0000 |
commit | a59f17231cc2fbd8b423876458c1fb47a33d19bf (patch) | |
tree | 6bfefdd24128583ff5e7728720a1e1a8d36d9f42 /bfd | |
parent | 3221ad28ae175c098e5519edd952fe33a6bcbfb3 (diff) | |
download | binutils-redhat-a59f17231cc2fbd8b423876458c1fb47a33d19bf.tar.gz |
2009-08-03 H.J. Lu <hongjiu.lu@intel.com>
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.
Diffstat (limited to 'bfd')
-rw-r--r-- | bfd/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/elf-ifunc.c | 7 |
2 files changed, 11 insertions, 3 deletions
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 <hongjiu.lu@intel.com> + + 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 <amodra@bigpond.net.au> * 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) |