relocs_compatible test for gc-sections

I noticed when looking at pr22300 that before calling check_relocs we
have an elf_object_id test (added for pr11933) as well as the
relocs_compatible test.  I believe backend gc_mark_hook and
gc_sweep_hook ought to be protected similarly from being confused by
unexpected relocations (for example, both elf64-ppc.c and elf32-ppc.c
use _bfd_elf_relocs_compatible, so I think it would be possible for
the ppc64 gc_mark_hook to be presented with a ppc32 relocatable
object).

	* elflink.c (elf_gc_sweep): Test elf_object_id in addition to
	relocs_compatible.
	(bfd_elf_gc_sections): Likewise.
This commit is contained in:
Alan Modra 2017-10-30 10:20:29 +10:30
parent d336fa6d82
commit 81742b83e9
2 changed files with 8 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2017-10-30 Alan Modra <amodra@gmail.com>
* elflink.c (elf_gc_sweep): Test elf_object_id in addition to
relocs_compatible.
(bfd_elf_gc_sections): Likewise.
2017-10-30 Alan Modra <amodra@gmail.com>
PR 22269

View File

@ -13034,6 +13034,7 @@ elf_gc_sweep (bfd *abfd, struct bfd_link_info *info)
asection *o;
if (bfd_get_flavour (sub) != bfd_target_elf_flavour
|| elf_object_id (sub) != elf_hash_table_id (elf_hash_table (info))
|| !(*bed->relocs_compatible) (sub->xvec, abfd->xvec))
continue;
o = sub->sections;
@ -13335,6 +13336,7 @@ bfd_elf_gc_sections (bfd *abfd, struct bfd_link_info *info)
asection *o;
if (bfd_get_flavour (sub) != bfd_target_elf_flavour
|| elf_object_id (sub) != elf_hash_table_id (htab)
|| !(*bed->relocs_compatible) (sub->xvec, abfd->xvec))
continue;