PPC: ensure_undef_dynamic on weak undef only in plt
It's slightly weird to have a call to a weak function not protected by a test of that function being non-NULL, but the non-NULL test might be covered by a test of another function. For example: if (func1) { func1 (); func2 (); } where func2 is known to exist if func1 exists. * elf32-ppc.c (allocate_dynrelocs): Call ensure_undef_dynamic for weak undefined symols that only appear on PLT relocs. * elf64-ppc.c (allocate_dynrelocs): Likewise.
This commit is contained in:
parent
337d0bf887
commit
b293661219
3 changed files with 16 additions and 2 deletions
|
@ -1,3 +1,9 @@
|
|||
2021-05-03 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf32-ppc.c (allocate_dynrelocs): Call ensure_undef_dynamic for
|
||||
weak undefined symols that only appear on PLT relocs.
|
||||
* elf64-ppc.c (allocate_dynrelocs): Likewise.
|
||||
|
||||
2021-05-03 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 27755
|
||||
|
|
|
@ -5296,9 +5296,14 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
|||
for (ent = h->plt.plist; ent != NULL; ent = ent->next)
|
||||
if (ent->plt.refcount > 0)
|
||||
{
|
||||
asection *s = htab->elf.splt;
|
||||
bool dyn = !use_local_plt (info, h);
|
||||
asection *s;
|
||||
bool dyn;
|
||||
|
||||
if (!ensure_undef_dynamic (info, h))
|
||||
return false;
|
||||
|
||||
dyn = !use_local_plt (info, h);
|
||||
s = htab->elf.splt;
|
||||
if (!dyn)
|
||||
{
|
||||
if (h->type == STT_GNU_IFUNC)
|
||||
|
|
|
@ -9855,6 +9855,9 @@ allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
|
|||
for (pent = h->plt.plist; pent != NULL; pent = pent->next)
|
||||
if (pent->plt.refcount > 0)
|
||||
{
|
||||
if (!ensure_undef_dynamic (info, h))
|
||||
return false;
|
||||
|
||||
if (use_local_plt (info, h))
|
||||
{
|
||||
if (h->type == STT_GNU_IFUNC)
|
||||
|
|
Loading…
Add table
Reference in a new issue