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)