xref: /openbsd-src/gnu/llvm/lldb/source/Plugins/SymbolFile/DWARF/DWARFIndex.h (revision f6aab3d83b51b91c24247ad2c2573574de475a82)
1061da546Spatrick //===-- DWARFIndex.h -------------------------------------------*- C++ -*-===//
2061da546Spatrick //
3061da546Spatrick // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4061da546Spatrick // See https://llvm.org/LICENSE.txt for license information.
5061da546Spatrick // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6061da546Spatrick //
7061da546Spatrick //===----------------------------------------------------------------------===//
8061da546Spatrick 
9dda28197Spatrick #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFINDEX_H
10dda28197Spatrick #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFINDEX_H
11061da546Spatrick 
12061da546Spatrick #include "Plugins/SymbolFile/DWARF/DIERef.h"
13061da546Spatrick #include "Plugins/SymbolFile/DWARF/DWARFDIE.h"
14061da546Spatrick #include "Plugins/SymbolFile/DWARF/DWARFFormValue.h"
15061da546Spatrick 
16*f6aab3d8Srobert #include "lldb/Core/Module.h"
17*f6aab3d8Srobert #include "lldb/Target/Statistics.h"
18*f6aab3d8Srobert 
19061da546Spatrick class DWARFDeclContext;
20061da546Spatrick class DWARFDIE;
21061da546Spatrick 
22061da546Spatrick namespace lldb_private {
23061da546Spatrick class DWARFIndex {
24061da546Spatrick public:
DWARFIndex(Module & module)25061da546Spatrick   DWARFIndex(Module &module) : m_module(module) {}
26061da546Spatrick   virtual ~DWARFIndex();
27061da546Spatrick 
28061da546Spatrick   virtual void Preload() = 0;
29061da546Spatrick 
30061da546Spatrick   /// Finds global variables with the given base name. Any additional filtering
31061da546Spatrick   /// (e.g., to only retrieve variables from a given context) should be done by
32061da546Spatrick   /// the consumer.
33dda28197Spatrick   virtual void
34dda28197Spatrick   GetGlobalVariables(ConstString basename,
35dda28197Spatrick                      llvm::function_ref<bool(DWARFDIE die)> callback) = 0;
36061da546Spatrick 
37dda28197Spatrick   virtual void
38dda28197Spatrick   GetGlobalVariables(const RegularExpression &regex,
39dda28197Spatrick                      llvm::function_ref<bool(DWARFDIE die)> callback) = 0;
40*f6aab3d8Srobert   /// \a cu must be the skeleton unit if possible, not GetNonSkeletonUnit().
41dda28197Spatrick   virtual void
42*f6aab3d8Srobert   GetGlobalVariables(DWARFUnit &cu,
43dda28197Spatrick                      llvm::function_ref<bool(DWARFDIE die)> callback) = 0;
44dda28197Spatrick   virtual void
45dda28197Spatrick   GetObjCMethods(ConstString class_name,
46dda28197Spatrick                  llvm::function_ref<bool(DWARFDIE die)> callback) = 0;
47dda28197Spatrick   virtual void
48dda28197Spatrick   GetCompleteObjCClass(ConstString class_name, bool must_be_implementation,
49dda28197Spatrick                        llvm::function_ref<bool(DWARFDIE die)> callback) = 0;
50dda28197Spatrick   virtual void GetTypes(ConstString name,
51dda28197Spatrick                         llvm::function_ref<bool(DWARFDIE die)> callback) = 0;
52dda28197Spatrick   virtual void GetTypes(const DWARFDeclContext &context,
53dda28197Spatrick                         llvm::function_ref<bool(DWARFDIE die)> callback) = 0;
54dda28197Spatrick   virtual void
55dda28197Spatrick   GetNamespaces(ConstString name,
56dda28197Spatrick                 llvm::function_ref<bool(DWARFDIE die)> callback) = 0;
57dda28197Spatrick   virtual void
58*f6aab3d8Srobert   GetFunctions(const Module::LookupInfo &lookup_info, SymbolFileDWARF &dwarf,
59061da546Spatrick                const CompilerDeclContext &parent_decl_ctx,
60dda28197Spatrick                llvm::function_ref<bool(DWARFDIE die)> callback) = 0;
61dda28197Spatrick   virtual void
62dda28197Spatrick   GetFunctions(const RegularExpression &regex,
63dda28197Spatrick                llvm::function_ref<bool(DWARFDIE die)> callback) = 0;
64061da546Spatrick 
65061da546Spatrick   virtual void Dump(Stream &s) = 0;
66061da546Spatrick 
GetIndexTime()67*f6aab3d8Srobert   StatsDuration::Duration GetIndexTime() { return m_index_time; }
68*f6aab3d8Srobert 
69061da546Spatrick protected:
70061da546Spatrick   Module &m_module;
71*f6aab3d8Srobert   StatsDuration m_index_time;
72061da546Spatrick 
73061da546Spatrick   /// Helper function implementing common logic for processing function dies. If
74061da546Spatrick   /// the function given by "ref" matches search criteria given by
75061da546Spatrick   /// "parent_decl_ctx" and "name_type_mask", it is inserted into the "dies"
76061da546Spatrick   /// vector.
77*f6aab3d8Srobert   bool ProcessFunctionDIE(const Module::LookupInfo &lookup_info, DIERef ref,
78061da546Spatrick                           SymbolFileDWARF &dwarf,
79061da546Spatrick                           const CompilerDeclContext &parent_decl_ctx,
80dda28197Spatrick                           llvm::function_ref<bool(DWARFDIE die)> callback);
81dda28197Spatrick 
82dda28197Spatrick   class DIERefCallbackImpl {
83dda28197Spatrick   public:
84dda28197Spatrick     DIERefCallbackImpl(const DWARFIndex &index,
85dda28197Spatrick                        llvm::function_ref<bool(DWARFDIE die)> callback,
86dda28197Spatrick                        llvm::StringRef name);
87dda28197Spatrick     bool operator()(DIERef ref) const;
88dda28197Spatrick 
89dda28197Spatrick   private:
90dda28197Spatrick     const DWARFIndex &m_index;
91dda28197Spatrick     SymbolFileDWARF &m_dwarf;
92dda28197Spatrick     const llvm::function_ref<bool(DWARFDIE die)> m_callback;
93dda28197Spatrick     const llvm::StringRef m_name;
94dda28197Spatrick   };
95dda28197Spatrick   DIERefCallbackImpl
96dda28197Spatrick   DIERefCallback(llvm::function_ref<bool(DWARFDIE die)> callback,
97dda28197Spatrick                  llvm::StringRef name = {}) const {
98dda28197Spatrick     return DIERefCallbackImpl(*this, callback, name);
99dda28197Spatrick   }
100dda28197Spatrick 
101dda28197Spatrick   void ReportInvalidDIERef(DIERef ref, llvm::StringRef name) const;
102061da546Spatrick };
103061da546Spatrick } // namespace lldb_private
104061da546Spatrick 
105dda28197Spatrick #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_DWARF_DWARFINDEX_H
106