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:
joerg 2018-03-27 23:39:23 +00:00
parent 9fdc611c5c
commit 4f6482b106

View File

@ -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;