From 20675d8f7dab293172266fdde426c2173b5b3997 Mon Sep 17 00:00:00 2001 From: Lang Hames Date: Wed, 27 Oct 2021 16:39:24 -0700 Subject: [PATCH] Revert "[ORC] Change SPSExecutorAddr serialization, SupportFunctionCall struct." This reverts commit e32b1eee6aab52e2b7b75ee15e506b3e7dd30e68. Reverting while I fix some broken unit tests. --- .../Orc/Shared/ExecutorAddress.h | 2 - .../Orc/Shared/SimplePackedSerialization.h | 7 +++ .../Orc/Shared/TargetProcessControlTypes.h | 47 +++++++++---------- .../Orc/EPCEHFrameRegistrar.cpp | 4 +- .../Orc/EPCGenericJITLinkMemoryManager.cpp | 11 ++--- .../Orc/EPCGenericRTDyldMemoryManager.cpp | 7 +-- .../Orc/EPCIndirectionUtils.cpp | 14 +++--- .../Orc/ExecutorProcessControl.cpp | 11 +++-- .../Orc/TargetProcess/OrcRTBootstrap.cpp | 7 +-- .../Orc/TargetProcess/RegisterEHFrames.cpp | 10 ++-- 10 files changed, 59 insertions(+), 61 deletions(-) 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 { 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 class SPSSequence; /// SPS tag type for strings, which are equivalent to sequences of chars. using SPSString = SPSSequence; +/// SPS tag type for executor addresseses. +class SPSExecutorAddr {}; + +template <> +class SPSSerializationTraits + : public SPSSerializationTraits {}; + /// 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()( - ArgDataRange.Start.toPtr(), - static_cast(ArgDataRange.size().getValue()))); + shared::WrapperFunctionResult WFR( + Func.toPtr()(ArgData.toPtr(), ArgSize)); if (const char *ErrMsg = WFR.getOutOfBandError()) return make_error(ErrMsg, inconvertibleErrorCode()); if (!WFR.empty()) @@ -115,9 +108,10 @@ struct FinalizeRequest { template 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; /// 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; +using SPSSupportFunctionCall = + SPSTuple; using SPSSegFinalizeRequest = SPSTuple, tpctypes::UIntWrite> { public: static size_t size(const tpctypes::UIntWrite &W) { - return SPSTuple::AsArgList::size(W.Addr, W.Value); + return SPSTuple::AsArgList::size(W.Address, W.Value); } static bool serialize(SPSOutputBuffer &OB, const tpctypes::UIntWrite &W) { - return SPSTuple::AsArgList::serialize(OB, W.Addr, + return SPSTuple::AsArgList::serialize(OB, W.Address, W.Value); } static bool deserialize(SPSInputBuffer &IB, tpctypes::UIntWrite &W) { - return SPSTuple::AsArgList::deserialize(IB, W.Addr, + return SPSTuple::AsArgList::deserialize(IB, W.Address, W.Value); } }; @@ -307,17 +302,17 @@ class SPSSerializationTraits>::AsArgList::size( - W.Addr, W.Buffer); + W.Address, W.Buffer); } static bool serialize(SPSOutputBuffer &OB, const tpctypes::BufferWrite &W) { return SPSTuple>::AsArgList ::serialize( - OB, W.Addr, W.Buffer); + OB, W.Address, W.Buffer); } static bool deserialize(SPSInputBuffer &IB, tpctypes::BufferWrite &W) { return SPSTuple>::AsArgList ::deserialize(IB, W.Addr, + SPSSequence>::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( - RegisterEHFrameWrapperFnAddr, ExecutorAddr(EHFrameSectionAddr), + RegisterEHFrameWrapperFnAddr, EHFrameSectionAddr, static_cast(EHFrameSectionSize)); } Error EPCEHFrameRegistrar::deregisterEHFrames( JITTargetAddress EHFrameSectionAddr, size_t EHFrameSectionSize) { return ES.callSPSWrapper( - DeregisterEHFrameWrapperFnAddr, ExecutorAddr(EHFrameSectionAddr), + DeregisterEHFrameWrapperFnAddr, EHFrameSectionAddr, static_cast(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 @@ public: // 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 PtrUpdates; for (auto &SI : StubInits) - PtrUpdates.push_back( - {ExecutorAddr((*AvailableStubInfos)[ASIdx++].PointerAddress), - static_cast(SI.second.first)}); + PtrUpdates.push_back({(*AvailableStubInfos)[ASIdx++].PointerAddress, + static_cast(SI.second.first)}); return MemAccess.writeUInt32s(PtrUpdates); } case 8: { unsigned ASIdx = 0; std::vector PtrUpdates; for (auto &SI : StubInits) - PtrUpdates.push_back( - {ExecutorAddr((*AvailableStubInfos)[ASIdx++].PointerAddress), - static_cast(SI.second.first)}); + PtrUpdates.push_back({(*AvailableStubInfos)[ASIdx++].PointerAddress, + static_cast(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 Ws, WriteResultFn OnWriteComplete) { for (auto &W : Ws) - *W.Addr.toPtr() = W.Value; + *jitTargetAddressToPointer(W.Address) = W.Value; OnWriteComplete(Error::success()); } void SelfExecutorProcessControl::writeUInt16sAsync( ArrayRef Ws, WriteResultFn OnWriteComplete) { for (auto &W : Ws) - *W.Addr.toPtr() = W.Value; + *jitTargetAddressToPointer(W.Address) = W.Value; OnWriteComplete(Error::success()); } void SelfExecutorProcessControl::writeUInt32sAsync( ArrayRef Ws, WriteResultFn OnWriteComplete) { for (auto &W : Ws) - *W.Addr.toPtr() = W.Value; + *jitTargetAddressToPointer(W.Address) = W.Value; OnWriteComplete(Error::success()); } void SelfExecutorProcessControl::writeUInt64sAsync( ArrayRef Ws, WriteResultFn OnWriteComplete) { for (auto &W : Ws) - *W.Addr.toPtr() = W.Value; + *jitTargetAddressToPointer(W.Address) = W.Value; OnWriteComplete(Error::success()); } void SelfExecutorProcessControl::writeBuffersAsync( ArrayRef Ws, WriteResultFn OnWriteComplete) { for (auto &W : Ws) - memcpy(W.Addr.toPtr(), W.Buffer.data(), W.Buffer.size()); + memcpy(jitTargetAddressToPointer(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 Ws) { for (auto &W : Ws) - *W.Addr.template toPtr() = W.Value; + *jitTargetAddressToPointer(W.Address) = + W.Value; }) .release(); } @@ -39,8 +40,8 @@ writeBuffersWrapper(const char *ArgData, size_t ArgSize) { ArgData, ArgSize, [](std::vector Ws) { for (auto &W : Ws) - memcpy(W.Addr.template toPtr(), W.Buffer.data(), - W.Buffer.size()); + memcpy(jitTargetAddressToPointer(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(), Size); +static Error registerEHFrameWrapper(JITTargetAddress Addr, uint64_t Size) { + return llvm::orc::registerEHFrameSection( + jitTargetAddressToPointer(Addr), Size); } -static Error deregisterEHFrameWrapper(ExecutorAddr Addr, uint64_t Size) { - return llvm::orc::deregisterEHFrameSection(Addr.toPtr(), Size); +static Error deregisterEHFrameWrapper(JITTargetAddress Addr, uint64_t Size) { + return llvm::orc::deregisterEHFrameSection( + jitTargetAddressToPointer(Addr), Size); } extern "C" orc::shared::detail::CWrapperFunctionResult -- 2.34.1