When trying to decide the status of a weak symbol, resolve any
indirectness first. In the case of various Qt5 libraries, __bss_start ends up with a Qt5 version, but it has to be resolved first to match the actual (implicit) definition. This fixes the root cause of pkg/53089.
This commit is contained in:
parent
9fdc611c5c
commit
4f6482b106
7
external/gpl3/binutils/dist/bfd/elflink.c
vendored
7
external/gpl3/binutils/dist/bfd/elflink.c
vendored
@ -2675,14 +2675,17 @@ _bfd_elf_fix_symbol_flags (struct elf_link_hash_entry *h,
|
||||
over to the real definition. */
|
||||
if (h->u.weakdef != NULL)
|
||||
{
|
||||
struct elf_link_hash_entry *weakdef = h->u.weakdef;
|
||||
while (weakdef->root.type == bfd_link_hash_indirect)
|
||||
weakdef = (struct elf_link_hash_entry *) weakdef->root.u.i.link;
|
||||
|
||||
/* If the real definition is defined by a regular object file,
|
||||
don't do anything special. See the longer description in
|
||||
_bfd_elf_adjust_dynamic_symbol, below. */
|
||||
if (h->u.weakdef->def_regular)
|
||||
if (weakdef->def_regular)
|
||||
h->u.weakdef = NULL;
|
||||
else
|
||||
{
|
||||
struct elf_link_hash_entry *weakdef = h->u.weakdef;
|
||||
|
||||
while (h->root.type == bfd_link_hash_indirect)
|
||||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||
|
Loading…
Reference in New Issue
Block a user