Revert "[symbolizer] Change error message if module not found"
authorSerge Pavlov <sepavloff@gmail.com>
Fri, 14 Apr 2023 10:37:25 +0000 (17:37 +0700)
committerSerge Pavlov <sepavloff@gmail.com>
Fri, 14 Apr 2023 10:37:25 +0000 (17:37 +0700)
This reverts commit 75f1f158812dabc03e70697b6b9c272230bce63d.
It caused fail on https://lab.llvm.org/buildbot#builders/37/builds/21461

llvm/include/llvm/DebugInfo/Symbolize/DIPrinter.h
llvm/lib/DebugInfo/Symbolize/DIPrinter.cpp
llvm/lib/DebugInfo/Symbolize/Symbolize.cpp
llvm/test/DebugInfo/Symbolize/ELF/symtab-file2.yaml
llvm/test/DebugInfo/symbolize-missing-file.test
llvm/test/tools/llvm-symbolizer/debuginfod-missing-build-id.test
llvm/test/tools/llvm-symbolizer/output-style-inlined.test
llvm/test/tools/llvm-symbolizer/pdb/missing_pdb.test
llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp

index b89f1da..f799b0a 100644 (file)
@@ -51,7 +51,8 @@ public:
                                    StringRef Command) = 0;
 
   virtual bool printError(const Request &Request,
-                          const ErrorInfoBase &ErrorInfo) = 0;
+                          const ErrorInfoBase &ErrorInfo,
+                          StringRef ErrorBanner) = 0;
 
   virtual void listBegin() = 0;
   virtual void listEnd() = 0;
@@ -65,12 +66,10 @@ struct PrinterConfig {
   int SourceContextLines;
 };
 
-using ErrorHandler = function_ref<void(const ErrorInfoBase &, StringRef)>;
-
 class PlainPrinterBase : public DIPrinter {
 protected:
   raw_ostream &OS;
-  ErrorHandler ErrHandler;
+  raw_ostream &ES;
   PrinterConfig Config;
 
   void print(const DILineInfo &Info, bool Inlined);
@@ -86,8 +85,8 @@ private:
   void printHeader(uint64_t Address);
 
 public:
-  PlainPrinterBase(raw_ostream &OS, ErrorHandler EH, PrinterConfig &Config)
-      : OS(OS), ErrHandler(EH), Config(Config) {}
+  PlainPrinterBase(raw_ostream &OS, raw_ostream &ES, PrinterConfig &Config)
+      : OS(OS), ES(ES), Config(Config) {}
 
   void print(const Request &Request, const DILineInfo &Info) override;
   void print(const Request &Request, const DIInliningInfo &Info) override;
@@ -97,8 +96,8 @@ public:
 
   void printInvalidCommand(const Request &Request, StringRef Command) override;
 
-  bool printError(const Request &Request,
-                  const ErrorInfoBase &ErrorInfo) override;
+  bool printError(const Request &Request, const ErrorInfoBase &ErrorInfo,
+                  StringRef ErrorBanner) override;
 
   void listBegin() override {}
   void listEnd() override {}
@@ -111,8 +110,8 @@ private:
   void printFooter() override;
 
 public:
-  LLVMPrinter(raw_ostream &OS, ErrorHandler EH, PrinterConfig &Config)
-      : PlainPrinterBase(OS, EH, Config) {}
+  LLVMPrinter(raw_ostream &OS, raw_ostream &ES, PrinterConfig &Config)
+      : PlainPrinterBase(OS, ES, Config) {}
 };
 
 class GNUPrinter : public PlainPrinterBase {
@@ -120,9 +119,8 @@ private:
   void printSimpleLocation(StringRef Filename, const DILineInfo &Info) override;
 
 public:
-  GNUPrinter(raw_ostream &OS, ErrorHandler EH, PrinterConfig &Config)
-      : PlainPrinterBase(OS, EH, Config) {}
-
+  GNUPrinter(raw_ostream &OS, raw_ostream &ES, PrinterConfig &Config)
+      : PlainPrinterBase(OS, ES, Config) {}
 };
 
 class JSONPrinter : public DIPrinter {
@@ -149,8 +147,8 @@ public:
 
   void printInvalidCommand(const Request &Request, StringRef Command) override;
 
-  bool printError(const Request &Request,
-                  const ErrorInfoBase &ErrorInfo) override;
+  bool printError(const Request &Request, const ErrorInfoBase &ErrorInfo,
+                  StringRef ErrorBanner) override;
 
   void listBegin() override;
   void listEnd() override;
index f9669b5..cde9b62 100644 (file)
@@ -266,8 +266,11 @@ void PlainPrinterBase::printInvalidCommand(const Request &Request,
 }
 
 bool PlainPrinterBase::printError(const Request &Request,
-                                  const ErrorInfoBase &ErrorInfo) {
-  ErrHandler(ErrorInfo, Request.ModuleName);
+                                  const ErrorInfoBase &ErrorInfo,
+                                  StringRef ErrorBanner) {
+  ES << ErrorBanner;
+  ErrorInfo.log(ES);
+  ES << '\n';
   // Print an empty struct too.
   return true;
 }
@@ -371,11 +374,13 @@ void JSONPrinter::printInvalidCommand(const Request &Request,
                                       StringRef Command) {
   printError(Request,
              StringError("unable to parse arguments: " + Command,
-                         std::make_error_code(std::errc::invalid_argument)));
+                         std::make_error_code(std::errc::invalid_argument)),
+             "");
 }
 
 bool JSONPrinter::printError(const Request &Request,
-                             const ErrorInfoBase &ErrorInfo) {
+                             const ErrorInfoBase &ErrorInfo,
+                             StringRef ErrorBanner) {
   json::Object Json = toJSON(Request, ErrorInfo.message());
   if (ObjectList)
     ObjectList->push_back(std::move(Json));
index ad0ea3c..499ceae 100644 (file)
@@ -632,7 +632,8 @@ LLVMSymbolizer::getOrCreateModuleInfo(ArrayRef<uint8_t> BuildID) {
   std::string Path;
   if (!getOrFindDebugBinary(BuildID, Path)) {
     return createStringError(errc::no_such_file_or_directory,
-                             "could not find build ID");
+                             Twine("could not find build ID '") +
+                                 toHex(BuildID) + "'");
   }
   return getOrCreateModuleInfo(Path);
 }
