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