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, 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, 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, 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 81 82 //------------------------------------------------------------------ 83 // ClangASTContext callbacks for external source lookups. 84 //------------------------------------------------------------------ 85 static void 86 CompleteTagDecl (void *baton, clang::TagDecl *); 87 88 static void 89 CompleteObjCInterfaceDecl (void *baton, clang::ObjCInterfaceDecl *); 90 91 //------------------------------------------------------------------ 92 // PluginInterface protocol 93 //------------------------------------------------------------------ 94 virtual const char * 95 GetPluginName(); 96 97 virtual const char * 98 GetShortPluginName(); 99 100 virtual uint32_t 101 GetPluginVersion(); 102 103 protected: 104 enum 105 { 106 kHaveInitializedOSOs = (1 << 0), 107 kNumFlags 108 }; 109 110 friend class SymbolFileDWARF; 111 112 //------------------------------------------------------------------ 113 // Class specific types 114 //------------------------------------------------------------------ 115 struct CompileUnitInfo 116 { 117 lldb_private::FileSpec so_file; 118 lldb_private::Symbol *so_symbol; 119 lldb_private::Symbol *oso_symbol; 120 lldb_private::Symbol *last_symbol; 121 uint32_t first_symbol_index; 122 uint32_t last_symbol_index; 123 lldb::ModuleSP oso_module_sp; 124 lldb::CompUnitSP oso_compile_unit_sp; 125 lldb_private::SymbolVendor *oso_symbol_vendor; 126 std::vector<uint32_t> function_indexes; 127 std::vector<uint32_t> static_indexes; 128 lldb::SharedPtr<lldb_private::SectionList>::Type debug_map_sections_sp; 129 130 CompileUnitInfo() : 131 so_file (), 132 so_symbol (NULL), 133 oso_symbol (NULL), 134 last_symbol (NULL), 135 first_symbol_index (UINT32_MAX), 136 last_symbol_index (UINT32_MAX), 137 oso_module_sp (), 138 oso_compile_unit_sp (), 139 oso_symbol_vendor (NULL), 140 function_indexes (), 141 static_indexes (), 142 debug_map_sections_sp () 143 { 144 } 145 }; 146 147 //------------------------------------------------------------------ 148 // Protected Member Functions 149 //------------------------------------------------------------------ 150 void 151 InitOSO (); 152 153 bool 154 GetFileSpecForSO (uint32_t oso_idx, lldb_private::FileSpec &file_spec); 155 156 CompileUnitInfo * 157 GetCompUnitInfo (const lldb_private::SymbolContext& sc); 158 159 lldb_private::Module * 160 GetModuleByCompUnitInfo (CompileUnitInfo *comp_unit_info); 161 162 lldb_private::Module * 163 GetModuleByOSOIndex (uint32_t oso_idx); 164 165 lldb_private::ObjectFile * 166 GetObjectFileByCompUnitInfo (CompileUnitInfo *comp_unit_info); 167 168 lldb_private::ObjectFile * 169 GetObjectFileByOSOIndex (uint32_t oso_idx); 170 171 SymbolFileDWARF * 172 GetSymbolFile (const lldb_private::SymbolContext& sc); 173 174 SymbolFileDWARF * 175 GetSymbolFileByCompUnitInfo (CompileUnitInfo *comp_unit_info); 176 177 SymbolFileDWARF * 178 GetSymbolFileByOSOIndex (uint32_t oso_idx); 179 180 CompileUnitInfo * 181 GetCompileUnitInfoForSymbolWithIndex (uint32_t symbol_idx, uint32_t *oso_idx_ptr); 182 183 CompileUnitInfo * 184 GetCompileUnitInfoForSymbolWithID (lldb::user_id_t symbol_id, uint32_t *oso_idx_ptr); 185 186 static int 187 SymbolContainsSymbolWithIndex (uint32_t *symbol_idx_ptr, const CompileUnitInfo *comp_unit_info); 188 189 static int 190 SymbolContainsSymbolWithID (lldb::user_id_t *symbol_idx_ptr, const CompileUnitInfo *comp_unit_info); 191 192 uint32_t 193 PrivateFindGlobalVariables (const lldb_private::ConstString &name, 194 const std::vector<uint32_t> &name_symbol_indexes, 195 uint32_t max_matches, 196 lldb_private::VariableList& variables); 197 198 199 void 200 SetCompileUnit (SymbolFileDWARF *oso_dwarf, const lldb::CompUnitSP &cu_sp); 201 202 lldb::TypeSP 203 FindDefinitionTypeForDIE (DWARFCompileUnit* cu, 204 const DWARFDebugInfoEntry *die, 205 const lldb_private::ConstString &type_name); 206 207 UniqueDWARFASTTypeMap & 208 GetUniqueDWARFASTTypeMap () 209 { 210 return m_unique_ast_type_map; 211 } 212 //------------------------------------------------------------------ 213 // Member Variables 214 //------------------------------------------------------------------ 215 std::bitset<kNumFlags> m_flags; 216 std::vector<CompileUnitInfo> m_compile_unit_infos; 217 std::vector<uint32_t> m_func_indexes; // Sorted by address 218 std::vector<uint32_t> m_glob_indexes; 219 UniqueDWARFASTTypeMap m_unique_ast_type_map; 220 }; 221 222 #endif // #ifndef SymbolFileDWARF_SymbolFileDWARFDebugMap_h_ 223