I've plumbed the LLVM DebugInfoD client into LLDB, and added automatic downloading of DWP files to the SymbolFileDWARF.cpp plugin. If you have DEBUGINFOD_URLS set to a space delimited set of web servers, LLDB will try to use them as a last resort when searching for DWP files. If you do *not* have that environment variable set, nothing should be changed. There's also a setting, per @clayborg 's suggestion, that will override the environment variable, or can be used instead of the environment variable. The setting is why I also needed to add an API to the llvm-debuginfod library ### Test Plan: Suggestions are welcome here. I should probably have some positive and negative tests, but I wanted to get the diff up for people who have a clue what they're doing to rip it to pieces before spending too much time validating the initial implementation. --------- Co-authored-by: Kevin Frei <freik@meta.com> Co-authored-by: Alex Langford <nirvashtzero@gmail.com>
55 lines
1.9 KiB
C++
55 lines
1.9 KiB
C++
//===-- SymbolLocatorDebuginfod.h -------------------------------*- C++ -*-===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLDB_SOURCE_PLUGINS_SYMBOLLOCATOR_DEBUGINFOD_SYMBOLLOCATORDEBUGINFOD_H
|
|
#define LLDB_SOURCE_PLUGINS_SYMBOLLOCATOR_DEBUGINFOD_SYMBOLLOCATORDEBUGINFOD_H
|
|
|
|
#include "lldb/Core/Debugger.h"
|
|
#include "lldb/Symbol/SymbolLocator.h"
|
|
#include "lldb/lldb-private.h"
|
|
|
|
namespace lldb_private {
|
|
|
|
class SymbolLocatorDebuginfod : public SymbolLocator {
|
|
public:
|
|
SymbolLocatorDebuginfod();
|
|
|
|
static void Initialize();
|
|
static void Terminate();
|
|
static void DebuggerInitialize(Debugger &debugger);
|
|
|
|
static llvm::StringRef GetPluginNameStatic() { return "debuginfod"; }
|
|
static llvm::StringRef GetPluginDescriptionStatic();
|
|
|
|
static lldb_private::SymbolLocator *CreateInstance();
|
|
|
|
/// PluginInterface protocol.
|
|
/// \{
|
|
llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
|
|
/// \}
|
|
|
|
// Locate the executable file given a module specification.
|
|
//
|
|
// Locating the file should happen only on the local computer or using the
|
|
// current computers global settings.
|
|
static std::optional<ModuleSpec>
|
|
LocateExecutableObjectFile(const ModuleSpec &module_spec);
|
|
|
|
// Locate the symbol file given a module specification.
|
|
//
|
|
// Locating the file should happen only on the local computer or using the
|
|
// current computers global settings.
|
|
static std::optional<FileSpec>
|
|
LocateExecutableSymbolFile(const ModuleSpec &module_spec,
|
|
const FileSpecList &default_search_paths);
|
|
};
|
|
|
|
} // namespace lldb_private
|
|
|
|
#endif // LLDB_SOURCE_PLUGINS_SYMBOLLOCATOR_DEBUGINFOD_SYMBOLLOCATORDEBUGINFOD_H
|