aboutsummaryrefslogtreecommitdiff
path: root/llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp')
-rw-r--r--llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp15
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;
}