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 ®ex, 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 ®ex, 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