ObjectFileJIT.h revision 344779
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// This class needs to be hidden as eventually belongs in a plugin that 18// will export the ObjectFile protocol 19//---------------------------------------------------------------------- 20class ObjectFileJIT : public lldb_private::ObjectFile { 21public: 22 ObjectFileJIT(const lldb::ModuleSP &module_sp, 23 const lldb::ObjectFileJITDelegateSP &delegate_sp); 24 25 ~ObjectFileJIT() override; 26 27 //------------------------------------------------------------------ 28 // Static Functions 29 //------------------------------------------------------------------ 30 static void Initialize(); 31 32 static void Terminate(); 33 34 static lldb_private::ConstString GetPluginNameStatic(); 35 36 static const char *GetPluginDescriptionStatic(); 37 38 static lldb_private::ObjectFile * 39 CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp, 40 lldb::offset_t data_offset, const lldb_private::FileSpec *file, 41 lldb::offset_t file_offset, lldb::offset_t length); 42 43 static lldb_private::ObjectFile *CreateMemoryInstance( 44 const lldb::ModuleSP &module_sp, lldb::DataBufferSP &data_sp, 45 const lldb::ProcessSP &process_sp, lldb::addr_t header_addr); 46 47 static size_t GetModuleSpecifications(const lldb_private::FileSpec &file, 48 lldb::DataBufferSP &data_sp, 49 lldb::offset_t data_offset, 50 lldb::offset_t file_offset, 51 lldb::offset_t length, 52 lldb_private::ModuleSpecList &specs); 53 54 //------------------------------------------------------------------ 55 // Member Functions 56 //------------------------------------------------------------------ 57 bool ParseHeader() override; 58 59 bool SetLoadAddress(lldb_private::Target &target, lldb::addr_t value, 60 bool value_is_offset) override; 61 62 lldb::ByteOrder GetByteOrder() const override; 63 64 bool IsExecutable() const override; 65 66 uint32_t GetAddressByteSize() const override; 67 68 lldb_private::Symtab *GetSymtab() override; 69 70 bool IsStripped() override; 71 72 void CreateSections(lldb_private::SectionList &unified_section_list) override; 73 74 void Dump(lldb_private::Stream *s) override; 75 76 lldb_private::ArchSpec GetArchitecture() override; 77 78 bool GetUUID(lldb_private::UUID *uuid) override; 79 80 uint32_t GetDependentModules(lldb_private::FileSpecList &files) override; 81 82 size_t ReadSectionData(lldb_private::Section *section, 83 lldb::offset_t section_offset, void *dst, 84 size_t dst_len) override; 85 86 size_t 87 ReadSectionData(lldb_private::Section *section, 88 lldb_private::DataExtractor §ion_data) override; 89 90 lldb_private::Address GetEntryPointAddress() override; 91 92 lldb_private::Address GetBaseAddress() override; 93 94 ObjectFile::Type CalculateType() override; 95 96 ObjectFile::Strata CalculateStrata() override; 97 98 //------------------------------------------------------------------ 99 // PluginInterface protocol 100 //------------------------------------------------------------------ 101 lldb_private::ConstString GetPluginName() override; 102 103 uint32_t GetPluginVersion() override; 104 105protected: 106 lldb::ObjectFileJITDelegateWP m_delegate_wp; 107}; 108 109#endif // liblldb_ObjectFileJIT_h_ 110