13#ifndef LLVM_EXECUTIONENGINE_ORC_SIMPLEREMOTEEPC_H
14#define LLVM_EXECUTIONENGINE_ORC_SIMPLEREMOTEEPC_H
45 template <
typename TransportT,
typename... TransportTCtorArgTs>
48 TransportTCtorArgTs &&...TransportTCtorArgs) {
49 std::unique_ptr<SimpleRemoteEPC> SREPC(
52 auto T = TransportT::Create(
53 *SREPC, std::forward<TransportTCtorArgTs>(TransportTCtorArgs)...);
56 SREPC->T = std::move(*T);
57 if (
auto Err = SREPC->setup(std::move(S)))
58 return joinErrors(std::move(Err), SREPC->disconnect());
59 return std::move(SREPC);
93 std::unique_ptr<TaskDispatcher>
D)
112 uint64_t getNextSeqNo() {
return NextSeqNo++; }
113 void releaseSeqNo(
uint64_t SeqNo) {}
115 using PendingCallWrapperResultsMap =
116 DenseMap<uint64_t, IncomingWFRHandler>;
118 std::mutex SimpleRemoteEPCMutex;
119 std::condition_variable DisconnectCV;
120 bool Disconnected =
false;
121 Error DisconnectErr = Error::success();
123 std::unique_ptr<SimpleRemoteEPCTransport>
T;
124 std::unique_ptr<jitlink::JITLinkMemoryManager> OwnedMemMgr;
126 ExecutorAddr RunAsMainAddr;
127 ExecutorAddr RunAsVoidFunctionAddr;
128 ExecutorAddr RunAsIntFunctionAddr;
131 PendingCallWrapperResultsMap PendingCallWrapperResults;
This file defines the DenseMap class.
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Lightweight error class with error context and mandatory checking.
Tagged union holding either a T or a Error.
Represents an address in the executor process.
A handler or incoming WrapperFunctionBuffers – either return values from callWrapper* calls,...
std::unique_ptr< TaskDispatcher > D
std::shared_ptr< SymbolStringPool > SSP
ExecutorProcessControl(std::shared_ptr< SymbolStringPool > SSP, std::unique_ptr< TaskDispatcher > D)
void handleDisconnect(Error Err) override
Handle a disconnection from the underlying transport.
SimpleRemoteEPC & operator=(const SimpleRemoteEPC &)=delete
Expected< std::unique_ptr< MemoryAccess > > createDefaultMemoryAccess() override
Create a default MemoryAccess for the target process.
Expected< int32_t > runAsMain(ExecutorAddr MainFnAddr, ArrayRef< std::string > Args) override
Run function with a main-like signature.
static Expected< std::unique_ptr< SimpleRemoteEPC > > Create(std::unique_ptr< TaskDispatcher > D, Setup S, TransportTCtorArgTs &&...TransportTCtorArgs)
Create a SimpleRemoteEPC using the given transport type and args.
SimpleRemoteEPC(const SimpleRemoteEPC &)=delete
Expected< HandleMessageAction > handleMessage(SimpleRemoteEPCOpcode OpC, uint64_t SeqNo, ExecutorAddr TagAddr, shared::WrapperFunctionBuffer ArgBytes) override
Handle receipt of a message.
Expected< std::unique_ptr< DylibManager > > createDefaultDylibMgr() override
Create a default DylibManager for the target process.
Error disconnect() override
Disconnect from the target process.
Expected< int32_t > runAsVoidFunction(ExecutorAddr VoidFnAddr) override
Run function with a int (*)(void) signature.
SimpleRemoteEPC(SimpleRemoteEPC &&)=delete
SimpleRemoteEPC & operator=(SimpleRemoteEPC &&)=delete
void callWrapperAsync(ExecutorAddr WrapperFnAddr, IncomingWFRHandler OnComplete, ArrayRef< char > ArgBuffer) override
Run a wrapper function in the executor.
Expected< int32_t > runAsIntFunction(ExecutorAddr IntFnAddr, int Arg) override
Run function with a int (*)(int) signature.
C++ wrapper function buffer: Same as CWrapperFunctionBuffer but auto-releases memory.
unique_function is a type-erasing functor similar to std::function.
This is an optimization pass for GlobalISel generic memory operations.
Error joinErrors(Error E1, Error E2)
Concatenate errors.
OutputIt move(R &&Range, OutputIt Out)
Provide wrappers to std::move which take ranges instead of having to pass begin/end explicitly.
Implement std::hash so that hash_code can be used in STL containers.
A setup object containing a callback to construct a memory manager.
Expected< std::unique_ptr< jitlink::JITLinkMemoryManager > >( SimpleRemoteEPC &) CreateMemoryManagerFn
unique_function< CreateMemoryManagerFn > CreateMemoryManager