18#ifndef LLVM_EXECUTIONENGINE_ORC_EPCGENERICMEMORYACCESS_H
19#define LLVM_EXECUTIONENGINE_ORC_EPCGENERICMEMORYACCESS_H
48 : EPC(EPC), FAs(FAs) {}
53 EPC.callSPSWrapperAsync<void(SPSSequence<SPSMemoryAccessUInt8Write>)>(
54 FAs.WriteUInt8s, std::move(OnWriteComplete), Ws);
60 EPC.callSPSWrapperAsync<void(SPSSequence<SPSMemoryAccessUInt16Write>)>(
61 FAs.WriteUInt16s, std::move(OnWriteComplete), Ws);
67 EPC.callSPSWrapperAsync<void(SPSSequence<SPSMemoryAccessUInt32Write>)>(
68 FAs.WriteUInt32s, std::move(OnWriteComplete), Ws);
74 EPC.callSPSWrapperAsync<void(SPSSequence<SPSMemoryAccessUInt64Write>)>(
75 FAs.WriteUInt64s, std::move(OnWriteComplete), Ws);
81 EPC.callSPSWrapperAsync<void(SPSSequence<SPSMemoryAccessPointerWrite>)>(
82 FAs.WritePointers, std::move(OnWriteComplete), Ws);
88 EPC.callSPSWrapperAsync<void(SPSSequence<SPSMemoryAccessBufferWrite>)>(
89 FAs.WriteBuffers, std::move(OnWriteComplete), Ws);
95 EPC.callSPSWrapperAsync<SPSSequence<uint8_t>(SPSSequence<SPSExecutorAddr>)>(
97 [OnComplete = std::move(OnComplete)](
100 OnComplete(std::move(Err));
102 OnComplete(std::move(
Result));
110 EPC.callSPSWrapperAsync<SPSSequence<uint16_t>(
111 SPSSequence<SPSExecutorAddr>)>(
113 [OnComplete = std::move(OnComplete)](
116 OnComplete(std::move(Err));
118 OnComplete(std::move(
Result));
126 EPC.callSPSWrapperAsync<SPSSequence<uint32_t>(
127 SPSSequence<SPSExecutorAddr>)>(
129 [OnComplete = std::move(OnComplete)](
132 OnComplete(std::move(Err));
134 OnComplete(std::move(
Result));
142 EPC.callSPSWrapperAsync<SPSSequence<uint64_t>(
143 SPSSequence<SPSExecutorAddr>)>(
145 [OnComplete = std::move(OnComplete)](
148 OnComplete(std::move(Err));
150 OnComplete(std::move(
Result));
158 using SPSSig = SPSSequence<SPSExecutorAddr>(SPSSequence<SPSExecutorAddr>);
159 EPC.callSPSWrapperAsync<SPSSig>(
161 [OnComplete = std::move(OnComplete)](
164 OnComplete(std::move(Err));
166 OnComplete(std::move(
Result));
175 SPSSequence<SPSSequence<uint8_t>>(SPSSequence<SPSExecutorAddrRange>);
176 EPC.callSPSWrapperAsync<SPSSig>(
178 [OnComplete = std::move(OnComplete)](
Error Err,
181 OnComplete(std::move(Err));
183 OnComplete(std::move(
Result));
191 using SPSSig = SPSSequence<SPSString>(SPSSequence<SPSExecutorAddr>);
192 EPC.callSPSWrapperAsync<SPSSig>(
194 [OnComplete = std::move(OnComplete)](
Error Err,
197 OnComplete(std::move(Err));
199 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