[llvm] [dsymutil] Add -q/--quiet flag to suppress warnings (PR #91658)
via llvm-commits
llvm-commits at lists.llvm.org
Thu May 9 14:28:18 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-debuginfo
Author: Jonas Devlieghere (JDevlieghere)
<details>
<summary>Changes</summary>
Add a -q/--quiet flag to suppress dsymutil output. For now the flag is limited to dsymutil, though there might be other places in the DWARF linker that could be conditionalized by this flag.
The motivation is having a way to silence the "no debug symbols in executable" warning. This is useful when we want to generate a dSYM for a binary not containing debug symbols, but still want a dSYM that can be indexed by spotlight.
---
Full diff: https://github.com/llvm/llvm-project/pull/91658.diff
6 Files Affected:
- (modified) llvm/docs/CommandGuide/dsymutil.rst (+4)
- (modified) llvm/test/tools/dsymutil/ARM/empty-map.test (+2)
- (modified) llvm/test/tools/dsymutil/cmdline.test (+4)
- (modified) llvm/tools/dsymutil/LinkUtils.h (+3)
- (modified) llvm/tools/dsymutil/Options.td (+8)
- (modified) llvm/tools/dsymutil/dsymutil.cpp (+30-15)
``````````diff
diff --git a/llvm/docs/CommandGuide/dsymutil.rst b/llvm/docs/CommandGuide/dsymutil.rst
index e3f2f33224b01..6026e2f534ed7 100644
--- a/llvm/docs/CommandGuide/dsymutil.rst
+++ b/llvm/docs/CommandGuide/dsymutil.rst
@@ -115,6 +115,10 @@ OPTIONS
Specifies an alternate ``path`` to place the dSYM bundle. The default dSYM
bundle path is created by appending ``.dSYM`` to the executable name.
+.. option:: -q, --quiet
+
+ Enable quiet mode and limit output.
+
.. option:: --remarks-drop-without-debug
Drop remarks without valid debug locations. Without this flags, all remarks are kept.
diff --git a/llvm/test/tools/dsymutil/ARM/empty-map.test b/llvm/test/tools/dsymutil/ARM/empty-map.test
index 40ffa8b1cc512..eeca28273a3f5 100644
--- a/llvm/test/tools/dsymutil/ARM/empty-map.test
+++ b/llvm/test/tools/dsymutil/ARM/empty-map.test
@@ -1,4 +1,5 @@
# RUN: dsymutil -f -oso-prepend-path=%p/../Inputs -y %s -o - 2>&1 | FileCheck %s
+# RUN: dsymutil -q -f -oso-prepend-path=%p/../Inputs -y %s -o - 2>&1 | FileCheck %s --check-prefix QUIET
# RUN: dsymutil --linker parallel -f -oso-prepend-path=%p/../Inputs -y %s -o - 2>&1 | FileCheck %s
@@ -7,3 +8,4 @@ triple: 'thumbv7-apple-darwin'
...
# CHECK: warning: no debug symbols in executable (-arch armv7)
+# QUIET-NOT: no debug symbols in executable
diff --git a/llvm/test/tools/dsymutil/cmdline.test b/llvm/test/tools/dsymutil/cmdline.test
index 814252b6e2306..6c67ac7cd7238 100644
--- a/llvm/test/tools/dsymutil/cmdline.test
+++ b/llvm/test/tools/dsymutil/cmdline.test
@@ -23,6 +23,7 @@ CHECK: -object-prefix-map <prefix=remapped>
CHECK: -oso-prepend-path <path>
CHECK: -out <filename>
CHECK: {{-o <filename>}}
+CHECK: -quiet
CHECK: -remarks-drop-without-debug
CHECK: -remarks-output-format <format>
CHECK: -remarks-prepend-path <path>
@@ -46,3 +47,6 @@ NOINPUT: error: no input files specified
RUN: dsymutil -bogus -help 2>&1 | FileCheck --check-prefix=BOGUS %s
BOGUS: warning: ignoring unknown option: -bogus
+
+RUN: not dsymutil --quiet --verbose 2>&1 | FileCheck --check-prefix=CONFLICT %s
+CONFLICT: error: --quiet and --verbose cannot be specified together
diff --git a/llvm/tools/dsymutil/LinkUtils.h b/llvm/tools/dsymutil/LinkUtils.h
index 6aa0b847eebd6..ad5515a04333e 100644
--- a/llvm/tools/dsymutil/LinkUtils.h
+++ b/llvm/tools/dsymutil/LinkUtils.h
@@ -38,6 +38,9 @@ struct LinkOptions {
/// Verbosity
bool Verbose = false;
+ /// Quiet
+ bool Quiet = false;
+
/// Statistics
bool Statistics = false;
diff --git a/llvm/tools/dsymutil/Options.td b/llvm/tools/dsymutil/Options.td
index d8cec0cb2c410..b72ae1909a727 100644
--- a/llvm/tools/dsymutil/Options.td
+++ b/llvm/tools/dsymutil/Options.td
@@ -24,6 +24,14 @@ def verbose: F<"verbose">,
HelpText<"Enable verbose mode.">,
Group<grp_general>;
+def quiet: F<"quiet">,
+ HelpText<"Enable quiet mode.">,
+ Group<grp_general>;
+def: Flag<["-"], "q">,
+ Alias<quiet>,
+ HelpText<"Alias for --quiet">,
+ Group<grp_general>;
+
def keep_func_for_static: F<"keep-function-for-static">,
HelpText<"Make a static variable keep the enclosing function even if it would have been omitted otherwise.">,
Group<grp_general>;
diff --git a/llvm/tools/dsymutil/dsymutil.cpp b/llvm/tools/dsymutil/dsymutil.cpp
index bc968b6387b65..728f2ed3e62ac 100644
--- a/llvm/tools/dsymutil/dsymutil.cpp
+++ b/llvm/tools/dsymutil/dsymutil.cpp
@@ -169,6 +169,12 @@ static Expected<std::vector<std::string>> getInputs(opt::InputArgList &Args,
// Verify that the given combination of options makes sense.
static Error verifyOptions(const DsymutilOptions &Options) {
+ if (Options.LinkOpts.Verbose && Options.LinkOpts.Quiet) {
+ return make_error<StringError>(
+ "--quiet and --verbose cannot be specified together",
+ errc::invalid_argument);
+ }
+
if (Options.InputFiles.empty()) {
return make_error<StringError>("no input files specified",
errc::invalid_argument);
@@ -311,6 +317,7 @@ static Expected<DsymutilOptions> getOptions(opt::InputArgList &Args) {
Options.LinkOpts.NoTimestamp = Args.hasArg(OPT_no_swiftmodule_timestamp);
Options.LinkOpts.Update = Args.hasArg(OPT_update);
Options.LinkOpts.Verbose = Args.hasArg(OPT_verbose);
+ Options.LinkOpts.Quiet = Args.hasArg(OPT_quiet);
Options.LinkOpts.Statistics = Args.hasArg(OPT_statistics);
Options.LinkOpts.Fat64 = Args.hasArg(OPT_fat64);
Options.LinkOpts.KeepFunctionForStatic =
@@ -483,16 +490,20 @@ static bool verifyOutput(StringRef OutputFile, StringRef Arch,
DsymutilOptions Options, std::mutex &Mutex) {
if (OutputFile == "-") {
- std::lock_guard<std::mutex> Guard(Mutex);
- WithColor::warning() << "verification skipped for " << Arch
- << " because writing to stdout.\n";
+ if (!Options.LinkOpts.Quiet) {
+ std::lock_guard<std::mutex> Guard(Mutex);
+ WithColor::warning() << "verification skipped for " << Arch
+ << " because writing to stdout.\n";
+ }
return true;
}
if (Options.LinkOpts.NoOutput) {
- std::lock_guard<std::mutex> Guard(Mutex);
- WithColor::warning() << "verification skipped for " << Arch
- << " because --no-output was passed.\n";
+ if (!Options.LinkOpts.Quiet) {
+ std::lock_guard<std::mutex> Guard(Mutex);
+ WithColor::warning() << "verification skipped for " << Arch
+ << " because --no-output was passed.\n";
+ }
return true;
}
@@ -507,10 +518,12 @@ static bool verifyOutput(StringRef OutputFile, StringRef Arch,
if (auto *Obj = dyn_cast<MachOObjectFile>(&Binary)) {
std::unique_ptr<DWARFContext> DICtx = DWARFContext::create(*Obj);
if (DICtx->getMaxVersion() > 5) {
- std::lock_guard<std::mutex> Guard(Mutex);
- WithColor::warning()
- << "verification skipped for " << Arch
- << " because DWARF standard greater than v5 is not supported yet.\n";
+ if (!Options.LinkOpts.Quiet) {
+ std::lock_guard<std::mutex> Guard(Mutex);
+ WithColor::warning() << "verification skipped for " << Arch
+ << " because DWARF standard greater than v5 is "
+ "not supported yet.\n";
+ }
return true;
}
@@ -751,11 +764,13 @@ int dsymutil_main(int argc, char **argv, const llvm::ToolContext &) {
continue;
if (Map->begin() == Map->end()) {
- std::lock_guard<std::mutex> Guard(ErrorHandlerMutex);
- WithColor::warning()
- << "no debug symbols in executable (-arch "
- << MachOUtils::getArchName(Map->getTriple().getArchName())
- << ")\n";
+ if (!Options.LinkOpts.Quiet) {
+ std::lock_guard<std::mutex> Guard(ErrorHandlerMutex);
+ WithColor::warning()
+ << "no debug symbols in executable (-arch "
+ << MachOUtils::getArchName(Map->getTriple().getArchName())
+ << ")\n";
+ }
}
// Using a std::shared_ptr rather than std::unique_ptr because move-only
``````````
</details>
https://github.com/llvm/llvm-project/pull/91658
More information about the llvm-commits
mailing list