diff options
author | Alexey Samsonov <vonosmas@gmail.com> | 2015-11-04 00:30:24 +0000 |
---|---|---|
committer | Alexey Samsonov <vonosmas@gmail.com> | 2015-11-04 00:30:24 +0000 |
commit | 884adda0fb83dc15ec4baefcc85decbff26ca3fd (patch) | |
tree | c54d4f1e59a1720967b7b1a73d92b1b528c029fe /llvm/tools | |
parent | b0742319fcc153c5922e7b4eeb45fa5b2c45b1b5 (diff) | |
download | bcm5719-llvm-884adda0fb83dc15ec4baefcc85decbff26ca3fd.tar.gz bcm5719-llvm-884adda0fb83dc15ec4baefcc85decbff26ca3fd.zip |
[LLVMSymbolize] Properly propagate object parsing errors from the library.
llvm-svn: 252021
Diffstat (limited to 'llvm/tools')
-rw-r--r-- | llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp index 99afa6db53a..d0ef51e6f17 100644 --- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp +++ b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp @@ -78,6 +78,13 @@ static cl::opt<bool> ClPrintAddress("print-address", cl::init(false), cl::desc("Show address before line information")); +static bool error(std::error_code ec) { + if (!ec) + return false; + errs() << "LLVMSymbolizer: error reading file: " << ec.message() << ".\n"; + return true; +} + static bool parseCommand(bool &IsData, std::string &ModuleName, uint64_t &ModuleOffset) { const char *kDataCmd = "DATA "; @@ -158,11 +165,15 @@ int main(int argc, char **argv) { outs() << "\n"; } if (IsData) { - Printer << Symbolizer.symbolizeData(ModuleName, ModuleOffset); + auto ResOrErr = Symbolizer.symbolizeData(ModuleName, ModuleOffset); + Printer << (error(ResOrErr.getError()) ? DIGlobal() : ResOrErr.get()); } else if (ClPrintInlining) { - Printer << Symbolizer.symbolizeInlinedCode(ModuleName, ModuleOffset); + auto ResOrErr = Symbolizer.symbolizeInlinedCode(ModuleName, ModuleOffset); + Printer << (error(ResOrErr.getError()) ? DIInliningInfo() + : ResOrErr.get()); } else { - Printer << Symbolizer.symbolizeCode(ModuleName, ModuleOffset); + auto ResOrErr = Symbolizer.symbolizeCode(ModuleName, ModuleOffset); + Printer << (error(ResOrErr.getError()) ? DILineInfo() : ResOrErr.get()); } outs() << "\n"; outs().flush(); |