diff options
Diffstat (limited to 'llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp')
-rw-r--r-- | llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp index 7b49ec2..a9e9830 100644 --- a/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp +++ b/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp @@ -478,12 +478,15 @@ int main(int argc, char **argv) { else Printer = std::make_unique<LLVMPrinter>(outs(), printError, Config); - StringRef InputFile = Args.getLastArgValue(OPT_obj_EQ); - if (!InputFile.empty() && IsAddr2Line) { - Error Status = Symbolizer.checkFileExists(InputFile); - if (Status) { - handleAllErrors(std::move(Status), [&](const ErrorInfoBase &EI) { - printError(EI, InputFile); + // When an input file is specified, exit immediately if the file cannot be + // read. If getOrCreateModuleInfo succeeds, symbolizeInput will reuse the + // cached file handle. + if (auto *Arg = Args.getLastArg(OPT_obj_EQ); Arg && IsAddr2Line) { + auto Status = Symbolizer.getOrCreateModuleInfo(Arg->getValue()); + if (!Status) { + Request SymRequest = {Arg->getValue(), 0}; + handleAllErrors(Status.takeError(), [&](const ErrorInfoBase &EI) { + Printer->printError(SymRequest, EI); }); return EXIT_FAILURE; } |