diff options
author | Alan Modra <amodra@gmail.com> | 2017-11-12 14:12:41 +1030 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2017-11-12 17:45:24 +1030 |
commit | e3e53eed9c2f1ab82ae4a7683f474b4f6eb162c7 (patch) | |
tree | 712e20f801d16dd5ff14e765783a1b6e0469769a /bfd/elflink.c | |
parent | non_got_ref after adjust_dynamic_relocs (diff) | |
download | binutils-gdb-e3e53eed9c2f1ab82ae4a7683f474b4f6eb162c7.tar.gz binutils-gdb-e3e53eed9c2f1ab82ae4a7683f474b4f6eb162c7.tar.bz2 binutils-gdb-e3e53eed9c2f1ab82ae4a7683f474b4f6eb162c7.zip |
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.
Diffstat (limited to 'bfd/elflink.c')
-rw-r--r-- | bfd/elflink.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/bfd/elflink.c b/bfd/elflink.c index 122549c594b..72886d57e50 100644 --- a/bfd/elflink.c +++ b/bfd/elflink.c @@ -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; |