From 16ad13eca4a18139cd1dec214ec83fdc7c47ffda Mon Sep 17 00:00:00 2001 From: Nick Clifton Date: Tue, 25 Aug 2015 17:48:20 +0100 Subject: Replace assertions with warning messages about ELF binaries containing multiple symbol tables. PR binutils/18854 * elf.c (bfd_section_from_shdr): Replace assertions with warnings about multiple symbol tables. --- bfd/elf.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'bfd/elf.c') diff --git a/bfd/elf.c b/bfd/elf.c index f8e1295..81cc1db 100644 --- a/bfd/elf.c +++ b/bfd/elf.c @@ -1833,7 +1833,15 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) goto success; } - BFD_ASSERT (elf_onesymtab (abfd) == 0); + /* PR 18854: A binary might contain more than one symbol table. + Unusual, but possible. Warn, but continue. */ + if (elf_onesymtab (abfd) != 0) + { + (*_bfd_error_handler) + (_("%B: warning: multiple symbol tables detected - ignoring the table in section %u"), + abfd, shindex); + goto success; + } elf_onesymtab (abfd) = shindex; elf_tdata (abfd)->symtab_hdr = *hdr; elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->symtab_hdr; @@ -1898,7 +1906,15 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex) goto success; } - BFD_ASSERT (elf_dynsymtab (abfd) == 0); + /* PR 18854: A binary might contain more than one dynamic symbol table. + Unusual, but possible. Warn, but continue. */ + if (elf_dynsymtab (abfd) != 0) + { + (*_bfd_error_handler) + (_("%B: warning: multiple dynamic symbol tables detected - ignoring the table in section %u"), + abfd, shindex); + goto success; + } elf_dynsymtab (abfd) = shindex; elf_tdata (abfd)->dynsymtab_hdr = *hdr; elf_elfsections (abfd)[shindex] = hdr = &elf_tdata (abfd)->dynsymtab_hdr; -- cgit v1.1