1 //===--- OrcRemoteTargetRPCAPI.h - Orc Remote-target RPC API ----*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file defines the Orc remote-target RPC API. It should not be used
11 // directly, but is used by the RemoteTargetClient and RemoteTargetServer
14 //===----------------------------------------------------------------------===//
16 #ifndef LLVM_EXECUTIONENGINE_ORC_ORCREMOTETARGETRPCAPI_H
17 #define LLVM_EXECUTIONENGINE_ORC_ORCREMOTETARGETRPCAPI_H
19 #include "JITSymbol.h"
20 #include "RPCChannel.h"
27 class OrcRemoteTargetRPCAPI : public RPC<RPCChannel> {
31 typedef uint64_t ResourceId;
32 ResourceIdMgr() : NextId(0) {}
33 ResourceId getNext() {
34 if (!FreeIds.empty()) {
35 ResourceId I = FreeIds.back();
41 void release(ResourceId I) { FreeIds.push_back(I); }
45 std::vector<ResourceId> FreeIds;
49 enum JITProcId : uint32_t {
52 CallIntVoidResponseId,
56 CallVoidVoidResponseId,
57 CreateRemoteAllocatorId,
58 CreateIndirectStubsOwnerId,
59 DestroyRemoteAllocatorId,
60 DestroyIndirectStubsOwnerId,
62 EmitIndirectStubsResponseId,
64 EmitTrampolineBlockId,
65 EmitTrampolineBlockResponseId,
67 GetSymbolAddressResponseId,
69 GetRemoteInfoResponseId,
75 RequestCompileResponseId,
82 static const char *getJITProcIdName(JITProcId Id);
84 typedef Procedure<CallIntVoidId, TargetAddress /* FnAddr */> CallIntVoid;
86 typedef Procedure<CallIntVoidResponseId, int /* Result */>
89 typedef Procedure<CallMainId, TargetAddress /* FnAddr */,
90 std::vector<std::string> /* Args */>
93 typedef Procedure<CallMainResponseId, int /* Result */> CallMainResponse;
95 typedef Procedure<CallVoidVoidId, TargetAddress /* FnAddr */> CallVoidVoid;
97 typedef Procedure<CallVoidVoidResponseId> CallVoidVoidResponse;
99 typedef Procedure<CreateRemoteAllocatorId,
100 ResourceIdMgr::ResourceId /* Allocator ID */>
101 CreateRemoteAllocator;
103 typedef Procedure<CreateIndirectStubsOwnerId,
104 ResourceIdMgr::ResourceId /* StubsOwner ID */>
105 CreateIndirectStubsOwner;
107 typedef Procedure<DestroyRemoteAllocatorId,
108 ResourceIdMgr::ResourceId /* Allocator ID */>
109 DestroyRemoteAllocator;
111 typedef Procedure<DestroyIndirectStubsOwnerId,
112 ResourceIdMgr::ResourceId /* StubsOwner ID */>
113 DestroyIndirectStubsOwner;
115 typedef Procedure<EmitIndirectStubsId,
116 ResourceIdMgr::ResourceId /* StubsOwner ID */,
117 uint32_t /* NumStubsRequired */>
121 EmitIndirectStubsResponseId, TargetAddress /* StubsBaseAddr */,
122 TargetAddress /* PtrsBaseAddr */, uint32_t /* NumStubsEmitted */>
123 EmitIndirectStubsResponse;
125 typedef Procedure<EmitResolverBlockId> EmitResolverBlock;
127 typedef Procedure<EmitTrampolineBlockId> EmitTrampolineBlock;
129 typedef Procedure<EmitTrampolineBlockResponseId,
130 TargetAddress /* BlockAddr */,
131 uint32_t /* NumTrampolines */>
132 EmitTrampolineBlockResponse;
134 typedef Procedure<GetSymbolAddressId, std::string /*SymbolName*/>
137 typedef Procedure<GetSymbolAddressResponseId, uint64_t /* SymbolAddr */>
138 GetSymbolAddressResponse;
140 typedef Procedure<GetRemoteInfoId> GetRemoteInfo;
142 typedef Procedure<GetRemoteInfoResponseId, std::string /* Triple */,
143 uint32_t /* PointerSize */, uint32_t /* PageSize */,
144 uint32_t /* TrampolineSize */,
145 uint32_t /* IndirectStubSize */>
146 GetRemoteInfoResponse;
148 typedef Procedure<ReadMemId, TargetAddress /* Src */, uint64_t /* Size */>
151 typedef Procedure<ReadMemResponseId> ReadMemResponse;
153 typedef Procedure<ReserveMemId, ResourceIdMgr::ResourceId /* Id */,
154 uint64_t /* Size */, uint32_t /* Align */>
157 typedef Procedure<ReserveMemResponseId, TargetAddress /* Addr */>
160 typedef Procedure<RequestCompileId, TargetAddress /* TrampolineAddr */>
163 typedef Procedure<RequestCompileResponseId, TargetAddress /* ImplAddr */>
164 RequestCompileResponse;
166 typedef Procedure<SetProtectionsId, ResourceIdMgr::ResourceId /* Id */,
167 TargetAddress /* Dst */, uint32_t /* ProtFlags */>
170 typedef Procedure<TerminateSessionId> TerminateSession;
172 typedef Procedure<WriteMemId, TargetAddress /* Dst */, uint64_t /* Size */
173 /* Data should follow */>
176 typedef Procedure<WritePtrId, TargetAddress /* Dst */,
177 TargetAddress /* Val */>
181 } // end namespace remote
182 } // end namespace orc
183 } // end namespace llvm