diff --git a/llvm/include/llvm/DebugInfo/GSYM/GsymCreator.h b/llvm/include/llvm/DebugInfo/GSYM/GsymCreator.h --- a/llvm/include/llvm/DebugInfo/GSYM/GsymCreator.h +++ b/llvm/include/llvm/DebugInfo/GSYM/GsymCreator.h @@ -144,10 +144,11 @@ AddressRanges Ranges; llvm::Optional BaseAddress; bool Finalized = false; + bool Quiet; public: - GsymCreator(); + GsymCreator(bool Quiet = false); /// Save a GSYM file to a stand alone file. /// @@ -289,6 +290,9 @@ 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 diff --git a/llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp b/llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp --- a/llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp +++ b/llvm/lib/DebugInfo/GSYM/DwarfTransformer.cpp @@ -310,8 +310,10 @@ // 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 @@ // 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; } diff --git a/llvm/lib/DebugInfo/GSYM/GsymCreator.cpp b/llvm/lib/DebugInfo/GSYM/GsymCreator.cpp --- a/llvm/lib/DebugInfo/GSYM/GsymCreator.cpp +++ b/llvm/lib/DebugInfo/GSYM/GsymCreator.cpp @@ -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 @@ // 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; } diff --git a/llvm/test/tools/llvm-gsymutil/cmdline.test b/llvm/test/tools/llvm-gsymutil/cmdline.test --- a/llvm/test/tools/llvm-gsymutil/cmdline.test +++ b/llvm/test/tools/llvm-gsymutil/cmdline.test @@ -9,6 +9,7 @@ HELP: --num-threads= HELP: --out-file= HELP: --verify +HELP: --quiet HELP: Generic Options: HELP: --help HELP: --version diff --git a/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp b/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp --- a/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp +++ b/llvm/tools/llvm-gsymutil/llvm-gsymutil.cpp @@ -108,6 +108,10 @@ "number of cores on the current machine."), cl::value_desc("n"), cat(ConversionOptions)); +static opt + Quiet("quiet", desc("Do not output warnings about the debug information"), + cat(ConversionOptions)); + static list LookupAddresses("address", desc("Lookup an address in a GSYM file"), cl::value_desc("addr"), @@ -281,7 +285,7 @@ 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