From 344411bd128fc3dcee45a30792ebf91c0c539869 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Thu, 13 Nov 2014 07:42:11 +0000 Subject: [PATCH] Object, COFF: getRelocationSymbol shouldn't assert lib/Object is supposed to be robust to malformed object files. Don't assert if we don't have a symbol table. I'll try to come up with a test case later. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@221870 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Object/COFFObjectFile.cpp | 2 +- tools/llvm-readobj/COFFDumper.cpp | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/Object/COFFObjectFile.cpp b/lib/Object/COFFObjectFile.cpp index 8d8711c7837..8312fed734c 100644 --- a/lib/Object/COFFObjectFile.cpp +++ b/lib/Object/COFFObjectFile.cpp @@ -996,7 +996,7 @@ symbol_iterator COFFObjectFile::getRelocationSymbol(DataRefImpl Rel) const { else if (SymbolTable32) Ref.p = reinterpret_cast(SymbolTable32 + R->SymbolTableIndex); else - llvm_unreachable("no symbol table pointer!"); + return symbol_end(); return symbol_iterator(SymbolRef(Ref, this)); } diff --git a/tools/llvm-readobj/COFFDumper.cpp b/tools/llvm-readobj/COFFDumper.cpp index 7c12f068a82..bb4315835c2 100644 --- a/tools/llvm-readobj/COFFDumper.cpp +++ b/tools/llvm-readobj/COFFDumper.cpp @@ -800,7 +800,7 @@ void COFFDumper::printRelocation(const SectionRef &Section, if (error(Reloc.getTypeName(RelocName))) return; symbol_iterator Symbol = Reloc.getSymbol(); - if (error(Symbol->getName(SymbolName))) + if (Symbol != Obj->symbol_end() && error(Symbol->getName(SymbolName))) return; if (error(Section.getContents(Contents))) return; @@ -809,12 +809,12 @@ void COFFDumper::printRelocation(const SectionRef &Section, DictScope Group(W, "Relocation"); W.printHex("Offset", Offset); W.printNumber("Type", RelocName, RelocType); - W.printString("Symbol", SymbolName.size() > 0 ? SymbolName : "-"); + W.printString("Symbol", SymbolName.empty() ? "-" : SymbolName); } else { raw_ostream& OS = W.startLine(); OS << W.hex(Offset) << " " << RelocName - << " " << (SymbolName.size() > 0 ? SymbolName : "-") + << " " << (SymbolName.empty() ? "-" : SymbolName) << "\n"; } }