//===--- 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 { 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 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 CallIntVoid; typedef Procedure CallIntVoidResponse; typedef Procedure /* Args */> CallMain; typedef Procedure CallMainResponse; typedef Procedure CallVoidVoid; typedef Procedure CallVoidVoidResponse; typedef Procedure CreateRemoteAllocator; typedef Procedure CreateIndirectStubsOwner; typedef Procedure DestroyRemoteAllocator; typedef Procedure DestroyIndirectStubsOwner; typedef Procedure EmitIndirectStubs; typedef Procedure< EmitIndirectStubsResponseId, TargetAddress /* StubsBaseAddr */, TargetAddress /* PtrsBaseAddr */, uint32_t /* NumStubsEmitted */> EmitIndirectStubsResponse; typedef Procedure EmitResolverBlock; typedef Procedure EmitTrampolineBlock; typedef Procedure EmitTrampolineBlockResponse; typedef Procedure GetSymbolAddress; typedef Procedure GetSymbolAddressResponse; typedef Procedure GetRemoteInfo; typedef Procedure GetRemoteInfoResponse; typedef Procedure ReadMem; typedef Procedure ReadMemResponse; typedef Procedure ReserveMem; typedef Procedure ReserveMemResponse; typedef Procedure RequestCompile; typedef Procedure RequestCompileResponse; typedef Procedure SetProtections; typedef Procedure TerminateSession; typedef Procedure WriteMem; typedef Procedure WritePtr; }; } // end namespace remote } // end namespace orc } // end namespace llvm #endif