[llvm] 20675d8 - Revert "[ORC] Change SPSExecutorAddr serialization, SupportFunctionCall struct."
Lang Hames via llvm-commits
llvm-commits at lists.llvm.org
Wed Oct 27 16:40:04 PDT 2021
Author: Lang Hames
Date: 2021-10-27T16:39:56-07:00
New Revision: 20675d8f7dab293172266fdde426c2173b5b3997
URL: https://github.com/llvm/llvm-project/commit/20675d8f7dab293172266fdde426c2173b5b3997
DIFF: https://github.com/llvm/llvm-project/commit/20675d8f7dab293172266fdde426c2173b5b3997.diff
LOG: Revert "[ORC] Change SPSExecutorAddr serialization, SupportFunctionCall struct."
This reverts commit e32b1eee6aab52e2b7b75ee15e506b3e7dd30e68.
Reverting while I fix some broken unit tests.
Added:
Modified:
llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h
llvm/include/llvm/ExecutionEngine/Orc/Shared/SimplePackedSerialization.h
llvm/include/llvm/ExecutionEngine/Orc/Shared/TargetProcessControlTypes.h
llvm/lib/ExecutionEngine/Orc/EPCEHFrameRegistrar.cpp
llvm/lib/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.cpp
llvm/lib/ExecutionEngine/Orc/EPCGenericRTDyldMemoryManager.cpp
llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp
llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp
llvm/lib/ExecutionEngine/Orc/TargetProcess/OrcRTBootstrap.cpp
llvm/lib/ExecutionEngine/Orc/TargetProcess/RegisterEHFrames.cpp
Removed:
################################################################################
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h b/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h
index 3c0b2b9edd52..6b795799a961 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/Shared/ExecutorAddress.h
@@ -160,8 +160,6 @@ struct ExecutorAddrRange {
namespace shared {
-class SPSExecutorAddr {};
-
/// SPS serializatior for ExecutorAddr.
template <> class SPSSerializationTraits<SPSExecutorAddr, ExecutorAddr> {
public:
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimplePackedSerialization.h b/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimplePackedSerialization.h
index 9ac13a493e9d..570c11e25897 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimplePackedSerialization.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/Shared/SimplePackedSerialization.h
@@ -195,6 +195,13 @@ template <typename SPSElementTagT> class SPSSequence;
/// SPS tag type for strings, which are equivalent to sequences of chars.
using SPSString = SPSSequence<char>;
+/// SPS tag type for executor addresseses.
+class SPSExecutorAddr {};
+
+template <>
+class SPSSerializationTraits<SPSExecutorAddr, uint64_t>
+ : public SPSSerializationTraits<uint64_t, uint64_t> {};
+
/// SPS tag type for maps.
///
/// SPS maps are just sequences of (Key, Value) tuples.
diff --git a/llvm/include/llvm/ExecutionEngine/Orc/Shared/TargetProcessControlTypes.h b/llvm/include/llvm/ExecutionEngine/Orc/Shared/TargetProcessControlTypes.h
index fc70c46df231..a7de07cbeb99 100644
--- a/llvm/include/llvm/ExecutionEngine/Orc/Shared/TargetProcessControlTypes.h
+++ b/llvm/include/llvm/ExecutionEngine/Orc/Shared/TargetProcessControlTypes.h
@@ -73,19 +73,12 @@ struct SupportFunctionCall {
using FnTy = shared::detail::CWrapperFunctionResult(const char *ArgData,
size_t ArgSize);
ExecutorAddr Func;
- ExecutorAddrRange ArgDataRange;
-
- SupportFunctionCall() = default;
- SupportFunctionCall(ExecutorAddr Func, ExecutorAddr ArgData,
- ExecutorAddrDiff ArgSize)
- : Func(Func), ArgDataRange(ArgData, ArgSize) {}
- SupportFunctionCall(ExecutorAddr Func, ExecutorAddrRange ArgDataRange)
- : Func(Func), ArgDataRange(ArgDataRange) {}
+ ExecutorAddr ArgData;
+ uint64_t ArgSize;
Error run() {
- shared::WrapperFunctionResult WFR(Func.toPtr<FnTy *>()(
- ArgDataRange.Start.toPtr<const char *>(),
- static_cast<size_t>(ArgDataRange.size().getValue())));
+ shared::WrapperFunctionResult WFR(
+ Func.toPtr<FnTy *>()(ArgData.toPtr<const char *>(), ArgSize));
if (const char *ErrMsg = WFR.getOutOfBandError())
return make_error<StringError>(ErrMsg, inconvertibleErrorCode());
if (!WFR.empty())
@@ -115,9 +108,10 @@ struct FinalizeRequest {
template <typename T> struct UIntWrite {
UIntWrite() = default;
- UIntWrite(ExecutorAddr Addr, T Value) : Addr(Addr), Value(Value) {}
+ UIntWrite(JITTargetAddress Address, T Value)
+ : Address(Address), Value(Value) {}
- ExecutorAddr Addr;
+ JITTargetAddress Address = 0;
T Value = 0;
};
@@ -137,10 +131,10 @@ using UInt64Write = UIntWrite<uint64_t>;
/// For use with TargetProcessControl::MemoryAccess objects.
struct BufferWrite {
BufferWrite() = default;
- BufferWrite(ExecutorAddr Addr, StringRef Buffer)
- : Addr(Addr), Buffer(Buffer) {}
+ BufferWrite(JITTargetAddress Address, StringRef Buffer)
+ : Address(Address), Buffer(Buffer) {}
- ExecutorAddr Addr;
+ JITTargetAddress Address = 0;
StringRef Buffer;
};
@@ -155,7 +149,8 @@ namespace shared {
class SPSMemoryProtectionFlags {};
-using SPSSupportFunctionCall = SPSTuple<SPSExecutorAddr, SPSExecutorAddrRange>;
+using SPSSupportFunctionCall =
+ SPSTuple<SPSExecutorAddr, SPSExecutorAddr, uint64_t>;
using SPSSegFinalizeRequest =
SPSTuple<SPSMemoryProtectionFlags, SPSExecutorAddr, uint64_t,
@@ -207,17 +202,17 @@ class SPSSerializationTraits<SPSSupportFunctionCall,
public:
static size_t size(const tpctypes::SupportFunctionCall &SFC) {
- return AL::size(SFC.Func, SFC.ArgDataRange);
+ return AL::size(SFC.Func, SFC.ArgData, SFC.ArgSize);
}
static bool serialize(SPSOutputBuffer &OB,
const tpctypes::SupportFunctionCall &SFC) {
- return AL::serialize(OB, SFC.Func, SFC.ArgDataRange);
+ return AL::serialize(OB, SFC.Func, SFC.ArgData, SFC.ArgSize);
}
static bool deserialize(SPSInputBuffer &IB,
tpctypes::SupportFunctionCall &SFC) {
- return AL::deserialize(IB, SFC.Func, SFC.ArgDataRange);
+ return AL::deserialize(IB, SFC.Func, SFC.ArgData, SFC.ArgSize);
}
};
@@ -287,16 +282,16 @@ class SPSSerializationTraits<SPSMemoryAccessUIntWrite<T>,
tpctypes::UIntWrite<T>> {
public:
static size_t size(const tpctypes::UIntWrite<T> &W) {
- return SPSTuple<SPSExecutorAddr, T>::AsArgList::size(W.Addr, W.Value);
+ return SPSTuple<SPSExecutorAddr, T>::AsArgList::size(W.Address, W.Value);
}
static bool serialize(SPSOutputBuffer &OB, const tpctypes::UIntWrite<T> &W) {
- return SPSTuple<SPSExecutorAddr, T>::AsArgList::serialize(OB, W.Addr,
+ return SPSTuple<SPSExecutorAddr, T>::AsArgList::serialize(OB, W.Address,
W.Value);
}
static bool deserialize(SPSInputBuffer &IB, tpctypes::UIntWrite<T> &W) {
- return SPSTuple<SPSExecutorAddr, T>::AsArgList::deserialize(IB, W.Addr,
+ return SPSTuple<SPSExecutorAddr, T>::AsArgList::deserialize(IB, W.Address,
W.Value);
}
};
@@ -307,17 +302,17 @@ class SPSSerializationTraits<SPSMemoryAccessBufferWrite,
public:
static size_t size(const tpctypes::BufferWrite &W) {
return SPSTuple<SPSExecutorAddr, SPSSequence<char>>::AsArgList::size(
- W.Addr, W.Buffer);
+ W.Address, W.Buffer);
}
static bool serialize(SPSOutputBuffer &OB, const tpctypes::BufferWrite &W) {
return SPSTuple<SPSExecutorAddr, SPSSequence<char>>::AsArgList ::serialize(
- OB, W.Addr, W.Buffer);
+ OB, W.Address, W.Buffer);
}
static bool deserialize(SPSInputBuffer &IB, tpctypes::BufferWrite &W) {
return SPSTuple<SPSExecutorAddr,
- SPSSequence<char>>::AsArgList ::deserialize(IB, W.Addr,
+ SPSSequence<char>>::AsArgList ::deserialize(IB, W.Address,
W.Buffer);
}
};
diff --git a/llvm/lib/ExecutionEngine/Orc/EPCEHFrameRegistrar.cpp b/llvm/lib/ExecutionEngine/Orc/EPCEHFrameRegistrar.cpp
index 4c0fab8aa9fa..4e0323b9ca0d 100644
--- a/llvm/lib/ExecutionEngine/Orc/EPCEHFrameRegistrar.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/EPCEHFrameRegistrar.cpp
@@ -59,14 +59,14 @@ EPCEHFrameRegistrar::Create(ExecutionSession &ES) {
Error EPCEHFrameRegistrar::registerEHFrames(JITTargetAddress EHFrameSectionAddr,
size_t EHFrameSectionSize) {
return ES.callSPSWrapper<void(SPSExecutorAddr, uint64_t)>(
- RegisterEHFrameWrapperFnAddr, ExecutorAddr(EHFrameSectionAddr),
+ RegisterEHFrameWrapperFnAddr, EHFrameSectionAddr,
static_cast<uint64_t>(EHFrameSectionSize));
}
Error EPCEHFrameRegistrar::deregisterEHFrames(
JITTargetAddress EHFrameSectionAddr, size_t EHFrameSectionSize) {
return ES.callSPSWrapper<void(SPSExecutorAddr, uint64_t)>(
- DeregisterEHFrameWrapperFnAddr, ExecutorAddr(EHFrameSectionAddr),
+ DeregisterEHFrameWrapperFnAddr, EHFrameSectionAddr,
static_cast<uint64_t>(EHFrameSectionSize));
}
diff --git a/llvm/lib/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.cpp b/llvm/lib/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.cpp
index 9b712cb8f7ca..005ba14794d1 100644
--- a/llvm/lib/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/EPCGenericJITLinkMemoryManager.cpp
@@ -60,12 +60,11 @@ class EPCGenericJITLinkMemoryManager::InFlightAlloc
// turn this into a std::swap.
FR.Actions.reserve(G.allocActions().size());
for (auto &ActPair : G.allocActions())
- FR.Actions.push_back({{ExecutorAddr(ActPair.Finalize.FnAddr),
- {ExecutorAddr(ActPair.Finalize.CtxAddr),
- ExecutorAddrDiff(ActPair.Finalize.CtxSize)}},
- {ExecutorAddr(ActPair.Dealloc.FnAddr),
- {ExecutorAddr(ActPair.Dealloc.CtxAddr),
- ExecutorAddrDiff(ActPair.Dealloc.CtxSize)}}});
+ FR.Actions.push_back(
+ {{ExecutorAddr(ActPair.Finalize.FnAddr),
+ ExecutorAddr(ActPair.Finalize.CtxAddr), ActPair.Finalize.CtxSize},
+ {ExecutorAddr(ActPair.Dealloc.FnAddr),
+ ExecutorAddr(ActPair.Dealloc.CtxAddr), ActPair.Dealloc.CtxSize}});
G.allocActions().clear();
Parent.EPC.callSPSWrapperAsync<
diff --git a/llvm/lib/ExecutionEngine/Orc/EPCGenericRTDyldMemoryManager.cpp b/llvm/lib/ExecutionEngine/Orc/EPCGenericRTDyldMemoryManager.cpp
index 1d98e104a4d7..944b66422a24 100644
--- a/llvm/lib/ExecutionEngine/Orc/EPCGenericRTDyldMemoryManager.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/EPCGenericRTDyldMemoryManager.cpp
@@ -262,11 +262,8 @@ bool EPCGenericRTDyldMemoryManager::finalizeMemory(std::string *ErrMsg) {
}
for (auto &Frame : ObjAllocs.UnfinalizedEHFrames)
- FR.Actions.push_back(
- {{SAs.RegisterEHFrame,
- {ExecutorAddr(Frame.Addr), ExecutorAddrDiff(Frame.Size)}},
- {SAs.DeregisterEHFrame,
- {ExecutorAddr(Frame.Addr), ExecutorAddrDiff(Frame.Size)}}});
+ FR.Actions.push_back({{SAs.RegisterEHFrame, Frame.Addr, Frame.Size},
+ {SAs.DeregisterEHFrame, Frame.Addr, Frame.Size}});
// We'll also need to make an extra allocation for the eh-frame wrapper call
// arguments.
diff --git a/llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp b/llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp
index 818b6b52ff83..a08f29c29f2f 100644
--- a/llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/EPCIndirectionUtils.cpp
@@ -161,18 +161,16 @@ Error EPCIndirectStubsManager::createStubs(const StubInitsMap &StubInits) {
unsigned ASIdx = 0;
std::vector<tpctypes::UInt32Write> PtrUpdates;
for (auto &SI : StubInits)
- PtrUpdates.push_back(
- {ExecutorAddr((*AvailableStubInfos)[ASIdx++].PointerAddress),
- static_cast<uint32_t>(SI.second.first)});
+ PtrUpdates.push_back({(*AvailableStubInfos)[ASIdx++].PointerAddress,
+ static_cast<uint32_t>(SI.second.first)});
return MemAccess.writeUInt32s(PtrUpdates);
}
case 8: {
unsigned ASIdx = 0;
std::vector<tpctypes::UInt64Write> PtrUpdates;
for (auto &SI : StubInits)
- PtrUpdates.push_back(
- {ExecutorAddr((*AvailableStubInfos)[ASIdx++].PointerAddress),
- static_cast<uint64_t>(SI.second.first)});
+ PtrUpdates.push_back({(*AvailableStubInfos)[ASIdx++].PointerAddress,
+ static_cast<uint64_t>(SI.second.first)});
return MemAccess.writeUInt64s(PtrUpdates);
}
default:
@@ -214,11 +212,11 @@ Error EPCIndirectStubsManager::updatePointer(StringRef Name,
auto &MemAccess = EPCIU.getExecutorProcessControl().getMemoryAccess();
switch (EPCIU.getABISupport().getPointerSize()) {
case 4: {
- tpctypes::UInt32Write PUpdate(ExecutorAddr(PtrAddr), NewAddr);
+ tpctypes::UInt32Write PUpdate(PtrAddr, NewAddr);
return MemAccess.writeUInt32s(PUpdate);
}
case 8: {
- tpctypes::UInt64Write PUpdate(ExecutorAddr(PtrAddr), NewAddr);
+ tpctypes::UInt64Write PUpdate(PtrAddr, NewAddr);
return MemAccess.writeUInt64s(PUpdate);
}
default:
diff --git a/llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp b/llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp
index b5435293da13..1c3d728409fe 100644
--- a/llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/ExecutorProcessControl.cpp
@@ -138,35 +138,36 @@ Error SelfExecutorProcessControl::disconnect() {
void SelfExecutorProcessControl::writeUInt8sAsync(
ArrayRef<tpctypes::UInt8Write> Ws, WriteResultFn OnWriteComplete) {
for (auto &W : Ws)
- *W.Addr.toPtr<uint8_t *>() = W.Value;
+ *jitTargetAddressToPointer<uint8_t *>(W.Address) = W.Value;
OnWriteComplete(Error::success());
}
void SelfExecutorProcessControl::writeUInt16sAsync(
ArrayRef<tpctypes::UInt16Write> Ws, WriteResultFn OnWriteComplete) {
for (auto &W : Ws)
- *W.Addr.toPtr<uint16_t *>() = W.Value;
+ *jitTargetAddressToPointer<uint16_t *>(W.Address) = W.Value;
OnWriteComplete(Error::success());
}
void SelfExecutorProcessControl::writeUInt32sAsync(
ArrayRef<tpctypes::UInt32Write> Ws, WriteResultFn OnWriteComplete) {
for (auto &W : Ws)
- *W.Addr.toPtr<uint32_t *>() = W.Value;
+ *jitTargetAddressToPointer<uint32_t *>(W.Address) = W.Value;
OnWriteComplete(Error::success());
}
void SelfExecutorProcessControl::writeUInt64sAsync(
ArrayRef<tpctypes::UInt64Write> Ws, WriteResultFn OnWriteComplete) {
for (auto &W : Ws)
- *W.Addr.toPtr<uint64_t *>() = W.Value;
+ *jitTargetAddressToPointer<uint64_t *>(W.Address) = W.Value;
OnWriteComplete(Error::success());
}
void SelfExecutorProcessControl::writeBuffersAsync(
ArrayRef<tpctypes::BufferWrite> Ws, WriteResultFn OnWriteComplete) {
for (auto &W : Ws)
- memcpy(W.Addr.toPtr<char *>(), W.Buffer.data(), W.Buffer.size());
+ memcpy(jitTargetAddressToPointer<char *>(W.Address), W.Buffer.data(),
+ W.Buffer.size());
OnWriteComplete(Error::success());
}
diff --git a/llvm/lib/ExecutionEngine/Orc/TargetProcess/OrcRTBootstrap.cpp b/llvm/lib/ExecutionEngine/Orc/TargetProcess/OrcRTBootstrap.cpp
index c74186b0fc2c..356bb0be33f0 100644
--- a/llvm/lib/ExecutionEngine/Orc/TargetProcess/OrcRTBootstrap.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/TargetProcess/OrcRTBootstrap.cpp
@@ -28,7 +28,8 @@ writeUIntsWrapper(const char *ArgData, size_t ArgSize) {
ArgData, ArgSize,
[](std::vector<WriteT> Ws) {
for (auto &W : Ws)
- *W.Addr.template toPtr<decltype(W.Value) *>() = W.Value;
+ *jitTargetAddressToPointer<decltype(W.Value) *>(W.Address) =
+ W.Value;
})
.release();
}
@@ -39,8 +40,8 @@ writeBuffersWrapper(const char *ArgData, size_t ArgSize) {
ArgData, ArgSize,
[](std::vector<tpctypes::BufferWrite> Ws) {
for (auto &W : Ws)
- memcpy(W.Addr.template toPtr<char *>(), W.Buffer.data(),
- W.Buffer.size());
+ memcpy(jitTargetAddressToPointer<char *>(W.Address),
+ W.Buffer.data(), W.Buffer.size());
})
.release();
}
diff --git a/llvm/lib/ExecutionEngine/Orc/TargetProcess/RegisterEHFrames.cpp b/llvm/lib/ExecutionEngine/Orc/TargetProcess/RegisterEHFrames.cpp
index 89d2807e0a46..ee67e61358b2 100644
--- a/llvm/lib/ExecutionEngine/Orc/TargetProcess/RegisterEHFrames.cpp
+++ b/llvm/lib/ExecutionEngine/Orc/TargetProcess/RegisterEHFrames.cpp
@@ -176,12 +176,14 @@ llvm_orc_deregisterEHFrameSectionCustomDirectWrapper(
return llvm::orc::shared::detail::CWrapperFunctionResult();
}
-static Error registerEHFrameWrapper(ExecutorAddr Addr, uint64_t Size) {
- return llvm::orc::registerEHFrameSection(Addr.toPtr<const void *>(), Size);
+static Error registerEHFrameWrapper(JITTargetAddress Addr, uint64_t Size) {
+ return llvm::orc::registerEHFrameSection(
+ jitTargetAddressToPointer<const void *>(Addr), Size);
}
-static Error deregisterEHFrameWrapper(ExecutorAddr Addr, uint64_t Size) {
- return llvm::orc::deregisterEHFrameSection(Addr.toPtr<const void *>(), Size);
+static Error deregisterEHFrameWrapper(JITTargetAddress Addr, uint64_t Size) {
+ return llvm::orc::deregisterEHFrameSection(
+ jitTargetAddressToPointer<const void *>(Addr), Size);
}
extern "C" orc::shared::detail::CWrapperFunctionResult
More information about the llvm-commits
mailing list