1 //===-- SymbolFileDWARFDebugMap.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 SymbolFileDWARF_SymbolFileDWARFDebugMap_h_ 11 #define SymbolFileDWARF_SymbolFileDWARFDebugMap_h_ 12 13 14 #include <vector> 15 #include <bitset> 16 #include "lldb/Symbol/SymbolFile.h" 17 18 #include "UniqueDWARFASTType.h" 19 20 class SymbolFileDWARF; 21 class DWARFCompileUnit; 22 class DWARFDebugInfoEntry; 23 24 class SymbolFileDWARFDebugMap : public lldb_private::SymbolFile 25 { 26 public: 27 //------------------------------------------------------------------ 28 // Static Functions 29 //------------------------------------------------------------------ 30 static void 31 Initialize(); 32 33 static void 34 Terminate(); 35 36 static const char * 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 SymbolFileDWARFDebugMap (lldb_private::ObjectFile* ofile); 49 virtual ~ SymbolFileDWARFDebugMap (); 50 51 virtual uint32_t GetAbilities (); 52 53 virtual void InitializeObject(); 54 55 //------------------------------------------------------------------ 56 // Compile Unit function calls 57 //------------------------------------------------------------------ 58 virtual uint32_t GetNumCompileUnits (); 59 virtual lldb::CompUnitSP ParseCompileUnitAtIndex (uint32_t index); 60 61 virtual size_t ParseCompileUnitFunctions (const lldb_private::SymbolContext& sc); 62 virtual bool ParseCompileUnitLineTable (const lldb_private::SymbolContext& sc); 63 virtual bool ParseCompileUnitSupportFiles (const lldb_private::SymbolContext& sc, lldb_private::FileSpecList &support_files); 64 virtual size_t ParseFunctionBlocks (const lldb_private::SymbolContext& sc); 65 virtual size_t ParseTypes (const lldb_private::SymbolContext& sc); 66 virtual size_t ParseVariablesForContext (const lldb_private::SymbolContext& sc); 67 68 virtual lldb_private::Type* ResolveTypeUID (lldb::user_id_t type_uid); 69 virtual lldb::clang_type_t ResolveClangOpaqueTypeDefinition (lldb::clang_type_t clang_Type); 70 virtual uint32_t ResolveSymbolContext (const lldb_private::Address& so_addr, uint32_t resolve_scope, lldb_private::SymbolContext& sc); 71 virtual uint32_t ResolveSymbolContext (const lldb_private::FileSpec& file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, lldb_private::SymbolContextList& sc_list); 72 virtual uint32_t FindGlobalVariables (const lldb_private::ConstString &name, const lldb_private::ClangNamespaceDecl *namespace_decl, bool append, uint32_t max_matches, lldb_private::VariableList& variables); 73 virtual uint32_t FindGlobalVariables (const lldb_private::RegularExpression& regex, bool append, uint32_t max_matches, lldb_private::VariableList& variables); 74 virtual uint32_t FindFunctions (const lldb_private::ConstString &name, const lldb_private::ClangNamespaceDecl *namespace_decl, uint32_t name_type_mask, bool append, lldb_private::SymbolContextList& sc_list); 75 virtual uint32_t FindFunctions (const lldb_private::RegularExpression& regex, bool append, lldb_private::SymbolContextList& sc_list); 76 virtual uint32_t FindTypes (const lldb_private::SymbolContext& sc, const lldb_private::ConstString &name, const lldb_private::ClangNamespaceDecl *namespace_decl, bool append, uint32_t max_matches, lldb_private::TypeList& types); 77 virtual lldb_private::ClangNamespaceDecl 78 FindNamespace (const lldb_private::SymbolContext& sc, 79 const lldb_private::ConstString &name, 80 const lldb_private::ClangNamespaceDecl *parent_namespace_decl); 81 82 83 //------------------------------------------------------------------ 84 // ClangASTContext callbacks for external source lookups. 85 //------------------------------------------------------------------ 86 static void 87 CompleteTagDecl (void *baton, clang::TagDecl *); 88 89 static void 90 CompleteObjCInterfaceDecl (void *baton, clang::ObjCInterfaceDecl *); 91 92 //------------------------------------------------------------------ 93 // PluginInterface protocol 94 //------------------------------------------------------------------ 95 virtual const char * 96 GetPluginName(); 97 98 virtual const char * 99 GetShortPluginName(); 100 101 virtual uint32_t 102 GetPluginVersion(); 103 104 protected: 105 enum 106 { 107 kHaveInitializedOSOs = (1 << 0), 108 kNumFlags 109 }; 110 111 friend class SymbolFileDWARF; 112 113 //------------------------------------------------------------------ 114 // Class specific types 115 //------------------------------------------------------------------ 116 struct CompileUnitInfo 117 { 118 lldb_private::FileSpec so_file; 119 lldb_private::Symbol *so_symbol; 120 lldb_private::Symbol *oso_symbol; 121 lldb_private::Symbol *last_symbol; 122 uint32_t first_symbol_index; 123 uint32_t last_symbol_index; 124 lldb::ModuleSP oso_module_sp; 125 lldb::CompUnitSP oso_compile_unit_sp; 126 lldb_private::SymbolVendor *oso_symbol_vendor; 127 std::vector<uint32_t> function_indexes; 128 std::vector<uint32_t> static_indexes; 129 lldb::SharedPtr<lldb_private::SectionList>::Type debug_map_sections_sp; 130 131 CompileUnitInfo() : 132 so_file (), 133 so_symbol (NULL), 134 oso_symbol (NULL), 135 last_symbol (NULL), 136 first_symbol_index (UINT32_MAX), 137 last_symbol_index (UINT32_MAX), 138 oso_module_sp (), 139 oso_compile_unit_sp (), 140 oso_symbol_vendor (NULL), 141 function_indexes (), 142 static_indexes (), 143 debug_map_sections_sp () 144 { 145 } 146 }; 147 148 //------------------------------------------------------------------ 149 // Protected Member Functions 150 //------------------------------------------------------------------ 151 void 152 InitOSO (); 153 154 bool 155 GetFileSpecForSO (uint32_t oso_idx, lldb_private::FileSpec &file_spec); 156 157 CompileUnitInfo * 158 GetCompUnitInfo (const lldb_private::SymbolContext& sc); 159 160 lldb_private::Module * 161 GetModuleByCompUnitInfo (CompileUnitInfo *comp_unit_info); 162 163 lldb_private::Module * 164 GetModuleByOSOIndex (uint32_t oso_idx); 165 166 lldb_private::ObjectFile * 167 GetObjectFileByCompUnitInfo (CompileUnitInfo *comp_unit_info); 168 169 lldb_private::ObjectFile * 170 GetObjectFileByOSOIndex (uint32_t oso_idx); 171 172 SymbolFileDWARF * 173 GetSymbolFile (const lldb_private::SymbolContext& sc); 174 175 SymbolFileDWARF * 176 GetSymbolFileByCompUnitInfo (CompileUnitInfo *comp_unit_info); 177 178 SymbolFileDWARF * 179 GetSymbolFileByOSOIndex (uint32_t oso_idx); 180 181 CompileUnitInfo * 182 GetCompileUnitInfoForSymbolWithIndex (uint32_t symbol_idx, uint32_t *oso_idx_ptr); 183 184 CompileUnitInfo * 185 GetCompileUnitInfoForSymbolWithID (lldb::user_id_t symbol_id, uint32_t *oso_idx_ptr); 186 187 static int 188 SymbolContainsSymbolWithIndex (uint32_t *symbol_idx_ptr, const CompileUnitInfo *comp_unit_info); 189 190 static int 191 SymbolContainsSymbolWithID (lldb::user_id_t *symbol_idx_ptr, const CompileUnitInfo *comp_unit_info); 192 193 uint32_t 194 PrivateFindGlobalVariables (const lldb_private::ConstString &name, 195 const lldb_private::ClangNamespaceDecl *namespace_decl, 196 const std::vector<uint32_t> &name_symbol_indexes, 197 uint32_t max_matches, 198 lldb_private::VariableList& variables); 199 200 201 void 202 SetCompileUnit (SymbolFileDWARF *oso_dwarf, const lldb::CompUnitSP &cu_sp); 203 204 lldb::TypeSP 205 FindDefinitionTypeForDIE (DWARFCompileUnit* cu, 206 const DWARFDebugInfoEntry *die, 207 const lldb_private::ConstString &type_name); 208 209 UniqueDWARFASTTypeMap & 210 GetUniqueDWARFASTTypeMap () 211 { 212 return m_unique_ast_type_map; 213 } 214 //------------------------------------------------------------------ 215 // Member Variables 216 //------------------------------------------------------------------ 217 std::bitset<kNumFlags> m_flags; 218 std::vector<CompileUnitInfo> m_compile_unit_infos; 219 std::vector<uint32_t> m_func_indexes; // Sorted by address 220 std::vector<uint32_t> m_glob_indexes; 221 UniqueDWARFASTTypeMap m_unique_ast_type_map; 222 }; 223 224 #endif // #ifndef SymbolFileDWARF_SymbolFileDWARFDebugMap_h_ 225