PR27719, lang_mark_undefineds trashes memory
authorAlan Modra <amodra@gmail.com>
Sun, 11 Apr 2021 14:04:21 +0000 (23:34 +0930)
committerAlan Modra <amodra@gmail.com>
Mon, 12 Apr 2021 02:27:03 +0000 (11:57 +0930)
commitfc304b889106f6d1bd720e969b95615992bf1961
treeaf9f6df2ab9282409587e4b8ba784e813e2c6f5c
parente601909a3287bf541c6a7d82214bb387d2c76d82
PR27719, lang_mark_undefineds trashes memory

It's not enough to test that the output is ELF before casting
bfd_link_hash_entry to elf_link_hash_entry.  Some ELF targets (d30v,
dlx, pj, s12z, xgate) use the generic linker support in bfd/linker.c
and thus their symbols are of type generic_link_hash_entry.

Not all of the places this patch touches can result in wrong accesses,
but I thought it worth ensuring that all occurrences of
elf_link_hash_entry in ld/ were obviously correct.

PR 27719
* ldlang.c (lang_mark_undefineds, undef_start_stop): Test that
the symbol hash table is the correct type before accessing
elf_link_hash_entry symbols.
* plugin.c (is_visible_from_outside): Likewise.
* emultempl/armelf.em (ld${EMULATION_NAME}_finish): Likewise.
* emultempl/solaris2.em (elf_solaris2_before_allocation): Likewise.
ld/ChangeLog
ld/emultempl/armelf.em
ld/emultempl/solaris2.em
ld/ldlang.c
ld/plugin.c