1 //===-- SymbolLocatorDebugSymbols.h -----------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLDB_SOURCE_PLUGINS_SYMBOLLOCATOR_DEBUGSYMBOLS_SYMBOLLOCATORDEBUGSYMBOLS_H
10 #define LLDB_SOURCE_PLUGINS_SYMBOLLOCATOR_DEBUGSYMBOLS_SYMBOLLOCATORDEBUGSYMBOLS_H
11 
12 #include "lldb/Symbol/SymbolLocator.h"
13 #include "lldb/lldb-private.h"
14 
15 namespace lldb_private {
16 
17 class SymbolLocatorDebugSymbols : public SymbolLocator {
18 public:
19   SymbolLocatorDebugSymbols();
20 
21   static void Initialize();
22   static void Terminate();
23 
24   static llvm::StringRef GetPluginNameStatic() { return "DebugSymbols"; }
25   static llvm::StringRef GetPluginDescriptionStatic();
26 
27   static lldb_private::SymbolLocator *CreateInstance();
28 
29   /// PluginInterface protocol.
30   /// \{
31   llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
32   /// \}
33 
34   // Locate the executable file given a module specification.
35   //
36   // Locating the file should happen only on the local computer or using the
37   // current computers global settings.
38   static std::optional<ModuleSpec>
39   LocateExecutableObjectFile(const ModuleSpec &module_spec);
40 
41   // Locate the symbol file given a module specification.
42   //
43   // Locating the file should happen only on the local computer or using the
44   // current computers global settings.
45   static std::optional<FileSpec>
46   LocateExecutableSymbolFile(const ModuleSpec &module_spec,
47                              const FileSpecList &default_search_paths);
48 
49   // Locate the object and symbol file given a module specification.
50   //
51   // Locating the file can try to download the file from a corporate build
52   // repository, or using any other means necessary to locate both the
53   // unstripped object file and the debug symbols. The force_lookup argument
54   // controls whether the external program is called unconditionally to find
55   // the symbol file, or if the user's settings are checked to see if they've
56   // enabled the external program before calling.
57   static bool DownloadObjectAndSymbolFile(ModuleSpec &module_spec,
58                                           Status &error, bool force_lookup,
59                                           bool copy_executable);
60 
61   static std::optional<FileSpec>
62   FindSymbolFileInBundle(const FileSpec &dsym_bundle_fspec, const UUID *uuid,
63                          const ArchSpec *arch);
64 };
65 
66 } // namespace lldb_private
67 
68 #endif // LLDB_SOURCE_PLUGINS_SYMBOLLOCATOR_DEBUGSYMBOLS_SYMBOLLOCATORDEBUGSYMBOLS_H
69