index 19e52e7..7cb6518 100644 (file)
@@ -49,7 +49,7 @@ Symbols:
 # RUN: yaml2obj --docnum=2 %s -o %t2
 # RUN: llvm-symbolizer --obj=%t2 0 0 2>&1 | FileCheck %s --check-prefix=CHECK2
 
-# CHECK2:      llvm-symbolizer{{.*}}: error: '{{.*}}symtab-file2.yaml.tmp2': st_name (0xffff) is past the end of the string table of size
+# CHECK2:      error reading file: st_name (0xffff) is past the end of the string table of size
 # CHECK2-NEXT: ??
 # CHECK2-NEXT: ??:0:0
 # CHECK2-EMPTY:
index a0d2730..7904289 100644 (file)
@@ -1,3 +1,3 @@
 RUN: llvm-symbolizer --obj=unexisting-file 0x1234 2>&1 | FileCheck -DMSG=%errc_ENOENT %s
 
-CHECK: llvm-symbolizer{{.*}}: error: 'unexisting-file': [[MSG]]
+CHECK: LLVMSymbolizer: error reading file: [[MSG]]
index 76772e3..847cfe7 100644 (file)
@@ -7,4 +7,4 @@ STDOUT: ??:0:0
 STDOUT: ??
 STDOUT: ??:0:0
 
-STDERR-COUNT-2: llvm-symbolizer{{.*}}: error: 'ABAD': could not find build ID
+STDERR-COUNT-2: LLVMSymbolizer: error reading file: could not find build ID 'ABAD'
index 763d908..1b8e3a2 100644 (file)
@@ -37,13 +37,13 @@ RUN:   | FileCheck %s --check-prefix=NOT-EXIST-GNU -DMSG=%errc_ENOENT
 RUN: llvm-symbolizer --output-style=LLVM --obj=%p/Inputs/not.exist 0x1 0x2 --no-inlines 2>&1 \
 RUN:   | FileCheck %s --check-prefix=NOT-EXIST-LLVM -DMSG=%errc_ENOENT
 
-# NOT-EXIST-GNU:      llvm-symbolizer{{.*}}: error: '{{.*}}Inputs/not.exist': [[MSG]]
+# NOT-EXIST-GNU:      LLVMSymbolizer: error reading file: [[MSG]]
 # NOT-EXIST-GNU-NEXT: ??
 # NOT-EXIST-GNU-NEXT: ??:0
 # NOT-EXIST-GNU-NEXT: ??
 # NOT-EXIST-GNU-NEXT: ??:0
 
-# NOT-EXIST-LLVM:       llvm-symbolizer{{.*}}: error: '{{.*}}Inputs/not.exist': [[MSG]]
+# NOT-EXIST-LLVM:       LLVMSymbolizer: error reading file: [[MSG]]
 # NOT-EXIST-LLVM-NEXT:  ??
 # NOT-EXIST-LLVM-NEXT:  ??:0:0
 # NOT-EXIST-LLVM-EMPTY:
index 700260f..7efadb3 100644 (file)
@@ -4,7 +4,7 @@ RUN: FileCheck -DMSG=%errc_ENOENT --check-prefix=ERROR %s < %t.err
 
 llvm-symbolizer should print one error and two unknown line info records.
 
-ERROR: llvm-symbolizer{{.*}}: error: '{{.*}}missing_pdb.pdb': [[MSG]]
+ERROR: LLVMSymbolizer: error reading file: {{.*}}: [[MSG]]
 ERROR-NOT: error reading file
 
 CHECK: ??
index bcbf284..419f998 100644 (file)
@@ -36,7 +36,6 @@
 #include "llvm/Support/InitLLVM.h"
 #include "llvm/Support/Path.h"
 #include "llvm/Support/StringSaver.h"
-#include "llvm/Support/WithColor.h"
 #include "llvm/Support/raw_ostream.h"
 #include <algorithm>
 #include <cstdio>
@@ -84,16 +83,6 @@ public:
 };
 } // namespace
 
-static std::string ToolName;
-
-static void printError(const ErrorInfoBase &EI, StringRef Path) {
-  WithColor::error(errs(), ToolName);
-  if (!EI.isA<FileError>())
-    errs() << "'" << Path << "': ";
-  EI.log(errs());
-  errs() << '\n';
-}
-
 template <typename T>
 static void print(const Request &Request, Expected<T> &ResOrErr,
                   DIPrinter &Printer) {
@@ -107,7 +96,8 @@ static void print(const Request &Request, Expected<T> &ResOrErr,
   bool PrintEmpty = true;
   handleAllErrors(std::move(ResOrErr.takeError()),
                   [&](const ErrorInfoBase &EI) {
-                    PrintEmpty = Printer.printError(Request, EI);
+                    PrintEmpty = Printer.printError(
+                        Request, EI, "LLVMSymbolizer: error reading file: ");
                   });
 
   if (PrintEmpty)
@@ -388,8 +378,7 @@ int main(int argc, char **argv) {
   InitLLVM X(argc, argv);
   sys::InitializeCOMRAII COM(sys::COMThreadingMode::MultiThreaded);
 
-  ToolName = argv[0];
-  bool IsAddr2Line = sys::path::stem(ToolName).contains("addr2line");
+  bool IsAddr2Line = sys::path::stem(argv[0]).contains("addr2line");
   BumpPtrAllocator A;
   StringSaver Saver(A);
   SymbolizerOptTable Tbl;
@@ -472,11 +461,11 @@ int main(int argc, char **argv) {
 
   std::unique_ptr<DIPrinter> Printer;
   if (Style == OutputStyle::GNU)
-    Printer = std::make_unique<GNUPrinter>(outs(), printError, Config);
+    Printer = std::make_unique<GNUPrinter>(outs(), errs(), Config);
   else if (Style == OutputStyle::JSON)
     Printer = std::make_unique<JSONPrinter>(outs(), Config);
   else
-    Printer = std::make_unique<LLVMPrinter>(outs(), printError, Config);
+    Printer = std::make_unique<LLVMPrinter>(outs(), errs(), Config);
 
   std::vector<std::string> InputAddresses = Args.getAllArgValues(OPT_INPUT);
   if (InputAddresses.empty()) {