Skip to content

Commit 20675d8

Browse files
committed
Revert "[ORC] Change SPSExecutorAddr serialization, SupportFunctionCall struct."
This reverts commit e32b1ee. Reverting while I fix some broken unit tests.
1 parent 8a4551b commit 20675d8

File tree

10 files changed

+59
-61
lines changed

10 files changed

+59
-61
lines changed

llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,6 @@ struct ExecutorAddrRange {
160160

161161
namespace shared {
162162

163-
class SPSExecutorAddr {};
164-
165163
/// SPS serializatior for ExecutorAddr.
166164
template <> class SPSSerializationTraits<SPSExecutorAddr, ExecutorAddr> {
167165
public:

llvm/include/llvm/ExecutionEngine/Orc/Shared/SimplePackedSerialization.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,13 @@ template <typename SPSElementTagT> class SPSSequence;
195195
/// SPS tag type for strings, which are equivalent to sequences of chars.
196196
using SPSString = SPSSequence<char>;
197197

198+
/// SPS tag type for executor addresseses.
199+
class SPSExecutorAddr {};
200+
201+
template <>
202+
class SPSSerializationTraits<SPSExecutorAddr, uint64_t>
203+
: public SPSSerializationTraits<uint64_t, uint64_t> {};
204+
198205
/// SPS tag type for maps.
199206
///
200207
/// SPS maps are just sequences of (Key, Value) tuples.

llvm/include/llvm/ExecutionEngine/Orc/Shared/TargetProcessControlTypes.h

Lines changed: 21 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -73,19 +73,12 @@ struct SupportFunctionCall {
7373
using FnTy = shared::detail::CWrapperFunctionResult(const char *ArgData,
7474
size_t ArgSize);
7575
ExecutorAddr Func;
76-
ExecutorAddrRange ArgDataRange;
77-
78-
SupportFunctionCall() = default;
79-
SupportFunctionCall(ExecutorAddr Func, ExecutorAddr ArgData,
80-
ExecutorAddrDiff ArgSize)
81-
: Func(Func), ArgDataRange(ArgData, ArgSize) {}
82-
SupportFunctionCall(ExecutorAddr Func, ExecutorAddrRange ArgDataRange)
83-
: Func(Func), ArgDataRange(ArgDataRange) {}
76+
ExecutorAddr ArgData;
77+
uint64_t ArgSize;
8478

8579
Error run() {
86-
shared::WrapperFunctionResult WFR(Func.toPtr<FnTy *>()(
87-
ArgDataRange.Start.toPtr<const char *>(),
88-
static_cast<size_t>(ArgDataRange.size().getValue())));
80+
shared::WrapperFunctionResult WFR(
81+
Func.toPtr<FnTy *>()(ArgData.toPtr<const char *>(), ArgSize));
8982
if (const char *ErrMsg = WFR.getOutOfBandError())
9083
return make_error<StringError>(ErrMsg, inconvertibleErrorCode());
9184
if (!WFR.empty())
@@ -115,9 +108,10 @@ struct FinalizeRequest {
115108

116109
template <typename T> struct UIntWrite {
117110
UIntWrite() = default;
118-
UIntWrite(ExecutorAddr Addr, T Value) : Addr(Addr), Value(Value) {}
111+
UIntWrite(JITTargetAddress Address, T Value)
112+
: Address(Address), Value(Value) {}
119113

120-
ExecutorAddr Addr;
114+
JITTargetAddress Address = 0;
121115
T Value = 0;
122116
};
123117

@@ -137,10 +131,10 @@ using UInt64Write = UIntWrite<uint64_t>;
137131
/// For use with TargetProcessControl::MemoryAccess objects.
138132
struct BufferWrite {
139133
BufferWrite() = default;
140-
BufferWrite(ExecutorAddr Addr, StringRef Buffer)
141-
: Addr(Addr), Buffer(Buffer) {}
134+
BufferWrite(JITTargetAddress Address, StringRef Buffer)
135+
: Address(Address), Buffer(Buffer) {}
142136

143-
ExecutorAddr Addr;
137+
JITTargetAddress Address = 0;
144138
StringRef Buffer;
145139
};
146140

@@ -155,7 +149,8 @@ namespace shared {
155149

156150
class SPSMemoryProtectionFlags {};
157151

158-
using SPSSupportFunctionCall = SPSTuple<SPSExecutorAddr, SPSExecutorAddrRange>;
152+
using SPSSupportFunctionCall =
153+
SPSTuple<SPSExecutorAddr, SPSExecutorAddr, uint64_t>;
159154

160155
using SPSSegFinalizeRequest =
161156
SPSTuple<SPSMemoryProtectionFlags, SPSExecutorAddr, uint64_t,
@@ -207,17 +202,17 @@ class SPSSerializationTraits<SPSSupportFunctionCall,
207202

208203
public:
209204
static size_t size(const tpctypes::SupportFunctionCall &SFC) {
210-
return AL::size(SFC.Func, SFC.ArgDataRange);
205+
return AL::size(SFC.Func, SFC.ArgData, SFC.ArgSize);
211206
}
212207

213208
static bool serialize(SPSOutputBuffer &OB,
214209
const tpctypes::SupportFunctionCall &SFC) {
215-
return AL::serialize(OB, SFC.Func, SFC.ArgDataRange);
210+
return AL::serialize(OB, SFC.Func, SFC.ArgData, SFC.ArgSize);
216211
}
217212

218213
static bool deserialize(SPSInputBuffer &IB,
219214
tpctypes::SupportFunctionCall &SFC) {
220-
return AL::deserialize(IB, SFC.Func, SFC.ArgDataRange);
215+
return AL::deserialize(IB, SFC.Func, SFC.ArgData, SFC.ArgSize);
221216
}
222217
};
223218

@@ -287,16 +282,16 @@ class SPSSerializationTraits<SPSMemoryAccessUIntWrite<T>,
287282
tpctypes::UIntWrite<T>> {
288283
public:
289284
static size_t size(const tpctypes::UIntWrite<T> &W) {
290-
return SPSTuple<SPSExecutorAddr, T>::AsArgList::size(W.Addr, W.Value);
285+
return SPSTuple<SPSExecutorAddr, T>::AsArgList::size(W.Address, W.Value);
291286
}
292287

293288
static bool serialize(SPSOutputBuffer &OB, const tpctypes::UIntWrite<T> &W) {
294-
return SPSTuple<SPSExecutorAddr, T>::AsArgList::serialize(OB, W.Addr,
289+
return SPSTuple<SPSExecutorAddr, T>::AsArgList::serialize(OB, W.Address,
295290
W.Value);
296291
}
297292

298293
static bool deserialize(SPSInputBuffer &IB, tpctypes::UIntWrite<T> &W) {
299-
return SPSTuple<SPSExecutorAddr, T>::AsArgList::deserialize(IB, W.Addr,
294+
return SPSTuple<SPSExecutorAddr, T>::AsArgList::deserialize(IB, W.Address,
300295
W.Value);
301296
}
302297
};
@@ -307,17 +302,17 @@ class SPSSerializationTraits<SPSMemoryAccessBufferWrite,
307302
public:
308303
static size_t size(const tpctypes::BufferWrite &W) {
309304
return SPSTuple<SPSExecutorAddr, SPSSequence<char>>::AsArgList::size(
310-
W.Addr, W.Buffer);
305+
W.Address, W.Buffer);
311306
}
312307

313308
static bool serialize(SPSOutputBuffer &OB, const tpctypes::BufferWrite &W) {
314309
return SPSTuple<SPSExecutorAddr, SPSSequence<char>>::AsArgList ::serialize(
315-
OB, W.Addr, W.Buffer);
310+
OB, W.Address, W.Buffer);
316311
}
317312

318313
static bool deserialize(SPSInputBuffer &IB, tpctypes::BufferWrite &W) {
319314
return SPSTuple<SPSExecutorAddr,
320-
SPSSequence<char>>::AsArgList ::deserialize(IB, W.Addr,
315+
SPSSequence<char>>::AsArgList ::deserialize(IB, W.Address,
321316
W.Buffer);
322317
}
323318
};

llvm/lib/ExecutionEngine/Orc/EPCEHFrameRegistrar.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,14 @@ EPCEHFrameRegistrar::Create(ExecutionSession &ES) {
5959
Error EPCEHFrameRegistrar::registerEHFrames(JITTargetAddress EHFrameSectionAddr,
6060
size_t EHFrameSectionSize) {
6161
return ES.callSPSWrapper<void(SPSExecutorAddr, uint64_t)>(
62-
RegisterEHFrameWrapperFnAddr, ExecutorAddr(EHFrameSectionAddr),
62+
RegisterEHFrameWrapperFnAddr, EHFrameSectionAddr,
6363
static_cast<uint64_t>(EHFrameSectionSize));
6464
}
6565

6666
Error EPCEHFrameRegistrar::deregisterEHFrames(
6767
JITTargetAddress EHFrameSectionAddr, size_t EHFrameSectionSize) {
6868
return ES.callSPSWrapper<void(SPSExecutorAddr, uint64_t)>(
69-
DeregisterEHFrameWrapperFnAddr, ExecutorAddr(EHFrameSectionAddr),
69+
DeregisterEHFrameWrapperFnAddr, EHFrameSectionAddr,
7070
static_cast<uint64_t>(EHFrameSectionSize));
7171
}
7272

llvm/lib/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,12 +60,11 @@ class EPCGenericJITLinkMemoryManager::InFlightAlloc
6060
// turn this into a std::swap.
6161
FR.Actions.reserve(G.allocActions().size());
6262
for (auto &ActPair : G.allocActions())
63-
FR.Actions.push_back({{ExecutorAddr(ActPair.Finalize.FnAddr),
64-
{ExecutorAddr(ActPair.Finalize.CtxAddr),
65-
ExecutorAddrDiff(ActPair.Finalize.CtxSize)}},
66-
{ExecutorAddr(ActPair.Dealloc.FnAddr),
67-
{ExecutorAddr(ActPair.Dealloc.CtxAddr),
68-
ExecutorAddrDiff(ActPair.Dealloc.CtxSize)}}});
63+
FR.Actions.push_back(
64+
{{ExecutorAddr(ActPair.Finalize.FnAddr),
65+
ExecutorAddr(ActPair.Finalize.CtxAddr), ActPair.Finalize.CtxSize},
66+
{ExecutorAddr(ActPair.Dealloc.FnAddr),
67+
ExecutorAddr(ActPair.Dealloc.CtxAddr), ActPair.Dealloc.CtxSize}});
6968
G.allocActions().clear();
7069

7170
Parent.EPC.callSPSWrapperAsync<

llvm/lib/ExecutionEngine/Orc/EPCGenericRTDyldMemoryManager.cpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -262,11 +262,8 @@ bool EPCGenericRTDyldMemoryManager::finalizeMemory(std::string *ErrMsg) {
262262
}
263263

264264
for (auto &Frame : ObjAllocs.UnfinalizedEHFrames)
265-
FR.Actions.push_back(
266-
{{SAs.RegisterEHFrame,
267-
{ExecutorAddr(Frame.Addr), ExecutorAddrDiff(Frame.Size)}},
268-
{SAs.DeregisterEHFrame,
269-
{ExecutorAddr(Frame.Addr), ExecutorAddrDiff(Frame.Size)}}});
265+
FR.Actions.push_back({{SAs.RegisterEHFrame, Frame.Addr, Frame.Size},
266+
{SAs.DeregisterEHFrame, Frame.Addr, Frame.Size}});
270267

271268
// We'll also need to make an extra allocation for the eh-frame wrapper call
272269
// arguments.

llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -161,18 +161,16 @@ Error EPCIndirectStubsManager::createStubs(const StubInitsMap &StubInits) {
161161
unsigned ASIdx = 0;
162162
std::vector<tpctypes::UInt32Write> PtrUpdates;
163163
for (auto &SI : StubInits)
164-
PtrUpdates.push_back(
165-
{ExecutorAddr((*AvailableStubInfos)[ASIdx++].PointerAddress),
166-
static_cast<uint32_t>(SI.second.first)});
164+
PtrUpdates.push_back({(*AvailableStubInfos)[ASIdx++].PointerAddress,
165+
static_cast<uint32_t>(SI.second.first)});
167166
return MemAccess.writeUInt32s(PtrUpdates);
168167
}
169168
case 8: {
170169
unsigned ASIdx = 0;
171170
std::vector<tpctypes::UInt64Write> PtrUpdates;
172171
for (auto &SI : StubInits)
173-
PtrUpdates.push_back(
174-
{ExecutorAddr((*AvailableStubInfos)[ASIdx++].PointerAddress),
175-
static_cast<uint64_t>(SI.second.first)});
172+
PtrUpdates.push_back({(*AvailableStubInfos)[ASIdx++].PointerAddress,
173+
static_cast<uint64_t>(SI.second.first)});
176174
return MemAccess.writeUInt64s(PtrUpdates);
177175
}
178176
default:
@@ -214,11 +212,11 @@ Error EPCIndirectStubsManager::updatePointer(StringRef Name,
214212
auto &MemAccess = EPCIU.getExecutorProcessControl().getMemoryAccess();
215213
switch (EPCIU.getABISupport().getPointerSize()) {
216214
case 4: {
217-
tpctypes::UInt32Write PUpdate(ExecutorAddr(PtrAddr), NewAddr);
215+
tpctypes::UInt32Write PUpdate(PtrAddr, NewAddr);
218216
return MemAccess.writeUInt32s(PUpdate);
219217
}
220218
case 8: {
221-
tpctypes::UInt64Write PUpdate(ExecutorAddr(PtrAddr), NewAddr);
219+
tpctypes::UInt64Write PUpdate(PtrAddr, NewAddr);
222220
return MemAccess.writeUInt64s(PUpdate);
223221
}
224222
default:

llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -138,35 +138,36 @@ Error SelfExecutorProcessControl::disconnect() {
138138
void SelfExecutorProcessControl::writeUInt8sAsync(
139139
ArrayRef<tpctypes::UInt8Write> Ws, WriteResultFn OnWriteComplete) {
140140
for (auto &W : Ws)
141-
*W.Addr.toPtr<uint8_t *>() = W.Value;
141+
*jitTargetAddressToPointer<uint8_t *>(W.Address) = W.Value;
142142
OnWriteComplete(Error::success());
143143
}
144144

145145
void SelfExecutorProcessControl::writeUInt16sAsync(
146146
ArrayRef<tpctypes::UInt16Write> Ws, WriteResultFn OnWriteComplete) {
147147
for (auto &W : Ws)
148-
*W.Addr.toPtr<uint16_t *>() = W.Value;
148+
*jitTargetAddressToPointer<uint16_t *>(W.Address) = W.Value;
149149
OnWriteComplete(Error::success());
150150
}
151151

152152
void SelfExecutorProcessControl::writeUInt32sAsync(
153153
ArrayRef<tpctypes::UInt32Write> Ws, WriteResultFn OnWriteComplete) {
154154
for (auto &W : Ws)
155-
*W.Addr.toPtr<uint32_t *>() = W.Value;
155+
*jitTargetAddressToPointer<uint32_t *>(W.Address) = W.Value;
156156
OnWriteComplete(Error::success());
157157
}
158158

159159
void SelfExecutorProcessControl::writeUInt64sAsync(
160160
ArrayRef<tpctypes::UInt64Write> Ws, WriteResultFn OnWriteComplete) {
161161
for (auto &W : Ws)
162-
*W.Addr.toPtr<uint64_t *>() = W.Value;
162+
*jitTargetAddressToPointer<uint64_t *>(W.Address) = W.Value;
163163
OnWriteComplete(Error::success());
164164
}
165165

166166
void SelfExecutorProcessControl::writeBuffersAsync(
167167
ArrayRef<tpctypes::BufferWrite> Ws, WriteResultFn OnWriteComplete) {
168168
for (auto &W : Ws)
169-
memcpy(W.Addr.toPtr<char *>(), W.Buffer.data(), W.Buffer.size());
169+
memcpy(jitTargetAddressToPointer<char *>(W.Address), W.Buffer.data(),
170+
W.Buffer.size());
170171
OnWriteComplete(Error::success());
171172
}
172173

llvm/lib/ExecutionEngine/Orc/TargetProcess/OrcRTBootstrap.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,8 @@ writeUIntsWrapper(const char *ArgData, size_t ArgSize) {
2828
ArgData, ArgSize,
2929
[](std::vector<WriteT> Ws) {
3030
for (auto &W : Ws)
31-
*W.Addr.template toPtr<decltype(W.Value) *>() = W.Value;
31+
*jitTargetAddressToPointer<decltype(W.Value) *>(W.Address) =
32+
W.Value;
3233
})
3334
.release();
3435
}
@@ -39,8 +40,8 @@ writeBuffersWrapper(const char *ArgData, size_t ArgSize) {
3940
ArgData, ArgSize,
4041
[](std::vector<tpctypes::BufferWrite> Ws) {
4142
for (auto &W : Ws)
42-
memcpy(W.Addr.template toPtr<char *>(), W.Buffer.data(),
43-
W.Buffer.size());
43+
memcpy(jitTargetAddressToPointer<char *>(W.Address),
44+
W.Buffer.data(), W.Buffer.size());
4445
})
4546
.release();
4647
}

llvm/lib/ExecutionEngine/Orc/TargetProcess/RegisterEHFrames.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -176,12 +176,14 @@ llvm_orc_deregisterEHFrameSectionCustomDirectWrapper(
176176
return llvm::orc::shared::detail::CWrapperFunctionResult();
177177
}
178178

179-
static Error registerEHFrameWrapper(ExecutorAddr Addr, uint64_t Size) {
180-
return llvm::orc::registerEHFrameSection(Addr.toPtr<const void *>(), Size);
179+
static Error registerEHFrameWrapper(JITTargetAddress Addr, uint64_t Size) {
180+
return llvm::orc::registerEHFrameSection(
181+
jitTargetAddressToPointer<const void *>(Addr), Size);
181182
}
182183

183-
static Error deregisterEHFrameWrapper(ExecutorAddr Addr, uint64_t Size) {
184-
return llvm::orc::deregisterEHFrameSection(Addr.toPtr<const void *>(), Size);
184+
static Error deregisterEHFrameWrapper(JITTargetAddress Addr, uint64_t Size) {
185+
return llvm::orc::deregisterEHFrameSection(
186+
jitTargetAddressToPointer<const void *>(Addr), Size);
185187
}
186188

187189
extern "C" orc::shared::detail::CWrapperFunctionResult

0 commit comments

Comments
 (0)