PR27441, inconsistency in weak definitions
This makes IR objects use the same logic as normal objects with respect to what sort of ref/def makes an as-needed library needed. Testing the binding of the definition is just plain wrong. What matters is the binding of the reference. PR 27441 * elf-bfd.h (struct elf_link_hash_entry): Add ref_ir_nonweak. * elflink.c (elf_link_add_object_symbols): Set ref_ir_nonweak and use when deciding an as-needed library should be loaded instead of using the binding of the library definition.
This commit is contained in:
parent
39b0759693
commit
bbaddd4bbe
@ -1,3 +1,11 @@
|
||||
2021-02-25 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 27441
|
||||
* elf-bfd.h (struct elf_link_hash_entry): Add ref_ir_nonweak.
|
||||
* elflink.c (elf_link_add_object_symbols): Set ref_ir_nonweak and
|
||||
use when deciding an as-needed library should be loaded instead
|
||||
of using the binding of the library definition.
|
||||
|
||||
2021-02-24 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR 27459
|
||||
|
@ -184,6 +184,8 @@ struct elf_link_hash_entry
|
||||
/* Symbol has a non-weak reference from a non-shared object (other than
|
||||
the object in which it is defined). */
|
||||
unsigned int ref_regular_nonweak : 1;
|
||||
/* Symbol has a non-weak reference from a LTO IR object file. */
|
||||
unsigned int ref_ir_nonweak : 1;
|
||||
/* Dynamic symbol has been adjustd. */
|
||||
unsigned int dynamic_adjusted : 1;
|
||||
/* Symbol needs a copy reloc. */
|
||||
|
@ -5029,7 +5029,12 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
|
||||
|
||||
/* Plugin symbols aren't normal. Don't set def/ref flags. */
|
||||
if ((abfd->flags & BFD_PLUGIN) != 0)
|
||||
;
|
||||
{
|
||||
/* Except for this flag to track nonweak references. */
|
||||
if (!definition
|
||||
&& bind != STB_WEAK)
|
||||
h->ref_ir_nonweak = 1;
|
||||
}
|
||||
else if (!dynamic)
|
||||
{
|
||||
if (! definition)
|
||||
@ -5279,8 +5284,8 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
|
||||
&& h->ref_regular_nonweak)
|
||||
|| (old_bfd != NULL
|
||||
&& (old_bfd->flags & BFD_PLUGIN) != 0
|
||||
&& !info->lto_all_symbols_read
|
||||
&& bind != STB_WEAK)
|
||||
&& h->ref_ir_nonweak
|
||||
&& !info->lto_all_symbols_read)
|
||||
|| (h->ref_dynamic_nonweak
|
||||
&& (elf_dyn_lib_class (abfd) & DYN_AS_NEEDED) != 0
|
||||
&& !on_needed_list (elf_dt_name (abfd),
|
||||
|
Loading…
Reference in New Issue
Block a user