1 //===-- SymbolFileSymtab.h --------------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef liblldb_SymbolFileSymtab_h_
10 #define liblldb_SymbolFileSymtab_h_
11 
12 #include <map>
13 #include <vector>
14 
15 #include "lldb/Symbol/SymbolFile.h"
16 #include "lldb/Symbol/Symtab.h"
17 
18 class SymbolFileSymtab : public lldb_private::SymbolFile {
19   /// LLVM RTTI support.
20   static char ID;
21 
22 public:
23   /// LLVM RTTI support.
24   /// \{
25   bool isA(const void *ClassID) const override {
26     return ClassID == &ID || SymbolFile::isA(ClassID);
27   }
28   static bool classof(const SymbolFile *obj) { return obj->isA(&ID); }
29   /// \}
30 
31   // Constructors and Destructors
32   SymbolFileSymtab(lldb::ObjectFileSP objfile_sp);
33 
34   ~SymbolFileSymtab() override;
35 
36   // Static Functions
37   static void Initialize();
38 
39   static void Terminate();
40 
41   static lldb_private::ConstString GetPluginNameStatic();
42 
43   static const char *GetPluginDescriptionStatic();
44 
45   static lldb_private::SymbolFile *
46   CreateInstance(lldb::ObjectFileSP objfile_sp);
47 
48   uint32_t CalculateAbilities() override;
49 
50   // Compile Unit function calls
51   lldb::LanguageType
52   ParseLanguage(lldb_private::CompileUnit &comp_unit) override;
53 
54   size_t ParseFunctions(lldb_private::CompileUnit &comp_unit) override;
55 
56   bool ParseLineTable(lldb_private::CompileUnit &comp_unit) override;
57 
58   bool ParseDebugMacros(lldb_private::CompileUnit &comp_unit) override;
59 
60   bool ParseSupportFiles(lldb_private::CompileUnit &comp_unit,
61                          lldb_private::FileSpecList &support_files) override;
62 
63   size_t ParseTypes(lldb_private::CompileUnit &comp_unit) override;
64 
65   bool ParseImportedModules(
66       const lldb_private::SymbolContext &sc,
67       std::vector<lldb_private::SourceModule> &imported_modules) override;
68 
69   size_t ParseBlocksRecursive(lldb_private::Function &func) override;
70 
71   size_t
72   ParseVariablesForContext(const lldb_private::SymbolContext &sc) override;
73 
74   lldb_private::Type *ResolveTypeUID(lldb::user_id_t type_uid) override;
75   llvm::Optional<ArrayInfo> GetDynamicArrayInfoForUID(
76       lldb::user_id_t type_uid,
77       const lldb_private::ExecutionContext *exe_ctx) override;
78 
79   bool CompleteType(lldb_private::CompilerType &compiler_type) override;
80 
81   uint32_t ResolveSymbolContext(const lldb_private::Address &so_addr,
82                                 lldb::SymbolContextItem resolve_scope,
83                                 lldb_private::SymbolContext &sc) override;
84 
85   void GetTypes(lldb_private::SymbolContextScope *sc_scope,
86                 lldb::TypeClass type_mask,
87                 lldb_private::TypeList &type_list) override;
88 
89   // PluginInterface protocol
90   lldb_private::ConstString GetPluginName() override;
91 
92   uint32_t GetPluginVersion() override;
93 
94 protected:
95   uint32_t CalculateNumCompileUnits() override;
96 
97   lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index) override;
98 
99   typedef std::map<lldb_private::ConstString, lldb::TypeSP> TypeMap;
100 
101   lldb_private::Symtab::IndexCollection m_source_indexes;
102   lldb_private::Symtab::IndexCollection m_func_indexes;
103   lldb_private::Symtab::IndexCollection m_code_indexes;
104   lldb_private::Symtab::IndexCollection m_data_indexes;
105   lldb_private::Symtab::NameToIndexMap m_objc_class_name_to_index;
106   TypeMap m_objc_class_types;
107 
108 private:
109   DISALLOW_COPY_AND_ASSIGN(SymbolFileSymtab);
110 };
111 
112 #endif // liblldb_SymbolFileSymtab_h_
113