mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-02-01 22:42:18 +00: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>
|
2011-11-02 DJ Delorie <dj@redhat.com>
|
||||||
|
|
||||||
* elf32-rl78.c (rl78_elf_merge_private_bfd_data): Delete unused
|
* 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->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
|
if (eh->type == STT_FUNC
|
||||||
|| eh->needs_plt)
|
|| 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
|
if (eh->plt.refcount <= 0
|
||||||
|| (eh->def_regular
|
|| (eh->def_regular
|
||||||
&& eh->root.type != bfd_link_hash_defweak
|
&& eh->root.type != bfd_link_hash_defweak
|
||||||
|
Loading…
x
Reference in New Issue
Block a user