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. */
|
over to the real definition. */
|
||||||
if (h->u.weakdef != NULL)
|
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,
|
/* If the real definition is defined by a regular object file,
|
||||||
don't do anything special. See the longer description in
|
don't do anything special. See the longer description in
|
||||||
_bfd_elf_adjust_dynamic_symbol, below. */
|
_bfd_elf_adjust_dynamic_symbol, below. */
|
||||||
if (h->u.weakdef->def_regular)
|
if (weakdef->def_regular)
|
||||||
h->u.weakdef = NULL;
|
h->u.weakdef = NULL;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
struct elf_link_hash_entry *weakdef = h->u.weakdef;
|
|
||||||
|
|
||||||
while (h->root.type == bfd_link_hash_indirect)
|
while (h->root.type == bfd_link_hash_indirect)
|
||||||
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
h = (struct elf_link_hash_entry *) h->root.u.i.link;
|
||||||
|
Loading…
Reference in New Issue
Block a user