summaryrefslogtreecommitdiffstats
path: root/llvm/tools
diff options
context:
space:
mode:
authorAlexey Samsonov <vonosmas@gmail.com>2015-11-04 00:30:24 +0000
committerAlexey Samsonov <vonosmas@gmail.com>2015-11-04 00:30:24 +0000
commit884adda0fb83dc15ec4baefcc85decbff26ca3fd (patch)
treec54d4f1e59a1720967b7b1a73d92b1b528c029fe /llvm/tools
parentb0742319fcc153c5922e7b4eeb45fa5b2c45b1b5 (diff)
downloadbcm5719-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.cpp17
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();
OpenPOWER on IntegriCloud