SymbolFileSymtab.h revision 296417
1//===-- SymbolFileSymtab.h --------------------------------------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#ifndef liblldb_SymbolFileSymtab_h_
11#define liblldb_SymbolFileSymtab_h_
12
13// C Includes
14// C++ Includes
15#include <vector>
16
17// Other libraries and framework includes
18// Project includes
19#include "lldb/Symbol/SymbolFile.h"
20#include "lldb/Symbol/Symtab.h"
21
22class SymbolFileSymtab : public lldb_private::SymbolFile
23{
24public:
25    //------------------------------------------------------------------
26    // Constructors and Destructors
27    //------------------------------------------------------------------
28    SymbolFileSymtab(lldb_private::ObjectFile* obj_file);
29
30    ~SymbolFileSymtab() override;
31
32    //------------------------------------------------------------------
33    // Static Functions
34    //------------------------------------------------------------------
35    static void
36    Initialize();
37
38    static void
39    Terminate();
40
41    static lldb_private::ConstString
42    GetPluginNameStatic();
43
44    static const char *
45    GetPluginDescriptionStatic();
46
47    static lldb_private::SymbolFile*
48    CreateInstance (lldb_private::ObjectFile* obj_file);
49
50    uint32_t
51    CalculateAbilities() override;
52
53    //------------------------------------------------------------------
54    // Compile Unit function calls
55    //------------------------------------------------------------------
56    uint32_t
57    GetNumCompileUnits() override;
58
59    lldb::CompUnitSP
60    ParseCompileUnitAtIndex(uint32_t index) override;
61
62    lldb::LanguageType
63    ParseCompileUnitLanguage(const lldb_private::SymbolContext& sc) override;
64
65    size_t
66    ParseCompileUnitFunctions(const lldb_private::SymbolContext& sc) override;
67
68    bool
69    ParseCompileUnitLineTable(const lldb_private::SymbolContext& sc) override;
70
71    bool
72    ParseCompileUnitDebugMacros(const lldb_private::SymbolContext& sc) override;
73
74    bool
75    ParseCompileUnitSupportFiles(const lldb_private::SymbolContext& sc,
76                                 lldb_private::FileSpecList &support_files) override;
77
78    bool
79    ParseImportedModules(const lldb_private::SymbolContext &sc,
80                         std::vector<lldb_private::ConstString> &imported_modules) override;
81
82    size_t
83    ParseFunctionBlocks(const lldb_private::SymbolContext& sc) override;
84
85    size_t
86    ParseTypes(const lldb_private::SymbolContext& sc) override;
87
88    size_t
89    ParseVariablesForContext(const lldb_private::SymbolContext& sc) override;
90
91    lldb_private::Type*
92    ResolveTypeUID(lldb::user_id_t type_uid) override;
93
94    bool
95    CompleteType(lldb_private::CompilerType& compiler_type) override;
96
97    uint32_t
98    ResolveSymbolContext(const lldb_private::Address& so_addr,
99                         uint32_t resolve_scope,
100                         lldb_private::SymbolContext& sc) override;
101
102    size_t
103    GetTypes(lldb_private::SymbolContextScope *sc_scope,
104             uint32_t type_mask,
105             lldb_private::TypeList &type_list) override;
106
107    //------------------------------------------------------------------
108    // PluginInterface protocol
109    //------------------------------------------------------------------
110    lldb_private::ConstString
111    GetPluginName() override;
112
113    uint32_t
114    GetPluginVersion() override;
115
116protected:
117    typedef std::map<lldb_private::ConstString, lldb::TypeSP> TypeMap;
118
119    lldb_private::Symtab::IndexCollection m_source_indexes;
120    lldb_private::Symtab::IndexCollection m_func_indexes;
121    lldb_private::Symtab::IndexCollection m_code_indexes;
122    lldb_private::Symtab::IndexCollection m_data_indexes;
123    lldb_private::Symtab::NameToIndexMap m_objc_class_name_to_index;
124    TypeMap m_objc_class_types;
125
126private:
127    DISALLOW_COPY_AND_ASSIGN (SymbolFileSymtab);
128};
129
130#endif // liblldb_SymbolFileSymtab_h_
131