PR23980, assertion fail

All of the backend relocate_section functions that interpret reloc
numbers assuming the input file is of the expected type (ie. same as
output or very similar) really ought to be checking input file type.
Not many do, and those that do currently just assert.  This patch
replaces the assertion with a more graceful exit.

	PR 23980
	* elf32-i386.c (elf_i386_relocate_section): Exit with wrong format
	error rather than asserting input file is as expected.
	* elf32-s390.c (elf_s390_relocate_section): Likewise.
	* elf32-sh.c (sh_elf_relocate_section): Likewise.
	* elf32-xtensa.c (elf_xtensa_relocate_section): Likewise.
	* elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
	* elf64-s390.c (elf_s390_relocate_section): Likewise.
	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
	* elf32-ppc.c (ppc_elf_relocate_section): Exit with wrong format
	error if input file is not ppc32 ELF.
This commit is contained in:
Alan Modra 2018-12-18 09:20:06 +10:30
parent c5ebe0ff70
commit 7af5d5c4dd
9 changed files with 55 additions and 7 deletions

View File

@ -1,3 +1,17 @@
2018-12-18 Alan Modra <amodra@gmail.com>
PR 23980
* elf32-i386.c (elf_i386_relocate_section): Exit with wrong format
error rather than asserting input file is as expected.
* elf32-s390.c (elf_s390_relocate_section): Likewise.
* elf32-sh.c (sh_elf_relocate_section): Likewise.
* elf32-xtensa.c (elf_xtensa_relocate_section): Likewise.
* elf64-ppc.c (ppc64_elf_relocate_section): Likewise.
* elf64-s390.c (elf_s390_relocate_section): Likewise.
* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
* elf32-ppc.c (ppc_elf_relocate_section): Exit with wrong format
error if input file is not ppc32 ELF.
2018-12-18 Alan Modra <amodra@gmail.com>
PR 23980

View File

@ -2028,7 +2028,11 @@ elf_i386_relocate_section (bfd *output_bfd,
if (htab == NULL)
return FALSE;
BFD_ASSERT (is_x86_elf (input_bfd, htab));
if (!is_x86_elf (input_bfd, htab))
{
bfd_set_error (bfd_error_wrong_format);
return FALSE;
}
symtab_hdr = &elf_symtab_hdr (input_bfd);
sym_hashes = elf_sym_hashes (input_bfd);

View File

@ -7025,6 +7025,12 @@ ppc_elf_relocate_section (bfd *output_bfd,
(bfd_link_relocatable (info)) ? " (relocatable)" : "");
#endif
if (!is_ppc_elf (input_bfd))
{
bfd_set_error (bfd_error_wrong_format);
return FALSE;
}
got2 = bfd_get_section_by_name (input_bfd, ".got2");
/* Initialize howto table if not already done. */

View File

@ -2165,7 +2165,11 @@ elf_s390_relocate_section (bfd *output_bfd,
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
BFD_ASSERT (is_s390_elf (input_bfd));
if (!is_s390_elf (input_bfd))
{
bfd_set_error (bfd_error_wrong_format);
return FALSE;
}
htab = elf_s390_hash_table (info);
symtab_hdr = &elf_symtab_hdr (input_bfd);

View File

@ -3510,7 +3510,11 @@ sh_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
unsigned isec_segment, got_segment, plt_segment, check_segment[2];
bfd_boolean fdpic_p = FALSE;
BFD_ASSERT (is_sh_elf (input_bfd));
if (!is_sh_elf (input_bfd))
{
bfd_set_error (bfd_error_wrong_format);
return FALSE;
}
htab = sh_elf_hash_table (info);
if (htab != NULL)

View File

@ -2459,7 +2459,11 @@ elf_xtensa_relocate_section (bfd *output_bfd,
if (!xtensa_default_isa)
xtensa_default_isa = xtensa_isa_init (0, 0);
BFD_ASSERT (is_xtensa_elf (input_bfd));
if (!is_xtensa_elf (input_bfd))
{
bfd_set_error (bfd_error_wrong_format);
return FALSE;
}
htab = elf_xtensa_hash_table (info);
if (htab == NULL)

View File

@ -13360,7 +13360,11 @@ ppc64_elf_relocate_section (bfd *output_bfd,
if (input_section->owner == htab->params->stub_bfd)
return TRUE;
BFD_ASSERT (is_ppc64_elf (input_bfd));
if (!is_ppc64_elf (input_bfd))
{
bfd_set_error (bfd_error_wrong_format);
return FALSE;
}
local_got_ents = elf_local_got_ents (input_bfd);
TOCstart = elf_gp (output_bfd);

View File

@ -2119,7 +2119,11 @@ elf_s390_relocate_section (bfd *output_bfd,
Elf_Internal_Rela *rel;
Elf_Internal_Rela *relend;
BFD_ASSERT (is_s390_elf (input_bfd));
if (!is_s390_elf (input_bfd))
{
bfd_set_error (bfd_error_wrong_format);
return FALSE;
}
htab = elf_s390_hash_table (info);
if (htab == NULL)

View File

@ -2389,7 +2389,11 @@ elf_x86_64_relocate_section (bfd *output_bfd,
if (htab == NULL)
return FALSE;
BFD_ASSERT (is_x86_elf (input_bfd, htab));
if (!is_x86_elf (input_bfd, htab))
{
bfd_set_error (bfd_error_wrong_format);
return FALSE;
}
plt_entry_size = htab->plt.plt_entry_size;
symtab_hdr = &elf_symtab_hdr (input_bfd);