10b57cec5SDimitry Andric //===-- SymbolFileSymtab.h --------------------------------------*- C++ -*-===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
95ffd83dbSDimitry Andric #ifndef LLDB_SOURCE_PLUGINS_SYMBOLFILE_SYMTAB_SYMBOLFILESYMTAB_H
105ffd83dbSDimitry Andric #define LLDB_SOURCE_PLUGINS_SYMBOLFILE_SYMTAB_SYMBOLFILESYMTAB_H
110b57cec5SDimitry Andric 
120b57cec5SDimitry Andric #include <map>
13bdd1243dSDimitry Andric #include <optional>
140b57cec5SDimitry Andric #include <vector>
150b57cec5SDimitry Andric 
160b57cec5SDimitry Andric #include "lldb/Symbol/SymbolFile.h"
170b57cec5SDimitry Andric #include "lldb/Symbol/Symtab.h"
180b57cec5SDimitry Andric 
1981ad6265SDimitry Andric class SymbolFileSymtab : public lldb_private::SymbolFileCommon {
20480093f4SDimitry Andric   /// LLVM RTTI support.
21480093f4SDimitry Andric   static char ID;
22480093f4SDimitry Andric 
230b57cec5SDimitry Andric public:
24480093f4SDimitry Andric   /// LLVM RTTI support.
25480093f4SDimitry Andric   /// \{
isA(const void * ClassID)26480093f4SDimitry Andric   bool isA(const void *ClassID) const override {
2781ad6265SDimitry Andric     return ClassID == &ID || SymbolFileCommon::isA(ClassID);
28480093f4SDimitry Andric   }
classof(const SymbolFile * obj)29480093f4SDimitry Andric   static bool classof(const SymbolFile *obj) { return obj->isA(&ID); }
30480093f4SDimitry Andric   /// \}
31480093f4SDimitry Andric 
320b57cec5SDimitry Andric   // Constructors and Destructors
339dba64beSDimitry Andric   SymbolFileSymtab(lldb::ObjectFileSP objfile_sp);
340b57cec5SDimitry Andric 
350b57cec5SDimitry Andric   // Static Functions
360b57cec5SDimitry Andric   static void Initialize();
370b57cec5SDimitry Andric 
380b57cec5SDimitry Andric   static void Terminate();
390b57cec5SDimitry Andric 
GetPluginNameStatic()40349cc55cSDimitry Andric   static llvm::StringRef GetPluginNameStatic() { return "symtab"; }
410b57cec5SDimitry Andric 
42349cc55cSDimitry Andric   static llvm::StringRef GetPluginDescriptionStatic();
430b57cec5SDimitry Andric 
440b57cec5SDimitry Andric   static lldb_private::SymbolFile *
459dba64beSDimitry Andric   CreateInstance(lldb::ObjectFileSP objfile_sp);
460b57cec5SDimitry Andric 
470b57cec5SDimitry Andric   uint32_t CalculateAbilities() override;
480b57cec5SDimitry Andric 
490b57cec5SDimitry Andric   // Compile Unit function calls
500b57cec5SDimitry Andric   lldb::LanguageType
510b57cec5SDimitry Andric   ParseLanguage(lldb_private::CompileUnit &comp_unit) override;
520b57cec5SDimitry Andric 
530b57cec5SDimitry Andric   size_t ParseFunctions(lldb_private::CompileUnit &comp_unit) override;
540b57cec5SDimitry Andric 
550b57cec5SDimitry Andric   bool ParseLineTable(lldb_private::CompileUnit &comp_unit) override;
560b57cec5SDimitry Andric 
570b57cec5SDimitry Andric   bool ParseDebugMacros(lldb_private::CompileUnit &comp_unit) override;
580b57cec5SDimitry Andric 
590b57cec5SDimitry Andric   bool ParseSupportFiles(lldb_private::CompileUnit &comp_unit,
601db9f3b2SDimitry Andric                          lldb_private::SupportFileList &support_files) override;
610b57cec5SDimitry Andric 
620b57cec5SDimitry Andric   size_t ParseTypes(lldb_private::CompileUnit &comp_unit) override;
630b57cec5SDimitry Andric 
640b57cec5SDimitry Andric   bool ParseImportedModules(
650b57cec5SDimitry Andric       const lldb_private::SymbolContext &sc,
660b57cec5SDimitry Andric       std::vector<lldb_private::SourceModule> &imported_modules) override;
670b57cec5SDimitry Andric 
680b57cec5SDimitry Andric   size_t ParseBlocksRecursive(lldb_private::Function &func) override;
690b57cec5SDimitry Andric 
700b57cec5SDimitry Andric   size_t
710b57cec5SDimitry Andric   ParseVariablesForContext(const lldb_private::SymbolContext &sc) override;
720b57cec5SDimitry Andric 
730b57cec5SDimitry Andric   lldb_private::Type *ResolveTypeUID(lldb::user_id_t type_uid) override;
74bdd1243dSDimitry Andric   std::optional<ArrayInfo> GetDynamicArrayInfoForUID(
750b57cec5SDimitry Andric       lldb::user_id_t type_uid,
760b57cec5SDimitry Andric       const lldb_private::ExecutionContext *exe_ctx) override;
770b57cec5SDimitry Andric 
780b57cec5SDimitry Andric   bool CompleteType(lldb_private::CompilerType &compiler_type) override;
790b57cec5SDimitry Andric 
800b57cec5SDimitry Andric   uint32_t ResolveSymbolContext(const lldb_private::Address &so_addr,
810b57cec5SDimitry Andric                                 lldb::SymbolContextItem resolve_scope,
820b57cec5SDimitry Andric                                 lldb_private::SymbolContext &sc) override;
830b57cec5SDimitry Andric 
849dba64beSDimitry Andric   void GetTypes(lldb_private::SymbolContextScope *sc_scope,
850b57cec5SDimitry Andric                 lldb::TypeClass type_mask,
860b57cec5SDimitry Andric                 lldb_private::TypeList &type_list) override;
870b57cec5SDimitry Andric 
880b57cec5SDimitry Andric   // PluginInterface protocol
GetPluginName()89349cc55cSDimitry Andric   llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); }
900b57cec5SDimitry Andric 
910b57cec5SDimitry Andric protected:
929dba64beSDimitry Andric   uint32_t CalculateNumCompileUnits() override;
939dba64beSDimitry Andric 
949dba64beSDimitry Andric   lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index) override;
959dba64beSDimitry Andric 
960b57cec5SDimitry Andric   lldb_private::Symtab::IndexCollection m_source_indexes;
970b57cec5SDimitry Andric   lldb_private::Symtab::IndexCollection m_func_indexes;
980b57cec5SDimitry Andric   lldb_private::Symtab::IndexCollection m_code_indexes;
990b57cec5SDimitry Andric   lldb_private::Symtab::IndexCollection m_data_indexes;
1000b57cec5SDimitry Andric   lldb_private::Symtab::NameToIndexMap m_objc_class_name_to_index;
1010b57cec5SDimitry Andric };
1020b57cec5SDimitry Andric 
1035ffd83dbSDimitry Andric #endif // LLDB_SOURCE_PLUGINS_SYMBOLFILE_SYMTAB_SYMBOLFILESYMTAB_H
104