18#ifndef LLVM_EXECUTIONENGINE_ORC_EPCGENERICMEMORYACCESS_H
19#define LLVM_EXECUTIONENGINE_ORC_EPCGENERICMEMORYACCESS_H
49 : EPC(EPC), FAs(FAs) {}
54 EPC.callSPSWrapperAsync<void(SPSSequence<SPSMemoryAccessUInt8Write>)>(
55 FAs.WriteUInt8s, std::move(OnWriteComplete), Ws);
61 EPC.callSPSWrapperAsync<void(SPSSequence<SPSMemoryAccessUInt16Write>)>(
62 FAs.WriteUInt16s, std::move(OnWriteComplete), Ws);
68 EPC.callSPSWrapperAsync<void(SPSSequence<SPSMemoryAccessUInt32Write>)>(
69 FAs.WriteUInt32s, std::move(OnWriteComplete), Ws);
75 EPC.callSPSWrapperAsync<void(SPSSequence<SPSMemoryAccessUInt64Write>)>(
76 FAs.WriteUInt64s, std::move(OnWriteComplete), Ws);
82 EPC.callSPSWrapperAsync<void(SPSSequence<SPSMemoryAccessPointerWrite>)>(
83 FAs.WritePointers, std::move(OnWriteComplete), Ws);
89 EPC.callSPSWrapperAsync<void(SPSSequence<SPSMemoryAccessBufferWrite>)>(
90 FAs.WriteBuffers, std::move(OnWriteComplete), Ws);
96 EPC.callSPSWrapperAsync<SPSSequence<uint8_t>(SPSSequence<SPSExecutorAddr>)>(
98 [OnComplete = std::move(OnComplete)](
101 OnComplete(std::move(Err));
103 OnComplete(std::move(
Result));
111 EPC.callSPSWrapperAsync<SPSSequence<uint16_t>(
112 SPSSequence<SPSExecutorAddr>)>(
114 [OnComplete = std::move(OnComplete)](
117 OnComplete(std::move(Err));
119 OnComplete(std::move(
Result));
127 EPC.callSPSWrapperAsync<SPSSequence<uint32_t>(
128 SPSSequence<SPSExecutorAddr>)>(
130 [OnComplete = std::move(OnComplete)](
133 OnComplete(std::move(Err));
135 OnComplete(std::move(
Result));
143 EPC.callSPSWrapperAsync<SPSSequence<uint64_t>(
144 SPSSequence<SPSExecutorAddr>)>(
146 [OnComplete = std::move(OnComplete)](
149 OnComplete(std::move(Err));
151 OnComplete(std::move(
Result));
159 using SPSSig = SPSSequence<SPSExecutorAddr>(SPSSequence<SPSExecutorAddr>);
160 EPC.callSPSWrapperAsync<SPSSig>(
162 [OnComplete = std::move(OnComplete)](
165 OnComplete(std::move(Err));
167 OnComplete(std::move(
Result));
176 SPSSequence<SPSSequence<uint8_t>>(SPSSequence<SPSExecutorAddrRange>);
177 EPC.callSPSWrapperAsync<SPSSig>(
179 [OnComplete = std::move(OnComplete)](
Error Err,
182 OnComplete(std::move(Err));
184 OnComplete(std::move(
Result));
192 using SPSSig = SPSSequence<SPSString>(SPSSequence<SPSExecutorAddr>);
193 EPC.callSPSWrapperAsync<SPSSig>(
195 [OnComplete = std::move(OnComplete)](
Error Err,
198 OnComplete(std::move(Err));
200 OnComplete(std::move(
Result));
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Lightweight error class with error context and mandatory checking.
void readUInt8sAsync(ArrayRef< ExecutorAddr > Rs, OnReadUIntsCompleteFn< uint8_t > OnComplete) override
void readUInt32sAsync(ArrayRef< ExecutorAddr > Rs, OnReadUIntsCompleteFn< uint32_t > OnComplete) override
void writeUInt16sAsync(ArrayRef< tpctypes::UInt16Write > Ws, WriteResultFn OnWriteComplete) override
void readStringsAsync(ArrayRef< ExecutorAddr > Rs, OnReadStringsCompleteFn OnComplete) override
void readUInt16sAsync(ArrayRef< ExecutorAddr > Rs, OnReadUIntsCompleteFn< uint16_t > OnComplete) override
void readBuffersAsync(ArrayRef< ExecutorAddrRange > Rs, OnReadBuffersCompleteFn OnComplete) override
void writeUInt32sAsync(ArrayRef< tpctypes::UInt32Write > Ws, WriteResultFn OnWriteComplete) override
void writeUInt64sAsync(ArrayRef< tpctypes::UInt64Write > Ws, WriteResultFn OnWriteComplete) override
void writePointersAsync(ArrayRef< tpctypes::PointerWrite > Ws, WriteResultFn OnWriteComplete) override
void readUInt64sAsync(ArrayRef< ExecutorAddr > Rs, OnReadUIntsCompleteFn< uint64_t > OnComplete) override
void readPointersAsync(ArrayRef< ExecutorAddr > Rs, OnReadPointersCompleteFn OnComplete) override
EPCGenericMemoryAccess(ExecutorProcessControl &EPC, FuncAddrs FAs)
Create an EPCGenericMemoryAccess instance from a given set of function addrs.
void writeUInt8sAsync(ArrayRef< tpctypes::UInt8Write > Ws, WriteResultFn OnWriteComplete) override
void writeBuffersAsync(ArrayRef< tpctypes::BufferWrite > Ws, WriteResultFn OnWriteComplete) override
Represents an address in the executor process.
ExecutorProcessControl supports interaction with a JIT target process.
APIs for manipulating memory in the target process.
unique_function< void(Expected< ReadStringsResult >)> OnReadStringsCompleteFn
unique_function< void(Expected< ReadBuffersResult >)> OnReadBuffersCompleteFn
unique_function< void(Expected< ReadPointersResult >)> OnReadPointersCompleteFn
std::vector< std::vector< uint8_t > > ReadBuffersResult
unique_function< void(Error)> WriteResultFn
Callback function for asynchronous writes.
std::vector< std::string > ReadStringsResult
unique_function< void(Expected< ReadUIntsResult< T > >)> OnReadUIntsCompleteFn
std::vector< ExecutorAddr > ReadPointersResult
std::vector< T > ReadUIntsResult
This is an optimization pass for GlobalISel generic memory operations.
Function addresses for memory access.
ExecutorAddr ReadPointers
ExecutorAddr WritePointers
ExecutorAddr WriteUInt64s
ExecutorAddr WriteUInt16s
ExecutorAddr WriteUInt32s
ExecutorAddr WriteBuffers