1254721Semaste//===-- SymbolFileSymtab.h --------------------------------------*- C++ -*-===// 2254721Semaste// 3353358Sdim// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4353358Sdim// See https://llvm.org/LICENSE.txt for license information. 5353358Sdim// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6254721Semaste// 7254721Semaste//===----------------------------------------------------------------------===// 8254721Semaste 9254721Semaste#ifndef liblldb_SymbolFileSymtab_h_ 10254721Semaste#define liblldb_SymbolFileSymtab_h_ 11254721Semaste 12321369Sdim#include <map> 13296417Sdim#include <vector> 14296417Sdim 15254721Semaste#include "lldb/Symbol/SymbolFile.h" 16254721Semaste#include "lldb/Symbol/Symtab.h" 17254721Semaste 18314564Sdimclass SymbolFileSymtab : public lldb_private::SymbolFile { 19360784Sdim /// LLVM RTTI support. 20360784Sdim static char ID; 21360784Sdim 22254721Semastepublic: 23360784Sdim /// LLVM RTTI support. 24360784Sdim /// \{ 25360784Sdim bool isA(const void *ClassID) const override { 26360784Sdim return ClassID == &ID || SymbolFile::isA(ClassID); 27360784Sdim } 28360784Sdim static bool classof(const SymbolFile *obj) { return obj->isA(&ID); } 29360784Sdim /// \} 30360784Sdim 31314564Sdim // Constructors and Destructors 32360784Sdim SymbolFileSymtab(lldb::ObjectFileSP objfile_sp); 33296417Sdim 34314564Sdim ~SymbolFileSymtab() override; 35296417Sdim 36314564Sdim // Static Functions 37314564Sdim static void Initialize(); 38254721Semaste 39314564Sdim static void Terminate(); 40254721Semaste 41314564Sdim static lldb_private::ConstString GetPluginNameStatic(); 42254721Semaste 43314564Sdim static const char *GetPluginDescriptionStatic(); 44254721Semaste 45314564Sdim static lldb_private::SymbolFile * 46360784Sdim CreateInstance(lldb::ObjectFileSP objfile_sp); 47254721Semaste 48314564Sdim uint32_t CalculateAbilities() override; 49254721Semaste 50314564Sdim // Compile Unit function calls 51314564Sdim lldb::LanguageType 52344779Sdim ParseLanguage(lldb_private::CompileUnit &comp_unit) override; 53254721Semaste 54344779Sdim size_t ParseFunctions(lldb_private::CompileUnit &comp_unit) override; 55254721Semaste 56344779Sdim bool ParseLineTable(lldb_private::CompileUnit &comp_unit) override; 57254721Semaste 58344779Sdim bool ParseDebugMacros(lldb_private::CompileUnit &comp_unit) override; 59296417Sdim 60344779Sdim bool ParseSupportFiles(lldb_private::CompileUnit &comp_unit, 61344779Sdim lldb_private::FileSpecList &support_files) override; 62254721Semaste 63344779Sdim size_t ParseTypes(lldb_private::CompileUnit &comp_unit) override; 64344779Sdim 65314564Sdim bool ParseImportedModules( 66314564Sdim const lldb_private::SymbolContext &sc, 67353358Sdim std::vector<lldb_private::SourceModule> &imported_modules) override; 68254721Semaste 69344779Sdim size_t ParseBlocksRecursive(lldb_private::Function &func) override; 70254721Semaste 71314564Sdim size_t 72314564Sdim ParseVariablesForContext(const lldb_private::SymbolContext &sc) override; 73254721Semaste 74314564Sdim lldb_private::Type *ResolveTypeUID(lldb::user_id_t type_uid) override; 75344779Sdim llvm::Optional<ArrayInfo> GetDynamicArrayInfoForUID( 76344779Sdim lldb::user_id_t type_uid, 77344779Sdim const lldb_private::ExecutionContext *exe_ctx) override; 78254721Semaste 79314564Sdim bool CompleteType(lldb_private::CompilerType &compiler_type) override; 80254721Semaste 81314564Sdim uint32_t ResolveSymbolContext(const lldb_private::Address &so_addr, 82344779Sdim lldb::SymbolContextItem resolve_scope, 83314564Sdim lldb_private::SymbolContext &sc) override; 84254721Semaste 85360784Sdim void GetTypes(lldb_private::SymbolContextScope *sc_scope, 86360784Sdim lldb::TypeClass type_mask, 87360784Sdim lldb_private::TypeList &type_list) override; 88254721Semaste 89314564Sdim // PluginInterface protocol 90314564Sdim lldb_private::ConstString GetPluginName() override; 91254721Semaste 92314564Sdim uint32_t GetPluginVersion() override; 93314564Sdim 94254721Semasteprotected: 95360784Sdim uint32_t CalculateNumCompileUnits() override; 96360784Sdim 97360784Sdim lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index) override; 98360784Sdim 99314564Sdim typedef std::map<lldb_private::ConstString, lldb::TypeSP> TypeMap; 100254721Semaste 101314564Sdim lldb_private::Symtab::IndexCollection m_source_indexes; 102314564Sdim lldb_private::Symtab::IndexCollection m_func_indexes; 103314564Sdim lldb_private::Symtab::IndexCollection m_code_indexes; 104314564Sdim lldb_private::Symtab::IndexCollection m_data_indexes; 105314564Sdim lldb_private::Symtab::NameToIndexMap m_objc_class_name_to_index; 106314564Sdim TypeMap m_objc_class_types; 107314564Sdim 108254721Semasteprivate: 109314564Sdim DISALLOW_COPY_AND_ASSIGN(SymbolFileSymtab); 110254721Semaste}; 111254721Semaste 112296417Sdim#endif // liblldb_SymbolFileSymtab_h_ 113