123f8c95aSGreg Clayton //===-- ObjectFileJIT.h -----------------------------------------*- C++ -*-===// 223f8c95aSGreg Clayton // 32946cd70SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42946cd70SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 52946cd70SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 623f8c95aSGreg Clayton // 723f8c95aSGreg Clayton //===----------------------------------------------------------------------===// 823f8c95aSGreg Clayton 9cdc514e4SJonas Devlieghere #ifndef LLDB_SOURCE_PLUGINS_OBJECTFILE_JIT_OBJECTFILEJIT_H 10cdc514e4SJonas Devlieghere #define LLDB_SOURCE_PLUGINS_OBJECTFILE_JIT_OBJECTFILEJIT_H 1123f8c95aSGreg Clayton 1223f8c95aSGreg Clayton #include "lldb/Core/Address.h" 1323f8c95aSGreg Clayton #include "lldb/Symbol/ObjectFile.h" 1423f8c95aSGreg Clayton 1523f8c95aSGreg Clayton // This class needs to be hidden as eventually belongs in a plugin that 1623f8c95aSGreg Clayton // will export the ObjectFile protocol 17b9c1b51eSKate Stone class ObjectFileJIT : public lldb_private::ObjectFile { 1823f8c95aSGreg Clayton public: 198157a887SEugene Zelenko ObjectFileJIT(const lldb::ModuleSP &module_sp, 208157a887SEugene Zelenko const lldb::ObjectFileJITDelegateSP &delegate_sp); 218157a887SEugene Zelenko 228157a887SEugene Zelenko ~ObjectFileJIT() override; 238157a887SEugene Zelenko 2423f8c95aSGreg Clayton // Static Functions 25b9c1b51eSKate Stone static void Initialize(); 2623f8c95aSGreg Clayton 27b9c1b51eSKate Stone static void Terminate(); 2823f8c95aSGreg Clayton GetPluginNameStatic()292ace1e57SPavel Labath static llvm::StringRef GetPluginNameStatic() { return "jit"; } 3023f8c95aSGreg Clayton GetPluginDescriptionStatic()312ace1e57SPavel Labath static llvm::StringRef GetPluginDescriptionStatic() { 322ace1e57SPavel Labath return "JIT code object file"; 332ace1e57SPavel Labath } 3423f8c95aSGreg Clayton 3523f8c95aSGreg Clayton static lldb_private::ObjectFile * 36c69307e5SJonas Devlieghere CreateInstance(const lldb::ModuleSP &module_sp, lldb::DataBufferSP data_sp, 37b9c1b51eSKate Stone lldb::offset_t data_offset, const lldb_private::FileSpec *file, 38b9c1b51eSKate Stone lldb::offset_t file_offset, lldb::offset_t length); 3923f8c95aSGreg Clayton 40b9c1b51eSKate Stone static lldb_private::ObjectFile *CreateMemoryInstance( 41*f2ea125eSJonas Devlieghere const lldb::ModuleSP &module_sp, lldb::WritableDataBufferSP data_sp, 42b9c1b51eSKate Stone const lldb::ProcessSP &process_sp, lldb::addr_t header_addr); 4323f8c95aSGreg Clayton 44b9c1b51eSKate Stone static size_t GetModuleSpecifications(const lldb_private::FileSpec &file, 4523f8c95aSGreg Clayton lldb::DataBufferSP &data_sp, 4623f8c95aSGreg Clayton lldb::offset_t data_offset, 4723f8c95aSGreg Clayton lldb::offset_t file_offset, 4823f8c95aSGreg Clayton lldb::offset_t length, 4923f8c95aSGreg Clayton lldb_private::ModuleSpecList &specs); 5023f8c95aSGreg Clayton 51e84f7841SPavel Labath // LLVM RTTI support 52e84f7841SPavel Labath static char ID; isA(const void * ClassID)53e84f7841SPavel Labath bool isA(const void *ClassID) const override { 54e84f7841SPavel Labath return ClassID == &ID || ObjectFile::isA(ClassID); 55e84f7841SPavel Labath } classof(const ObjectFile * obj)56e84f7841SPavel Labath static bool classof(const ObjectFile *obj) { return obj->isA(&ID); } 57e84f7841SPavel Labath 5823f8c95aSGreg Clayton // Member Functions 59b9c1b51eSKate Stone bool ParseHeader() override; 6023f8c95aSGreg Clayton 61b9c1b51eSKate Stone bool SetLoadAddress(lldb_private::Target &target, lldb::addr_t value, 628157a887SEugene Zelenko bool value_is_offset) override; 6323f8c95aSGreg Clayton 64b9c1b51eSKate Stone lldb::ByteOrder GetByteOrder() const override; 6523f8c95aSGreg Clayton 66b9c1b51eSKate Stone bool IsExecutable() const override; 6723f8c95aSGreg Clayton 68b9c1b51eSKate Stone uint32_t GetAddressByteSize() const override; 6923f8c95aSGreg Clayton 707e6df41fSGreg Clayton void ParseSymtab(lldb_private::Symtab &symtab) override; 7123f8c95aSGreg Clayton 72b9c1b51eSKate Stone bool IsStripped() override; 7323f8c95aSGreg Clayton 74b9c1b51eSKate Stone void CreateSections(lldb_private::SectionList &unified_section_list) override; 7523f8c95aSGreg Clayton 76b9c1b51eSKate Stone void Dump(lldb_private::Stream *s) override; 7723f8c95aSGreg Clayton 78f760f5aeSPavel Labath lldb_private::ArchSpec GetArchitecture() override; 7923f8c95aSGreg Clayton 80bd334efdSPavel Labath lldb_private::UUID GetUUID() override; 8123f8c95aSGreg Clayton 82b9c1b51eSKate Stone uint32_t GetDependentModules(lldb_private::FileSpecList &files) override; 8323f8c95aSGreg Clayton 84d13f691fSEd Maste size_t ReadSectionData(lldb_private::Section *section, 85b9c1b51eSKate Stone lldb::offset_t section_offset, void *dst, 86d13f691fSEd Maste size_t dst_len) override; 878157a887SEugene Zelenko 888157a887SEugene Zelenko size_t 89d13f691fSEd Maste ReadSectionData(lldb_private::Section *section, 90d13f691fSEd Maste lldb_private::DataExtractor §ion_data) override; 918157a887SEugene Zelenko 92b9c1b51eSKate Stone lldb_private::Address GetEntryPointAddress() override; 938157a887SEugene Zelenko 94d1e3fe21SPavel Labath lldb_private::Address GetBaseAddress() override; 958157a887SEugene Zelenko 96b9c1b51eSKate Stone ObjectFile::Type CalculateType() override; 978157a887SEugene Zelenko 98b9c1b51eSKate Stone ObjectFile::Strata CalculateStrata() override; 9923f8c95aSGreg Clayton 10023f8c95aSGreg Clayton // PluginInterface protocol GetPluginName()1012ace1e57SPavel Labath llvm::StringRef GetPluginName() override { return GetPluginNameStatic(); } 10223f8c95aSGreg Clayton 10323f8c95aSGreg Clayton protected: 10423f8c95aSGreg Clayton lldb::ObjectFileJITDelegateWP m_delegate_wp; 10523f8c95aSGreg Clayton }; 10623f8c95aSGreg Clayton 107cdc514e4SJonas Devlieghere #endif // LLDB_SOURCE_PLUGINS_OBJECTFILE_JIT_OBJECTFILEJIT_H 108