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 &section_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