diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2014-11-13 07:42:11 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2014-11-13 07:42:11 +0000 |
| commit | 1f80b0a8e0d8be11ec14c6395a1f6ea49ee7e791 (patch) | |
| tree | 7cc9258201573d772354200248eef78f817972a6 | |
| parent | 2314b3defa325bab5b919e15ace61fecd6000a57 (diff) | |
| download | bcm5719-llvm-1f80b0a8e0d8be11ec14c6395a1f6ea49ee7e791.tar.gz bcm5719-llvm-1f80b0a8e0d8be11ec14c6395a1f6ea49ee7e791.zip | |
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.
llvm-svn: 221870
| -rw-r--r-- | llvm/lib/Object/COFFObjectFile.cpp | 2 | ||||
| -rw-r--r-- | llvm/tools/llvm-readobj/COFFDumper.cpp | 6 |
2 files changed, 4 insertions, 4 deletions
diff --git a/llvm/lib/Object/COFFObjectFile.cpp b/llvm/lib/Object/COFFObjectFile.cpp index 8d8711c7837..8312fed734c 100644 --- a/llvm/lib/Object/COFFObjectFile.cpp +++ b/llvm/lib/Object/COFFObjectFile.cpp @@ -996,7 +996,7 @@ symbol_iterator COFFObjectFile::getRelocationSymbol(DataRefImpl Rel) const { else if (SymbolTable32) Ref.p = reinterpret_cast<uintptr_t>(SymbolTable32 + R->SymbolTableIndex); else - llvm_unreachable("no symbol table pointer!"); + return symbol_end(); return symbol_iterator(SymbolRef(Ref, this)); } diff --git a/llvm/tools/llvm-readobj/COFFDumper.cpp b/llvm/tools/llvm-readobj/COFFDumper.cpp index 7c12f068a82..bb4315835c2 100644 --- a/llvm/tools/llvm-readobj/COFFDumper.cpp +++ b/llvm/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"; } } |

