1061da546Spatrick //===-- SymbolFileSymtab.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_SYMTAB_SYMBOLFILESYMTAB_H 10dda28197Spatrick #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_SYMTAB_SYMBOLFILESYMTAB_H 11061da546Spatrick 12061da546Spatrick #include <map> 13*f6aab3d8Srobert #include <optional> 14061da546Spatrick #include <vector> 15061da546Spatrick 16061da546Spatrick #include "lldb/Symbol/SymbolFile.h" 17061da546Spatrick #include "lldb/Symbol/Symtab.h" 18061da546Spatrick 19*f6aab3d8Srobert class SymbolFileSymtab : public lldb_private::SymbolFileCommon { 20061da546Spatrick /// LLVM RTTI support. 21061da546Spatrick static char ID; 22061da546Spatrick 23061da546Spatrick public: 24061da546Spatrick /// LLVM RTTI support. 25061da546Spatrick /// \{ isA(const void * ClassID)26061da546Spatrick bool isA(const void *ClassID) const override { 27*f6aab3d8Srobert return ClassID == &ID || SymbolFileCommon::isA(ClassID); 28061da546Spatrick } classof(const SymbolFile * obj)29061da546Spatrick static bool classof(const SymbolFile *obj) { return obj->isA(&ID); } 30061da546Spatrick /// \} 31061da546Spatrick 32061da546Spatrick // Constructors and Destructors 33061da546Spatrick SymbolFileSymtab(lldb::ObjectFileSP objfile_sp); 34061da546Spatrick 35061da546Spatrick // Static Functions 36061da546Spatrick static void Initialize(); 37061da546Spatrick 38061da546Spatrick static void Terminate(); 39061da546Spatrick GetPluginNameStatic()40*f6aab3d8Srobert static llvm::StringRef GetPluginNameStatic() { return "symtab"; } 41061da546Spatrick 42*f6aab3d8Srobert static llvm::StringRef GetPluginDescriptionStatic(); 43061da546Spatrick 44061da546Spatrick static lldb_private::SymbolFile * 45061da546Spatrick CreateInstance(lldb::ObjectFileSP objfile_sp); 46061da546Spatrick 47061da546Spatrick uint32_t CalculateAbilities() override; 48061da546Spatrick 49061da546Spatrick // Compile Unit function calls 50061da546Spatrick lldb::LanguageType 51061da546Spatrick ParseLanguage(lldb_private::CompileUnit &comp_unit) override; 52061da546Spatrick 53061da546Spatrick size_t ParseFunctions(lldb_private::CompileUnit &comp_unit) override; 54061da546Spatrick 55061da546Spatrick bool ParseLineTable(lldb_private::CompileUnit &comp_unit) override; 56061da546Spatrick 57061da546Spatrick bool ParseDebugMacros(lldb_private::CompileUnit &comp_unit) override; 58061da546Spatrick 59061da546Spatrick bool ParseSupportFiles(lldb_private::CompileUnit &comp_unit, 60061da546Spatrick lldb_private::FileSpecList &support_files) override; 61061da546Spatrick 62061da546Spatrick size_t ParseTypes(lldb_private::CompileUnit &comp_unit) override; 63061da546Spatrick 64061da546Spatrick bool ParseImportedModules( 65061da546Spatrick const lldb_private::SymbolContext &sc, 66061da546Spatrick std::vector<lldb_private::SourceModule> &imported_modules) override; 67061da546Spatrick 68061da546Spatrick size_t ParseBlocksRecursive(lldb_private::Function &func) override; 69061da546Spatrick 70061da546Spatrick size_t 71061da546Spatrick ParseVariablesForContext(const lldb_private::SymbolContext &sc) override; 72061da546Spatrick 73061da546Spatrick lldb_private::Type *ResolveTypeUID(lldb::user_id_t type_uid) override; 74*f6aab3d8Srobert std::optional<ArrayInfo> GetDynamicArrayInfoForUID( 75061da546Spatrick lldb::user_id_t type_uid, 76061da546Spatrick const lldb_private::ExecutionContext *exe_ctx) override; 77061da546Spatrick 78061da546Spatrick bool CompleteType(lldb_private::CompilerType &compiler_type) override; 79061da546Spatrick 80061da546Spatrick uint32_t ResolveSymbolContext(const lldb_private::Address &so_addr, 81061da546Spatrick lldb::SymbolContextItem resolve_scope, 82061da546Spatrick lldb_private::SymbolContext &sc) override; 83061da546Spatrick 84061da546Spatrick void GetTypes(lldb_private::SymbolContextScope *sc_scope, 85061da546Spatrick lldb::TypeClass type_mask, 86061da546Spatrick lldb_private::TypeList &type_list) override; 87061da546Spatrick 88061da546Spatrick // PluginInterface protocol GetPluginName()89*f6aab3d8Srobert llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 90061da546Spatrick 91061da546Spatrick protected: 92061da546Spatrick uint32_t CalculateNumCompileUnits() override; 93061da546Spatrick 94061da546Spatrick lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index) override; 95061da546Spatrick 96061da546Spatrick typedef std::map<lldb_private::ConstString, lldb::TypeSP> TypeMap; 97061da546Spatrick 98061da546Spatrick lldb_private::Symtab::IndexCollection m_source_indexes; 99061da546Spatrick lldb_private::Symtab::IndexCollection m_func_indexes; 100061da546Spatrick lldb_private::Symtab::IndexCollection m_code_indexes; 101061da546Spatrick lldb_private::Symtab::IndexCollection m_data_indexes; 102061da546Spatrick lldb_private::Symtab::NameToIndexMap m_objc_class_name_to_index; 103061da546Spatrick TypeMap m_objc_class_types; 104061da546Spatrick }; 105061da546Spatrick 106dda28197Spatrick #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_SYMTAB_SYMBOLFILESYMTAB_H 107