weakdef list handling
The existing code allowed common and indirect symbols to pass an assert, but then read root.u.def which is not valid for anything besides defined and weakdef symbols. The garbage root.u.def.section pointer read can't possibly match pointers stored at the same location for indirect and common symbols, so we would always have left u.weakdef NULL. * elflink.c (elf_link_add_object_symbols): Ignore anything but defined and defweak symbols when setting up weakdefs.
This commit is contained in:
parent
529fe20eeb
commit
e3e53eed9c
2 changed files with 9 additions and 4 deletions
|
@ -1,3 +1,8 @@
|
|||
2017-11-12 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elflink.c (elf_link_add_object_symbols): Ignore anything but
|
||||
defined and defweak symbols when setting up weakdefs.
|
||||
|
||||
2017-11-12 Alan Modra <amodra@gmail.com>
|
||||
|
||||
* elf32-hppa.c (elf32_hppa_adjust_dynamic_symbol): Set non_got_ref
|
||||
|
|
|
@ -5145,10 +5145,10 @@ error_free_dyn:
|
|||
weaks = hlook->u.weakdef;
|
||||
hlook->u.weakdef = NULL;
|
||||
|
||||
BFD_ASSERT (hlook->root.type == bfd_link_hash_defined
|
||||
|| hlook->root.type == bfd_link_hash_defweak
|
||||
|| hlook->root.type == bfd_link_hash_common
|
||||
|| hlook->root.type == bfd_link_hash_indirect);
|
||||
if (hlook->root.type != bfd_link_hash_defined
|
||||
&& hlook->root.type != bfd_link_hash_defweak)
|
||||
continue;
|
||||
|
||||
slook = hlook->root.u.def.section;
|
||||
vlook = hlook->root.u.def.value;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue