Add --quiet option to llvm-gsymutil to suppress output of warnings.
authorSimon Giesecke <simon.giesecke@snowflake.com>
Thu, 20 May 2021 08:04:33 +0000 (08:04 +0000)
committerSimon Giesecke <simon.giesecke@snowflake.com>
Thu, 27 May 2021 12:36:34 +0000 (12:36 +0000)
Differential Revision: https://reviews.llvm.org/D102829

llvm/include/llvm/DebugInfo/GSYM/GsymCreator.h
llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp
llvm/lib/DebugInfo/GSYM/GsymCreator.cpp
llvm/test/tools/llvm-gsymutil/cmdline.test
llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp

index b04b662..da49b45 100644 (file)
@@ -144,10 +144,10 @@ class GsymCreator {
   AddressRanges Ranges;
   llvm::Optional<uint64_t> BaseAddress;
   bool Finalized = false;
+  bool Quiet;
 
 public:
-
-  GsymCreator();
+  GsymCreator(bool Quiet = false);
 
   /// Save a GSYM file to a stand alone file.
   ///
@@ -289,6 +289,9 @@ public:
   void setBaseAddress(uint64_t Addr) {
     BaseAddress = Addr;
   }
+
+  /// Whether the transformation should be quiet, i.e. not output warnings.
+  bool isQuiet() const { return Quiet; }
 };
 
 } // namespace gsym
index 1e527ab..cdea0e3 100644 (file)
@@ -310,8 +310,10 @@ static void convertFunctionLineTable(raw_ostream &Log, CUInfo &CUI,
       // so break out after printing a warning.
       auto FirstLE = FI.OptLineTable->first();
       if (FirstLE && *FirstLE == LE) {
-        Log << "warning: duplicate line table detected for DIE:\n";
-        Die.dump(Log, 0, DIDumpOptions::getForSingleDIE());
+        if (!Gsym.isQuiet()) {
+          Log << "warning: duplicate line table detected for DIE:\n";
+          Die.dump(Log, 0, DIDumpOptions::getForSingleDIE());
+        }
       } else {
         // Print out (ignore if os == nulls as this is expensive)
         Log << "error: line table has addresses that do not "
@@ -390,11 +392,14 @@ void DwarfTransformer::handleDie(raw_ostream &OS, CUInfo &CUI, DWARFDie Die) {
         // and the debug info wasn't able to be stripped from the DWARF. If
         // the LowPC isn't zero or -1, then we should emit an error.
         if (Range.LowPC != 0) {
-          // Unexpected invalid address, emit an error
-          Log << "warning: DIE has an address range whose start address is "
-              "not in any executable sections (" <<
-              *Gsym.GetValidTextRanges() << ") and will not be processed:\n";
-          Die.dump(Log, 0, DIDumpOptions::getForSingleDIE());
+          if (!Gsym.isQuiet()) {
+            // Unexpected invalid address, emit a warning
+            Log << "warning: DIE has an address range whose start address is "
+                   "not in any executable sections ("
+                << *Gsym.GetValidTextRanges()
+                << ") and will not be processed:\n";
+            Die.dump(Log, 0, DIDumpOptions::getForSingleDIE());
+          }
         }
         break;
       }
index 988caad..5d0f013 100644 (file)
@@ -20,7 +20,8 @@
 using namespace llvm;
 using namespace gsym;
 
-GsymCreator::GsymCreator() : StrTab(StringTableBuilder::ELF) {
+GsymCreator::GsymCreator(bool Quiet)
+    : StrTab(StringTableBuilder::ELF), Quiet(Quiet) {
   insertFile(StringRef());
 }
 
@@ -248,25 +249,30 @@ llvm::Error GsymCreator::finalize(llvm::raw_ostream &OS) {
                                // the latter.
                                return true;
                              } else {
-                               OS << "warning: same address range contains "
-                                     "different debug "
-                                  << "info. Removing:\n"
-                                  << Prev << "\nIn favor of this one:\n"
-                                  << Curr << "\n";
+                               if (!Quiet) {
+                                 OS << "warning: same address range contains "
+                                       "different debug "
+                                    << "info. Removing:\n"
+                                    << Prev << "\nIn favor of this one:\n"
+                                    << Curr << "\n";
+                               }
                                return true;
                              }
                            }
                          } else {
-                           // print warnings about overlaps
-                           OS << "warning: function ranges overlap:\n"
-                              << Prev << "\n"
-                              << Curr << "\n";
+                           if (!Quiet) { // print warnings about overlaps
+                             OS << "warning: function ranges overlap:\n"
+                                << Prev << "\n"
+                                << Curr << "\n";
+                           }
                          }
                        } else if (Prev.Range.size() == 0 &&
                                   Curr.Range.contains(Prev.Range.Start)) {
-                         OS << "warning: removing symbol:\n"
-                            << Prev << "\nKeeping:\n"
-                            << Curr << "\n";
+                         if (!Quiet) {
+                           OS << "warning: removing symbol:\n"
+                              << Prev << "\nKeeping:\n"
+                              << Curr << "\n";
+                         }
                          return true;
                        }
 
index 1f94027..9191309 100644 (file)
@@ -8,6 +8,7 @@ HELP: --arch=<arch>
 HELP: --convert=<path>
 HELP: --num-threads=<n>
 HELP: --out-file=<path>
+HELP: --quiet
 HELP: --verify
 HELP: Generic Options:
 HELP: --help
index 167d34c..1173ae9 100644 (file)
@@ -108,6 +108,10 @@ static opt<unsigned>
                     "number of cores on the current machine."),
                cl::value_desc("n"), cat(ConversionOptions));
 
+static opt<bool>
+    Quiet("quiet", desc("Do not output warnings about the debug information"),
+          cat(ConversionOptions));
+
 static list<uint64_t> LookupAddresses("address",
                                       desc("Lookup an address in a GSYM file"),
                                       cl::value_desc("addr"),
@@ -281,7 +285,7 @@ static llvm::Error handleObjectFile(ObjectFile &Obj,
       NumThreads > 0 ? NumThreads : std::thread::hardware_concurrency();
   auto &OS = outs();
 
-  GsymCreator Gsym;
+  GsymCreator Gsym(Quiet);
 
   // See if we can figure out the base address for a given object file, and if
   // we can, then set the base address to use to this value. This will ease