SymbolFile.h revision d7cb26e87841731c6452a9f2e997ed0f9c92625c
1//===-- SymbolFile.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_SymbolFile_h_ 11#define liblldb_SymbolFile_h_ 12 13#include "lldb/lldb-private.h" 14#include "lldb/Core/PluginInterface.h" 15#include "lldb/Symbol/Type.h" 16 17namespace lldb_private { 18 19class SymbolFile : 20 public PluginInterface 21{ 22public: 23 enum Abilities 24 { 25 Labels = (1 << 0), 26 AddressAcceleratorTable = (1 << 1), 27 FunctionAcceleratorTable = (1 << 2), 28 TypeAcceleratorTable = (1 << 3), 29 MacroInformation = (1 << 4), 30 CallFrameInformation = (1 << 5), 31 CompileUnits = (1 << 6), 32 LineTables = (1 << 7), 33 LineColumns = (1 << 8), 34 Functions = (1 << 9), 35 Blocks = (1 << 10), 36 GlobalVariables = (1 << 11), 37 LocalVariables = (1 << 12), 38 VariableTypes = (1 << 13) 39 }; 40 41 static SymbolFile * 42 FindPlugin (ObjectFile* obj_file); 43 44 //------------------------------------------------------------------ 45 // Constructors and Destructors 46 //------------------------------------------------------------------ 47 SymbolFile(ObjectFile* obj_file) : 48 m_obj_file(obj_file) 49 { 50 } 51 52 virtual 53 ~SymbolFile() 54 { 55 } 56 57 virtual uint32_t GetAbilities () = 0; 58 59 //------------------------------------------------------------------ 60 // Compile Unit function calls 61 //------------------------------------------------------------------ 62 // Approach 1 - iterator 63 virtual uint32_t GetNumCompileUnits() = 0; 64 virtual lldb::CompUnitSP ParseCompileUnitAtIndex(uint32_t index) = 0; 65 66 virtual size_t ParseCompileUnitFunctions (const SymbolContext& sc) = 0; 67 virtual bool ParseCompileUnitLineTable (const SymbolContext& sc) = 0; 68 virtual bool ParseCompileUnitSupportFiles (const SymbolContext& sc, FileSpecList& support_files) = 0; 69 virtual size_t ParseFunctionBlocks (const SymbolContext& sc) = 0; 70 virtual size_t ParseTypes (const SymbolContext& sc) = 0; 71 virtual size_t ParseVariablesForContext (const SymbolContext& sc) = 0; 72 virtual Type* ResolveTypeUID (lldb::user_id_t type_uid) = 0; 73 virtual lldb::clang_type_t ResolveClangOpaqueTypeDefinition (lldb::clang_type_t clang_type) = 0; 74 virtual clang::DeclContext* GetClangDeclContextForTypeUID (lldb::user_id_t type_uid) { return NULL; } 75 virtual uint32_t ResolveSymbolContext (const Address& so_addr, uint32_t resolve_scope, SymbolContext& sc) = 0; 76 virtual uint32_t ResolveSymbolContext (const FileSpec& file_spec, uint32_t line, bool check_inlines, uint32_t resolve_scope, SymbolContextList& sc_list) = 0; 77 virtual uint32_t FindGlobalVariables (const ConstString &name, bool append, uint32_t max_matches, VariableList& variables) = 0; 78 virtual uint32_t FindGlobalVariables (const RegularExpression& regex, bool append, uint32_t max_matches, VariableList& variables) = 0; 79 virtual uint32_t FindFunctions (const ConstString &name, uint32_t name_type_mask, bool append, SymbolContextList& sc_list) = 0; 80 virtual uint32_t FindFunctions (const RegularExpression& regex, bool append, SymbolContextList& sc_list) = 0; 81 virtual uint32_t FindTypes (const SymbolContext& sc, const ConstString &name, bool append, uint32_t max_matches, TypeList& types) = 0; 82// virtual uint32_t FindTypes (const SymbolContext& sc, const RegularExpression& regex, bool append, uint32_t max_matches, TypeList& types) = 0; 83 virtual TypeList * GetTypeList (); 84 virtual clang::NamespaceDecl * 85 FindNamespace (const SymbolContext& sc, 86 const ConstString &name) = 0; 87 88 ObjectFile* GetObjectFile() { return m_obj_file; } 89 const ObjectFile* GetObjectFile() const { return m_obj_file; } 90protected: 91 ObjectFile* m_obj_file; // The object file that symbols can be extracted from. 92 93private: 94 DISALLOW_COPY_AND_ASSIGN (SymbolFile); 95}; 96 97 98} // namespace lldb_private 99 100#endif // liblldb_SymbolFile_h_ 101