[PATCH] D118665: [Debuginfod] Flag-determine debuginfod lookups in llvm-symbolizer.
Daniel Thornburgh via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Feb 2 17:17:05 PST 2022
mysterymath updated this revision to Diff 405500.
mysterymath added a comment.
Update from parent.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D118665/new/
https://reviews.llvm.org/D118665
Files:
llvm/docs/CommandGuide/llvm-symbolizer.rst
llvm/test/tools/llvm-symbolizer/debuginfod.test
llvm/tools/llvm-symbolizer/Opts.td
llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
Index: llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
===================================================================
--- llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
+++ llvm/tools/llvm-symbolizer/llvm-symbolizer.cpp
@@ -20,6 +20,7 @@
#include "llvm/DebugInfo/Symbolize/DIPrinter.h"
#include "llvm/DebugInfo/Symbolize/Symbolize.h"
#include "llvm/Debuginfod/DIFetcher.h"
+#include "llvm/Debuginfod/Debuginfod.h"
#include "llvm/Debuginfod/HTTPClient.h"
#include "llvm/Option/Arg.h"
#include "llvm/Option/ArgList.h"
@@ -261,6 +262,20 @@
return IsAddr2Line ? FunctionNameKind::None : FunctionNameKind::LinkageName;
}
+ExitOnError ExitOnErr;
+
+static bool shouldUseDebuginfodByDefault() {
+ // A debuginfod lookup could succeed if a HTTP client is available and at
+ // least one backing URL is configured.
+ return HTTPClient::isAvailable() &&
+ !ExitOnErr(getDefaultDebuginfodUrls()).empty();
+
+ // A debuginfod lookup could also succeed if something were present in the
+ // cache directory, but it would be surprising to enable debuginfod on this
+ // basis alone. To use existing caches in an "offline" fashion, the debuginfod
+ // flag must be set.
+}
+
int main(int argc, char **argv) {
InitLLVM X(argc, argv);
sys::InitializeCOMRAII COM(sys::COMThreadingMode::MultiThreaded);
@@ -330,10 +345,13 @@
LLVMSymbolizer Symbolizer(Opts);
- // Look up symbols using the debuginfod client.
- Symbolizer.addDIFetcher(std::make_unique<DebuginfodDIFetcher>());
- // The HTTPClient must be initialized for use by the debuginfod client.
- HTTPClient::initialize();
+ if (Args.hasFlag(OPT_debuginfod, OPT_no_debuginfod,
+ shouldUseDebuginfodByDefault())) {
+ // Look up symbols using the debuginfod client.
+ Symbolizer.addDIFetcher(std::make_unique<DebuginfodDIFetcher>());
+ // The HTTPClient must be initialized for use by the debuginfod client.
+ HTTPClient::initialize();
+ }
std::unique_ptr<DIPrinter> Printer;
if (Style == OutputStyle::GNU)
Index: llvm/tools/llvm-symbolizer/Opts.td
===================================================================
--- llvm/tools/llvm-symbolizer/Opts.td
+++ llvm/tools/llvm-symbolizer/Opts.td
@@ -22,6 +22,7 @@
MetaVarName<"<offset>">;
def basenames : Flag<["--"], "basenames">, HelpText<"Strip directory names from paths">;
defm debug_file_directory : Eq<"debug-file-directory", "Path to directory where to look for debug files">, MetaVarName<"<dir>">;
+defm debuginfod : B<"debuginfod", "Use debuginfod to find debug binaries", "Don't use debuginfod to find debug binaries">;
defm default_arch
: Eq<"default-arch", "Default architecture (for multi-arch objects)">,
Group<grp_mach_o>;
Index: llvm/test/tools/llvm-symbolizer/debuginfod.test
===================================================================
--- llvm/test/tools/llvm-symbolizer/debuginfod.test
+++ llvm/test/tools/llvm-symbolizer/debuginfod.test
@@ -23,5 +23,10 @@
# The symbolizer should call the debuginfod client library, which finds the
# debuginfo placed in the cache, enabling symbolization of the address.
RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-symbolizer \
-RUN: --obj=%t/addr.exe 0x40054d | FileCheck %s --check-prefix=FOUND
+RUN: --obj=%t/addr.exe 0x40054d --debuginfod | \
+RUN: FileCheck %s --check-prefix=FOUND
FOUND: {{[/\]+}}tmp{{[/\]+}}x.c:14:0
+
+# The symbolizer shouldn't call the debuginfod library by default with no URLs.
+RUN: env DEBUGINFOD_CACHE_PATH=%t llvm-symbolizer --print-address \
+RUN: --obj=%t/addr.exe 0x40054d | FileCheck %s --check-prefix=NOTFOUND
Index: llvm/docs/CommandGuide/llvm-symbolizer.rst
===================================================================
--- llvm/docs/CommandGuide/llvm-symbolizer.rst
+++ llvm/docs/CommandGuide/llvm-symbolizer.rst
@@ -183,6 +183,13 @@
Print just the file's name without any directories, instead of the
absolute path.
+.. option:: --debuginfod, --no-debuginfod
+
+ Whether or not to try debuginfod lookups for debug binaries. Unless specified,
+ debuginfod is only enabled if libcurl was compiled in (``LLVM_ENABLE_CURL``)
+ and at least one server URL was provided by the environment variable
+ ``DEBUGINFOD_URLS``.
+
.. _llvm-symbolizer-opt-C:
.. option:: --demangle, -C
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D118665.405500.patch
Type: text/x-patch
Size: 4297 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220203/8d21a3b6/attachment.bin>
More information about the llvm-commits
mailing list