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 #include "lldb/Symbol/SymbolFile.h" 14 #include "lldb/Symbol/Symtab.h" 15 #include <vector> 16 17 class SymbolFileSymtab : public lldb_private::SymbolFile 18 { 19 public: 20 //------------------------------------------------------------------ 21 // Static Functions 22 //------------------------------------------------------------------ 23 static void 24 Initialize(); 25 26 static void 27 Terminate(); 28 29 static lldb_private::ConstString 30 GetPluginNameStatic(); 31 32 static const char * 33 GetPluginDescriptionStatic(); 34 35 static lldb_private::SymbolFile* 36 CreateInstance (lldb_private::ObjectFile* obj_file); 37 38 //------------------------------------------------------------------ 39 // Constructors and Destructors 40 //------------------------------------------------------------------ 41 SymbolFileSymtab(lldb_private::ObjectFile* obj_file); 42 43 virtual 44 ~SymbolFileSymtab(); 45 46 virtual uint32_t CalculateAbilities (); 47 48 //------------------------------------------------------------------ 49 // Compile Unit function calls 50 //------------------------------------------------------------------ 51 virtual uint32_t 52 GetNumCompileUnits(); 53 54 virtual lldb::CompUnitSP 55 ParseCompileUnitAtIndex(uint32_t index); 56 57 virtual lldb::LanguageType 58 ParseCompileUnitLanguage (const lldb_private::SymbolContext& sc); 59 60 virtual size_t 61 ParseCompileUnitFunctions (const lldb_private::SymbolContext& sc); 62 63 virtual bool 64 ParseCompileUnitLineTable (const lldb_private::SymbolContext& sc); 65 66 virtual bool 67 ParseCompileUnitSupportFiles (const lldb_private::SymbolContext& sc, lldb_private::FileSpecList &support_files); 68 69 virtual bool 70 ParseImportedModules (const lldb_private::SymbolContext &sc, std::vector<lldb_private::ConstString> &imported_modules); 71 72 virtual size_t 73 ParseFunctionBlocks (const lldb_private::SymbolContext& sc); 74 75 virtual size_t 76 ParseTypes (const lldb_private::SymbolContext& sc); 77 78 virtual size_t 79 ParseVariablesForContext (const lldb_private::SymbolContext& sc); 80 81 virtual lldb_private::Type* 82 ResolveTypeUID(lldb::user_id_t type_uid); 83 84 virtual bool 85 ResolveClangOpaqueTypeDefinition (lldb_private::ClangASTType& clang_type); 86 87 virtual uint32_t 88 ResolveSymbolContext (const lldb_private::Address& so_addr, uint32_t resolve_scope, lldb_private::SymbolContext& sc); 89 90 virtual uint32_t 91 ResolveSymbolContext (const lldb_private::FileSpec& file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, lldb_private::SymbolContextList& sc_list); 92 93 virtual uint32_t 94 FindGlobalVariables(const lldb_private::ConstString &name, const lldb_private::ClangNamespaceDecl *namespace_decl, bool append, uint32_t max_matches, lldb_private::VariableList& variables); 95 96 virtual uint32_t 97 FindGlobalVariables(const lldb_private::RegularExpression& regex, bool append, uint32_t max_matches, lldb_private::VariableList& variables); 98 99 virtual uint32_t 100 FindFunctions(const lldb_private::ConstString &name, const lldb_private::ClangNamespaceDecl *namespace_decl, uint32_t name_type_mask, bool include_inlines, bool append, lldb_private::SymbolContextList& sc_list); 101 102 virtual uint32_t 103 FindFunctions(const lldb_private::RegularExpression& regex, bool include_inlines, bool append, lldb_private::SymbolContextList& sc_list); 104 105 virtual uint32_t 106 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); 107 108 virtual size_t 109 GetTypes (lldb_private::SymbolContextScope *sc_scope, 110 uint32_t type_mask, 111 lldb_private::TypeList &type_list); 112 113 virtual lldb_private::ClangNamespaceDecl 114 FindNamespace (const lldb_private::SymbolContext& sc, 115 const lldb_private::ConstString &name, 116 const lldb_private::ClangNamespaceDecl *parent_namespace_decl); 117 118 //------------------------------------------------------------------ 119 // PluginInterface protocol 120 //------------------------------------------------------------------ 121 virtual lldb_private::ConstString 122 GetPluginName(); 123 124 virtual uint32_t 125 GetPluginVersion(); 126 127 protected: 128 typedef std::map<lldb_private::ConstString, lldb::TypeSP> TypeMap; 129 130 lldb_private::Symtab::IndexCollection m_source_indexes; 131 lldb_private::Symtab::IndexCollection m_func_indexes; 132 lldb_private::Symtab::IndexCollection m_code_indexes; 133 lldb_private::Symtab::IndexCollection m_data_indexes; 134 lldb_private::Symtab::NameToIndexMap m_objc_class_name_to_index; 135 TypeMap m_objc_class_types; 136 137 lldb_private::ClangASTContext & 138 GetClangASTContext (); 139 140 private: 141 DISALLOW_COPY_AND_ASSIGN (SymbolFileSymtab); 142 }; 143 144 145 #endif // liblldb_SymbolFileSymtab_h_ 146