diff options
Diffstat (limited to 'include/llvm/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h')
-rw-r--r-- | include/llvm/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h b/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h new file mode 100644 index 0000000..96dc242 --- /dev/null +++ b/include/llvm/ExecutionEngine/Orc/OrcRemoteTargetRPCAPI.h @@ -0,0 +1,185 @@ +//===--- OrcRemoteTargetRPCAPI.h - Orc Remote-target RPC API ----*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file defines the Orc remote-target RPC API. It should not be used +// directly, but is used by the RemoteTargetClient and RemoteTargetServer +// classes. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_EXECUTIONENGINE_ORC_ORCREMOTETARGETRPCAPI_H +#define LLVM_EXECUTIONENGINE_ORC_ORCREMOTETARGETRPCAPI_H + +#include "JITSymbol.h" +#include "RPCChannel.h" +#include "RPCUtils.h" + +namespace llvm { +namespace orc { +namespace remote { + +class OrcRemoteTargetRPCAPI : public RPC<RPCChannel> { +protected: + class ResourceIdMgr { + public: + typedef uint64_t ResourceId; + ResourceIdMgr() : NextId(0) {} + ResourceId getNext() { + if (!FreeIds.empty()) { + ResourceId I = FreeIds.back(); + FreeIds.pop_back(); + return I; + } + return NextId++; + } + void release(ResourceId I) { FreeIds.push_back(I); } + + private: + ResourceId NextId; + std::vector<ResourceId> FreeIds; + }; + +public: + enum JITProcId : uint32_t { + InvalidId = 0, + CallIntVoidId, + CallIntVoidResponseId, + CallMainId, + CallMainResponseId, + CallVoidVoidId, + CallVoidVoidResponseId, + CreateRemoteAllocatorId, + CreateIndirectStubsOwnerId, + DestroyRemoteAllocatorId, + DestroyIndirectStubsOwnerId, + EmitIndirectStubsId, + EmitIndirectStubsResponseId, + EmitResolverBlockId, + EmitTrampolineBlockId, + EmitTrampolineBlockResponseId, + GetSymbolAddressId, + GetSymbolAddressResponseId, + GetRemoteInfoId, + GetRemoteInfoResponseId, + ReadMemId, + ReadMemResponseId, + ReserveMemId, + ReserveMemResponseId, + RequestCompileId, + RequestCompileResponseId, + SetProtectionsId, + TerminateSessionId, + WriteMemId, + WritePtrId + }; + + static const char *getJITProcIdName(JITProcId Id); + + typedef Procedure<CallIntVoidId, TargetAddress /* FnAddr */> CallIntVoid; + + typedef Procedure<CallIntVoidResponseId, int /* Result */> + CallIntVoidResponse; + + typedef Procedure<CallMainId, TargetAddress /* FnAddr */, + std::vector<std::string> /* Args */> + CallMain; + + typedef Procedure<CallMainResponseId, int /* Result */> CallMainResponse; + + typedef Procedure<CallVoidVoidId, TargetAddress /* FnAddr */> CallVoidVoid; + + typedef Procedure<CallVoidVoidResponseId> CallVoidVoidResponse; + + typedef Procedure<CreateRemoteAllocatorId, + ResourceIdMgr::ResourceId /* Allocator ID */> + CreateRemoteAllocator; + + typedef Procedure<CreateIndirectStubsOwnerId, + ResourceIdMgr::ResourceId /* StubsOwner ID */> + CreateIndirectStubsOwner; + + typedef Procedure<DestroyRemoteAllocatorId, + ResourceIdMgr::ResourceId /* Allocator ID */> + DestroyRemoteAllocator; + + typedef Procedure<DestroyIndirectStubsOwnerId, + ResourceIdMgr::ResourceId /* StubsOwner ID */> + DestroyIndirectStubsOwner; + + typedef Procedure<EmitIndirectStubsId, + ResourceIdMgr::ResourceId /* StubsOwner ID */, + uint32_t /* NumStubsRequired */> + EmitIndirectStubs; + + typedef Procedure< + EmitIndirectStubsResponseId, TargetAddress /* StubsBaseAddr */, + TargetAddress /* PtrsBaseAddr */, uint32_t /* NumStubsEmitted */> + EmitIndirectStubsResponse; + + typedef Procedure<EmitResolverBlockId> EmitResolverBlock; + + typedef Procedure<EmitTrampolineBlockId> EmitTrampolineBlock; + + typedef Procedure<EmitTrampolineBlockResponseId, + TargetAddress /* BlockAddr */, + uint32_t /* NumTrampolines */> + EmitTrampolineBlockResponse; + + typedef Procedure<GetSymbolAddressId, std::string /*SymbolName*/> + GetSymbolAddress; + + typedef Procedure<GetSymbolAddressResponseId, uint64_t /* SymbolAddr */> + GetSymbolAddressResponse; + + typedef Procedure<GetRemoteInfoId> GetRemoteInfo; + + typedef Procedure<GetRemoteInfoResponseId, std::string /* Triple */, + uint32_t /* PointerSize */, uint32_t /* PageSize */, + uint32_t /* TrampolineSize */, + uint32_t /* IndirectStubSize */> + GetRemoteInfoResponse; + + typedef Procedure<ReadMemId, TargetAddress /* Src */, uint64_t /* Size */> + ReadMem; + + typedef Procedure<ReadMemResponseId> ReadMemResponse; + + typedef Procedure<ReserveMemId, ResourceIdMgr::ResourceId /* Id */, + uint64_t /* Size */, uint32_t /* Align */> + ReserveMem; + + typedef Procedure<ReserveMemResponseId, TargetAddress /* Addr */> + ReserveMemResponse; + + typedef Procedure<RequestCompileId, TargetAddress /* TrampolineAddr */> + RequestCompile; + + typedef Procedure<RequestCompileResponseId, TargetAddress /* ImplAddr */> + RequestCompileResponse; + + typedef Procedure<SetProtectionsId, ResourceIdMgr::ResourceId /* Id */, + TargetAddress /* Dst */, uint32_t /* ProtFlags */> + SetProtections; + + typedef Procedure<TerminateSessionId> TerminateSession; + + typedef Procedure<WriteMemId, TargetAddress /* Dst */, uint64_t /* Size */ + /* Data should follow */> + WriteMem; + + typedef Procedure<WritePtrId, TargetAddress /* Dst */, + TargetAddress /* Val */> + WritePtr; +}; + +} // end namespace remote +} // end namespace orc +} // end namespace llvm + +#endif |