Avoid SEGFAULT if a requested symbol section is absent.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 21 Sep 2015 19:17:18 +0000 (19:17 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 21 Sep 2015 19:17:18 +0000 (19:17 +0000)
Patch by Igor Kudrin!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@248194 91177308-0d34-0410-b5e6-96231b3b80d8

test/Object/readobj-absent.test [new file with mode: 0644]
tools/llvm-readobj/ELFDumper.cpp

diff --git a/test/Object/readobj-absent.test b/test/Object/readobj-absent.test
new file mode 100644 (file)
index 0000000..0968f3c
--- /dev/null
@@ -0,0 +1,2 @@
+// Don't crash if required information is absent
+RUN: llvm-readobj -dyn-symbols %p/Inputs/trivial-object-test.elf-x86-64
index 31e200e436c6f46d08b15c059ba5e0b979d33f74..9931163440347b777fcd924ec3a3cadcd5532c9d 100644 (file)
@@ -1152,6 +1152,8 @@ void ELFDumper<ELFT>::printRelocation(Elf_Rela Rel, const Elf_Shdr *SymTab) {
 template<class ELFT>
 void ELFDumper<ELFT>::printSymbolsHelper(bool IsDynamic) {
   const Elf_Shdr *Symtab = (IsDynamic) ? DotDynSymSec : DotSymtabSec;
+  if (!Symtab)
+    return;
   ErrorOr<StringRef> StrTableOrErr = Obj->getStringTableForSymtab(*Symtab);
   error(StrTableOrErr.getError());
   StringRef StrTable = *StrTableOrErr;