LLVM 22.0.0git
MemoryAccess.h
Go to the documentation of this file.
1//===------- MemoryAccess.h - Executor memory access APIs -------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8//
9// Utilities for accessing memory in the executor processes.
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef LLVM_EXECUTIONENGINE_ORC_MEMORYACCESS_H
14#define LLVM_EXECUTIONENGINE_ORC_MEMORYACCESS_H
15
16#include "llvm/ADT/ArrayRef.h"
20
21#include <future>
22
23namespace llvm::orc {
24
25/// APIs for manipulating memory in the target process.
27public:
28 /// Callback function for asynchronous writes.
30
31 template <typename T> using ReadUIntsResult = std::vector<T>;
32 template <typename T>
35
36 using ReadPointersResult = std::vector<ExecutorAddr>;
39
40 using ReadBuffersResult = std::vector<std::vector<uint8_t>>;
43
44 using ReadStringsResult = std::vector<std::string>;
47
48 virtual ~MemoryAccess();
49
51 WriteResultFn OnWriteComplete) = 0;
52
54 WriteResultFn OnWriteComplete) = 0;
55
57 WriteResultFn OnWriteComplete) = 0;
58
60 WriteResultFn OnWriteComplete) = 0;
61
63 WriteResultFn OnWriteComplete) = 0;
64
66 WriteResultFn OnWriteComplete) = 0;
67
69 OnReadUIntsCompleteFn<uint8_t> OnComplete) = 0;
70
72 OnReadUIntsCompleteFn<uint16_t> OnComplete) = 0;
73
75 OnReadUIntsCompleteFn<uint32_t> OnComplete) = 0;
76
78 OnReadUIntsCompleteFn<uint64_t> OnComplete) = 0;
79
81 OnReadPointersCompleteFn OnComplete) = 0;
82
84 OnReadBuffersCompleteFn OnComplete) = 0;
85
87 OnReadStringsCompleteFn OnComplete) = 0;
88
90 std::promise<MSVCPError> ResultP;
91 auto ResultF = ResultP.get_future();
92 writeUInt8sAsync(Ws, [&](Error Err) { ResultP.set_value(std::move(Err)); });
93 return ResultF.get();
94 }
95
97 std::promise<MSVCPError> ResultP;
98 auto ResultF = ResultP.get_future();
100 [&](Error Err) { ResultP.set_value(std::move(Err)); });
101 return ResultF.get();
102 }
103
105 std::promise<MSVCPError> ResultP;
106 auto ResultF = ResultP.get_future();
108 [&](Error Err) { ResultP.set_value(std::move(Err)); });
109 return ResultF.get();
110 }
111
113 std::promise<MSVCPError> ResultP;
114 auto ResultF = ResultP.get_future();
116 [&](Error Err) { ResultP.set_value(std::move(Err)); });
117 return ResultF.get();
118 }
119
121 std::promise<MSVCPError> ResultP;
122 auto ResultF = ResultP.get_future();
124 [&](Error Err) { ResultP.set_value(std::move(Err)); });
125 return ResultF.get();
126 }
127
129 std::promise<MSVCPError> ResultP;
130 auto ResultF = ResultP.get_future();
132 [&](Error Err) { ResultP.set_value(std::move(Err)); });
133 return ResultF.get();
134 }
135
137 std::promise<MSVCPExpected<ReadUIntsResult<uint8_t>>> P;
139 P.set_value(std::move(Result));
140 });
141 return P.get_future().get();
142 }
143
145 std::promise<MSVCPExpected<ReadUIntsResult<uint16_t>>> P;
147 P.set_value(std::move(Result));
148 });
149 return P.get_future().get();
150 }
151
153 std::promise<MSVCPExpected<ReadUIntsResult<uint32_t>>> P;
155 P.set_value(std::move(Result));
156 });
157 return P.get_future().get();
158 }
159
161 std::promise<MSVCPExpected<ReadUIntsResult<uint64_t>>> P;
163 P.set_value(std::move(Result));
164 });
165 return P.get_future().get();
166 }
167
169 std::promise<MSVCPExpected<ReadPointersResult>> P;
171 P.set_value(std::move(Result));
172 });
173 return P.get_future().get();
174 }
175
177 std::promise<MSVCPExpected<ReadBuffersResult>> P;
179 P.set_value(std::move(Result));
180 });
181 return P.get_future().get();
182 }
183
185 std::promise<MSVCPExpected<ReadStringsResult>> P;
187 P.set_value(std::move(Result));
188 });
189 return P.get_future().get();
190 }
191};
192
193} // namespace llvm::orc
194
195#endif // LLVM_EXECUTIONENGINE_ORC_MEMORYACCESS_H
#define LLVM_ABI
Definition Compiler.h:213
This file provides a collection of function (or more generally, callable) type erasure utilities supp...
#define P(N)
ArrayRef - Represent a constant reference to an array (0 or more elements consecutively in memory),...
Definition ArrayRef.h:41
Lightweight error class with error context and mandatory checking.
Definition Error.h:159
Tagged union holding either a T or a Error.
Definition Error.h:485
APIs for manipulating memory in the target process.
Expected< ReadUIntsResult< uint64_t > > readUInt64s(ArrayRef< ExecutorAddr > Rs)
unique_function< void(Expected< ReadStringsResult >)> OnReadStringsCompleteFn
Expected< ReadBuffersResult > readBuffers(ArrayRef< ExecutorAddrRange > Rs)
Error writeBuffers(ArrayRef< tpctypes::BufferWrite > Ws)
unique_function< void(Expected< ReadBuffersResult >)> OnReadBuffersCompleteFn
virtual void writeUInt64sAsync(ArrayRef< tpctypes::UInt64Write > Ws, WriteResultFn OnWriteComplete)=0
virtual void readPointersAsync(ArrayRef< ExecutorAddr > Rs, OnReadPointersCompleteFn OnComplete)=0
unique_function< void(Expected< ReadPointersResult >)> OnReadPointersCompleteFn
virtual void readUInt8sAsync(ArrayRef< ExecutorAddr > Rs, OnReadUIntsCompleteFn< uint8_t > OnComplete)=0
Error writeUInt8s(ArrayRef< tpctypes::UInt8Write > Ws)
virtual void readUInt16sAsync(ArrayRef< ExecutorAddr > Rs, OnReadUIntsCompleteFn< uint16_t > OnComplete)=0
std::vector< std::vector< uint8_t > > ReadBuffersResult
virtual void readUInt32sAsync(ArrayRef< ExecutorAddr > Rs, OnReadUIntsCompleteFn< uint32_t > OnComplete)=0
unique_function< void(Error)> WriteResultFn
Callback function for asynchronous writes.
Expected< ReadStringsResult > readStrings(ArrayRef< ExecutorAddr > Rs)
std::vector< std::string > ReadStringsResult
virtual void writeUInt16sAsync(ArrayRef< tpctypes::UInt16Write > Ws, WriteResultFn OnWriteComplete)=0
unique_function< void(Expected< ReadUIntsResult< T > >)> OnReadUIntsCompleteFn
Error writeUInt16s(ArrayRef< tpctypes::UInt16Write > Ws)
virtual void writeUInt32sAsync(ArrayRef< tpctypes::UInt32Write > Ws, WriteResultFn OnWriteComplete)=0
virtual void writeBuffersAsync(ArrayRef< tpctypes::BufferWrite > Ws, WriteResultFn OnWriteComplete)=0
virtual void writeUInt8sAsync(ArrayRef< tpctypes::UInt8Write > Ws, WriteResultFn OnWriteComplete)=0
virtual void readUInt64sAsync(ArrayRef< ExecutorAddr > Rs, OnReadUIntsCompleteFn< uint64_t > OnComplete)=0
virtual void readStringsAsync(ArrayRef< ExecutorAddr > Rs, OnReadStringsCompleteFn OnComplete)=0
virtual void writePointersAsync(ArrayRef< tpctypes::PointerWrite > Ws, WriteResultFn OnWriteComplete)=0
std::vector< ExecutorAddr > ReadPointersResult
Expected< ReadPointersResult > readPointers(ArrayRef< ExecutorAddr > Rs)
Error writePointers(ArrayRef< tpctypes::PointerWrite > Ws)
Expected< ReadUIntsResult< uint8_t > > readUInt8s(ArrayRef< ExecutorAddr > Rs)
Error writeUInt32s(ArrayRef< tpctypes::UInt32Write > Ws)
Error writeUInt64s(ArrayRef< tpctypes::UInt64Write > Ws)
std::vector< T > ReadUIntsResult
virtual void readBuffersAsync(ArrayRef< ExecutorAddrRange > Rs, OnReadBuffersCompleteFn OnComplete)=0
Expected< ReadUIntsResult< uint32_t > > readUInt32s(ArrayRef< ExecutorAddr > Rs)
Expected< ReadUIntsResult< uint16_t > > readUInt16s(ArrayRef< ExecutorAddr > Rs)
unique_function is a type-erasing functor similar to std::function.