1 //===-- SymbolFilePDB.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 lldb_Plugins_SymbolFile_PDB_SymbolFilePDB_h_ 11 #define lldb_Plugins_SymbolFile_PDB_SymbolFilePDB_h_ 12 13 #include <unordered_map> 14 15 #include "lldb/Core/UserID.h" 16 #include "lldb/Symbol/SymbolFile.h" 17 18 #include "llvm/DebugInfo/PDB/IPDBSession.h" 19 #include "llvm/DebugInfo/PDB/PDB.h" 20 21 class SymbolFilePDB : public lldb_private::SymbolFile 22 { 23 public: 24 //------------------------------------------------------------------ 25 // Static Functions 26 //------------------------------------------------------------------ 27 static void 28 Initialize(); 29 30 static void 31 Terminate(); 32 33 static void 34 DebuggerInitialize(lldb_private::Debugger &debugger); 35 36 static lldb_private::ConstString 37 GetPluginNameStatic(); 38 39 static const char * 40 GetPluginDescriptionStatic(); 41 42 static lldb_private::SymbolFile * 43 CreateInstance(lldb_private::ObjectFile *obj_file); 44 45 //------------------------------------------------------------------ 46 // Constructors and Destructors 47 //------------------------------------------------------------------ 48 SymbolFilePDB(lldb_private::ObjectFile *ofile); 49 50 ~SymbolFilePDB() override; 51 52 uint32_t 53 CalculateAbilities() override; 54 55 void 56 InitializeObject() override; 57 58 //------------------------------------------------------------------ 59 // Compile Unit function calls 60 //------------------------------------------------------------------ 61 62 uint32_t 63 GetNumCompileUnits() override; 64 65 lldb::CompUnitSP 66 ParseCompileUnitAtIndex(uint32_t index) override; 67 68 lldb::LanguageType 69 ParseCompileUnitLanguage(const lldb_private::SymbolContext &sc) override; 70 71 size_t 72 ParseCompileUnitFunctions(const lldb_private::SymbolContext &sc) override; 73 74 bool 75 ParseCompileUnitLineTable(const lldb_private::SymbolContext &sc) override; 76 77 bool 78 ParseCompileUnitDebugMacros(const lldb_private::SymbolContext &sc) override; 79 80 bool 81 ParseCompileUnitSupportFiles(const lldb_private::SymbolContext &sc, 82 lldb_private::FileSpecList &support_files) override; 83 84 bool 85 ParseImportedModules(const lldb_private::SymbolContext &sc, 86 std::vector<lldb_private::ConstString> &imported_modules) override; 87 88 size_t 89 ParseFunctionBlocks(const lldb_private::SymbolContext &sc) override; 90 91 size_t 92 ParseTypes(const lldb_private::SymbolContext &sc) override; 93 94 size_t 95 ParseVariablesForContext(const lldb_private::SymbolContext &sc) override; 96 97 lldb_private::Type * 98 ResolveTypeUID(lldb::user_id_t type_uid) override; 99 100 bool 101 CompleteType(lldb_private::CompilerType &compiler_type) override; 102 103 lldb_private::CompilerDecl 104 GetDeclForUID(lldb::user_id_t uid) override; 105 106 lldb_private::CompilerDeclContext 107 GetDeclContextForUID(lldb::user_id_t uid) override; 108 109 lldb_private::CompilerDeclContext 110 GetDeclContextContainingUID(lldb::user_id_t uid) override; 111 112 void 113 ParseDeclsForContext(lldb_private::CompilerDeclContext decl_ctx) override; 114 115 uint32_t 116 ResolveSymbolContext(const lldb_private::Address &so_addr, uint32_t resolve_scope, 117 lldb_private::SymbolContext &sc) override; 118 119 uint32_t 120 ResolveSymbolContext(const lldb_private::FileSpec &file_spec, uint32_t line, bool check_inlines, 121 uint32_t resolve_scope, lldb_private::SymbolContextList &sc_list) override; 122 123 uint32_t 124 FindGlobalVariables(const lldb_private::ConstString &name, const lldb_private::CompilerDeclContext *parent_decl_ctx, 125 bool append, uint32_t max_matches, lldb_private::VariableList &variables) override; 126 127 uint32_t 128 FindGlobalVariables(const lldb_private::RegularExpression ®ex, bool append, uint32_t max_matches, 129 lldb_private::VariableList &variables) override; 130 131 uint32_t 132 FindFunctions(const lldb_private::ConstString &name, const lldb_private::CompilerDeclContext *parent_decl_ctx, 133 uint32_t name_type_mask, bool include_inlines, bool append, 134 lldb_private::SymbolContextList &sc_list) override; 135 136 uint32_t 137 FindFunctions(const lldb_private::RegularExpression ®ex, bool include_inlines, bool append, 138 lldb_private::SymbolContextList &sc_list) override; 139 140 void 141 GetMangledNamesForFunction(const std::string &scope_qualified_name, 142 std::vector<lldb_private::ConstString> &mangled_names) override; 143 144 uint32_t 145 FindTypes(const lldb_private::SymbolContext &sc, const lldb_private::ConstString &name, 146 const lldb_private::CompilerDeclContext *parent_decl_ctx, bool append, uint32_t max_matches, 147 llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, lldb_private::TypeMap &types) override; 148 149 size_t 150 FindTypes(const std::vector<lldb_private::CompilerContext> &context, bool append, 151 lldb_private::TypeMap &types) override; 152 153 lldb_private::TypeList * 154 GetTypeList() override; 155 156 size_t 157 GetTypes(lldb_private::SymbolContextScope *sc_scope, uint32_t type_mask, 158 lldb_private::TypeList &type_list) override; 159 160 lldb_private::TypeSystem * 161 GetTypeSystemForLanguage(lldb::LanguageType language) override; 162 163 lldb_private::CompilerDeclContext 164 FindNamespace(const lldb_private::SymbolContext &sc, const lldb_private::ConstString &name, 165 const lldb_private::CompilerDeclContext *parent_decl_ctx) override; 166 167 lldb_private::ConstString 168 GetPluginName() override; 169 170 uint32_t 171 GetPluginVersion() override; 172 173 private: 174 lldb::CompUnitSP 175 ParseCompileUnitForSymIndex(uint32_t id); 176 177 bool 178 ParseCompileUnitLineTable(const lldb_private::SymbolContext &sc, uint32_t match_line); 179 180 void 181 BuildSupportFileIdToSupportFileIndexMap(const llvm::PDBSymbolCompiland &cu, 182 std::unordered_map<uint32_t, uint32_t> &index_map) const; 183 184 std::unordered_map<uint32_t, lldb::CompUnitSP> m_comp_units; 185 186 std::unique_ptr<llvm::IPDBSession> m_session_up; 187 uint32_t m_cached_compile_unit_count; 188 }; 189 190 #endif // lldb_Plugins_SymbolFile_PDB_SymbolFilePDB_h_ 191