Replace assertions with warning messages about ELF binaries containing multiple symbo...
authorNick Clifton <nickc@redhat.com>
Tue, 25 Aug 2015 16:48:20 +0000 (17:48 +0100)
committerNick Clifton <nickc@redhat.com>
Tue, 25 Aug 2015 16:48:20 +0000 (17:48 +0100)
PR binutils/18854
* elf.c (bfd_section_from_shdr): Replace assertions with warnings
about multiple symbol tables.

bfd/ChangeLog
bfd/elf.c

index d7523187a05a26c9e4a81462cac366a273cca194..18a5cd0e243d0ced4051122ffa34e32af05cee3d 100644 (file)
@@ -1,3 +1,9 @@
+2015-08-25  Nick Clifton  <nickc@redhat.com>
+
+       PR binutils/18854
+       * elf.c (bfd_section_from_shdr): Replace assertions with warnings
+       about multiple symbol tables.
+
 2015-08-25  Renlin Li  <renlin.li@arm.com>
 
        * reloc.c (BFD_RELOC_AARCH64_LD64_GOTOFF_LO15): Use LP64 instead of
index f8e12958452bb2a7475c1dd258212431330f1d49..81cc1db5a2c5d37c3874df3a44656ce0ce3b7b6f 100644 (file)
--- 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;