SymbolVendor.h revision 49ce8969d3154e1560106cfe530444c09410f217
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===-- SymbolVendor.h ------------------------------------------*- C++ -*-===// 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The LLVM Compiler Infrastructure 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch//===----------------------------------------------------------------------===// 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef liblldb_SymbolVendor_h_ 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define liblldb_SymbolVendor_h_ 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "lldb/lldb-private.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Core/ModuleChild.h" 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "lldb/Core/PluginInterface.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Symbol/ClangNamespaceDecl.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "lldb/Symbol/TypeList.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace lldb_private { 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)//---------------------------------------------------------------------- 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// The symbol vendor class is designed to abstract the process of 26eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// searching for debug information for a given module. Platforms can 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// subclass this class and provide extra ways to find debug information. 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Examples would be a subclass that would allow for locating a stand 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// alone debug file, parsing debug maps, or runtime data in the object 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// files. A symbol vendor can use multiple sources (SymbolFile 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// objects) to provide the information and only parse as deep as needed 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// in order to provide the information that is requested. 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//---------------------------------------------------------------------- 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SymbolVendor : 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public ModuleChild, 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public PluginInterface 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles){ 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool 40eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RegisterPlugin (const char *name, 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *description, 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SymbolVendorCreateInstance create_callback); 436d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) static bool 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UnregisterPlugin (SymbolVendorCreateInstance create_callback); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static SymbolVendor* 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FindPlugin (const lldb::ModuleSP &module_sp); 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 51b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) //------------------------------------------------------------------ 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Constructors and Destructors 53a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) //------------------------------------------------------------------ 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SymbolVendor(const lldb::ModuleSP &module_sp); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ~SymbolVendor(); 58eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 59eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void 60eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch AddSymbolFileRepresentation(const lldb::ObjectFileSP &objfile_sp); 61eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 62eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual void 63eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch Dump(Stream *s); 64eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual lldb::LanguageType 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParseCompileUnitLanguage (const SymbolContext& sc); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual size_t 69a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ParseCompileUnitFunctions (const SymbolContext& sc); 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 71a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) virtual bool 72a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) ParseCompileUnitLineTable (const SymbolContext& sc); 736e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 746e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual bool 756e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ParseCompileUnitSupportFiles (const SymbolContext& sc, 766e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) FileSpecList& support_files); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual size_t 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParseFunctionBlocks (const SymbolContext& sc); 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual size_t 82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ParseTypes (const SymbolContext& sc); 83eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 84eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual size_t 85eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ParseVariablesForContext (const SymbolContext& sc); 86eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual Type* 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ResolveTypeUID(lldb::user_id_t type_uid); 89eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 90eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual uint32_t 91eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ResolveSymbolContext (const Address& so_addr, 92eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch uint32_t resolve_scope, 93eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SymbolContext& sc); 94eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual uint32_t 96eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ResolveSymbolContext (const FileSpec& file_spec, 97eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch uint32_t line, 98eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool check_inlines, 99eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch uint32_t resolve_scope, 100eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SymbolContextList& sc_list); 101eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 102eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual uint32_t 103eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FindGlobalVariables (const ConstString &name, 104eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const ClangNamespaceDecl *namespace_decl, 105eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool append, 106eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch uint32_t max_matches, 107eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch VariableList& variables); 108eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 109eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch virtual uint32_t 110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FindGlobalVariables (const RegularExpression& regex, 111eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool append, 112eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch uint32_t max_matches, 113eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch VariableList& variables); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual uint32_t 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FindFunctions (const ConstString &name, 117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const ClangNamespaceDecl *namespace_decl, 118eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch uint32_t name_type_mask, 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch bool include_inlines, 120eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool append, 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SymbolContextList& sc_list); 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual uint32_t 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FindFunctions (const RegularExpression& regex, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool include_inlines, 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool append, 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SymbolContextList& sc_list); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual uint32_t 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) FindTypes (const SymbolContext& sc, 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const ConstString &name, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ClangNamespaceDecl *namespace_decl, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool append, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) uint32_t max_matches, 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TypeList& types); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual lldb_private::ClangNamespaceDecl 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FindNamespace (const SymbolContext& sc, 139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const ConstString &name, 140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const ClangNamespaceDecl *parent_namespace_decl); 14123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 14223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual uint32_t 14323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) GetNumCompileUnits(); 14423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 14523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) virtual bool 14623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) SetCompileUnitAtIndex (uint32_t cu_idx, 14723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) const lldb::CompUnitSP &cu_sp); 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual lldb::CompUnitSP 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetCompileUnitAtIndex(uint32_t idx); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TypeList& 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetTypeList() 154a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) { 155a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return m_type_list; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 158010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const TypeList& 159010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) GetTypeList() const 160010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) { 161010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return m_type_list; 162010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 163010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 164010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) SymbolFile * 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetSymbolFile() 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return m_sym_file_ap.get(); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //------------------------------------------------------------------ 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // PluginInterface protocol 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //------------------------------------------------------------------ 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const char * 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPluginName(); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual const char * 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetShortPluginName(); 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual uint32_t 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPluginVersion(); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 182a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)protected: 1836e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) //------------------------------------------------------------------ 1846e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // Classes that inherit from SymbolVendor can see and modify these 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //------------------------------------------------------------------ 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef std::vector<lldb::CompUnitSP> CompileUnits; 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef CompileUnits::iterator CompileUnitIter; 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) typedef CompileUnits::const_iterator CompileUnitConstIter; 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) TypeList m_type_list; // Uniqued types for all parsers owned by this module 191a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) CompileUnits m_compile_units; // The current compile units 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) lldb::ObjectFileSP m_objfile_sp; // Keep a reference to the object file in case it isn't the same as the module object file (debug symbols in a separate file) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::auto_ptr<SymbolFile> m_sym_file_ap; // A single symbol file. Suclasses can add more of these if needed. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liuprivate: 1965c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu //------------------------------------------------------------------ 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // For SymbolVendor only 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) //------------------------------------------------------------------ 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN (SymbolVendor); 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace lldb_private 2045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif // liblldb_SymbolVendor_h_ 206a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)