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:
parent
c5ebe0ff70
commit
7af5d5c4dd
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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. */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue