ObjectFileJIT.h revision 276479
1//===-- ObjectFileJIT.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_ObjectFileJIT_h_
11#define liblldb_ObjectFileJIT_h_
12
13#include "lldb/Core/Address.h"
14#include "lldb/Symbol/ObjectFile.h"
15
16
17//----------------------------------------------------------------------
18// This class needs to be hidden as eventually belongs in a plugin that
19// will export the ObjectFile protocol
20//----------------------------------------------------------------------
21class ObjectFileJIT :
22    public lldb_private::ObjectFile
23{
24public:
25    //------------------------------------------------------------------
26    // Static Functions
27    //------------------------------------------------------------------
28    static void
29    Initialize();
30
31    static void
32    Terminate();
33
34    static lldb_private::ConstString
35    GetPluginNameStatic();
36
37    static const char *
38    GetPluginDescriptionStatic();
39
40    static lldb_private::ObjectFile *
41    CreateInstance (const lldb::ModuleSP &module_sp,
42                    lldb::DataBufferSP& data_sp,
43                    lldb::offset_t data_offset,
44                    const lldb_private::FileSpec* file,
45                    lldb::offset_t file_offset,
46                    lldb::offset_t length);
47
48    static lldb_private::ObjectFile *
49    CreateMemoryInstance (const lldb::ModuleSP &module_sp,
50                          lldb::DataBufferSP& data_sp,
51                          const lldb::ProcessSP &process_sp,
52                          lldb::addr_t header_addr);
53
54    static size_t
55    GetModuleSpecifications (const lldb_private::FileSpec& file,
56                             lldb::DataBufferSP& data_sp,
57                             lldb::offset_t data_offset,
58                             lldb::offset_t file_offset,
59                             lldb::offset_t length,
60                             lldb_private::ModuleSpecList &specs);
61
62    //------------------------------------------------------------------
63    // Member Functions
64    //------------------------------------------------------------------
65    ObjectFileJIT (const lldb::ModuleSP &module_sp,
66                   const lldb::ObjectFileJITDelegateSP &delegate_sp);
67
68    virtual
69    ~ObjectFileJIT();
70
71    virtual bool
72    ParseHeader ();
73
74    virtual bool
75    SetLoadAddress(lldb_private::Target &target,
76                   lldb::addr_t value,
77                   bool value_is_offset);
78
79    virtual lldb::ByteOrder
80    GetByteOrder () const;
81
82    virtual bool
83    IsExecutable () const;
84
85    virtual uint32_t
86    GetAddressByteSize ()  const;
87
88    virtual lldb_private::Symtab *
89    GetSymtab();
90
91    virtual bool
92    IsStripped ();
93
94    virtual void
95    CreateSections (lldb_private::SectionList &unified_section_list);
96
97    virtual void
98    Dump (lldb_private::Stream *s);
99
100    virtual bool
101    GetArchitecture (lldb_private::ArchSpec &arch);
102
103    virtual bool
104    GetUUID (lldb_private::UUID* uuid);
105
106    virtual uint32_t
107    GetDependentModules (lldb_private::FileSpecList& files);
108
109    virtual size_t
110    ReadSectionData (const lldb_private::Section *section,
111                     lldb::offset_t section_offset,
112                     void *dst,
113                     size_t dst_len) const;
114    virtual size_t
115    ReadSectionData (const lldb_private::Section *section,
116                     lldb_private::DataExtractor& section_data) const;
117
118    //------------------------------------------------------------------
119    // PluginInterface protocol
120    //------------------------------------------------------------------
121    virtual lldb_private::ConstString
122    GetPluginName();
123
124    virtual uint32_t
125    GetPluginVersion();
126
127    virtual lldb_private::Address
128    GetEntryPointAddress ();
129
130    virtual lldb_private::Address
131    GetHeaderAddress ();
132
133    virtual ObjectFile::Type
134    CalculateType();
135
136    virtual ObjectFile::Strata
137    CalculateStrata();
138protected:
139    lldb::ObjectFileJITDelegateWP m_delegate_wp;
140};
141
142#endif  // liblldb_ObjectFileJIT_h_
143