mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
PR ld/13387
* elf32-hppa.c (elf32_hppa_hide_symbol): Make STT_GNU_IFUNC symbol go through PLT. Reset plt field with init_plt_offset. (elf32_hppa_adjust_dynamic_symbol): Ensure that a PLT slot is allocated for symbols referenced by a plabel.
This commit is contained in:
parent
6f809020fa
commit
4340287bb5
@ -1,3 +1,11 @@
|
||||
2011-11-06 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
|
||||
|
||||
PR ld/13387
|
||||
* elf32-hppa.c (elf32_hppa_hide_symbol): Make STT_GNU_IFUNC symbol
|
||||
go through PLT. Reset plt field with init_plt_offset.
|
||||
(elf32_hppa_adjust_dynamic_symbol): Ensure that a PLT slot is
|
||||
allocated for symbols referenced by a plabel.
|
||||
|
||||
2011-11-02 DJ Delorie <dj@redhat.com>
|
||||
|
||||
* elf32-rl78.c (rl78_elf_merge_private_bfd_data): Delete unused
|
||||
|
@ -1789,10 +1789,12 @@ elf32_hppa_hide_symbol (struct bfd_link_info *info,
|
||||
}
|
||||
}
|
||||
|
||||
if (! hppa_elf_hash_entry (eh)->plabel)
|
||||
/* STT_GNU_IFUNC symbol must go through PLT. */
|
||||
if (! hppa_elf_hash_entry (eh)->plabel
|
||||
&& eh->type != STT_GNU_IFUNC)
|
||||
{
|
||||
eh->needs_plt = 0;
|
||||
eh->plt = elf_hash_table (info)->init_plt_refcount;
|
||||
eh->plt = elf_hash_table (info)->init_plt_offset;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1814,6 +1816,13 @@ elf32_hppa_adjust_dynamic_symbol (struct bfd_link_info *info,
|
||||
if (eh->type == STT_FUNC
|
||||
|| eh->needs_plt)
|
||||
{
|
||||
/* If the symbol is used by a plabel, we must allocate a PLT slot.
|
||||
The refcounts are not reliable when it has been hidden since
|
||||
hide_symbol can be called before the plabel flag is set. */
|
||||
if (hppa_elf_hash_entry (eh)->plabel
|
||||
&& eh->plt.refcount <= 0)
|
||||
eh->plt.refcount = 1;
|
||||
|
||||
if (eh->plt.refcount <= 0
|
||||
|| (eh->def_regular
|
||||
&& eh->root.type != bfd_link_hash_defweak
|
||||
|
Loading…
Reference in New Issue
Block a user