| //===- SimpleNativeMemoryMapSPSCI.cpp -------------------------------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // SPS Controller Interface implementation for SimpleNativeMemoryMap. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #include "orc-rt/sps-ci/SimpleNativeMemoryMapSPSCI.h" |
| |
| #include "orc-rt/SPSAllocAction.h" |
| #include "orc-rt/SPSMemoryFlags.h" |
| #include "orc-rt/SPSWrapperFunction.h" |
| #include "orc-rt/SimpleNativeMemoryMap.h" |
| |
| namespace orc_rt { |
| |
| struct SPSSimpleNativeMemoryMapSegment; |
| |
| template <> |
| class SPSSerializationTraits< |
| SPSSimpleNativeMemoryMapSegment, |
| SimpleNativeMemoryMap::InitializeRequest::Segment> { |
| using SPSType = |
| SPSTuple<SPSAllocGroup, SPSExecutorAddr, uint64_t, SPSSequence<char>>; |
| |
| public: |
| static bool |
| deserialize(SPSInputBuffer &IB, |
| SimpleNativeMemoryMap::InitializeRequest::Segment &S) { |
| AllocGroup AG; |
| ExecutorAddr Address; |
| uint64_t Size; |
| span<const char> Content; |
| if (!SPSType::AsArgList::deserialize(IB, AG, Address, Size, Content)) |
| return false; |
| if (Size > std::numeric_limits<size_t>::max()) |
| return false; |
| S = {AG, Address.toPtr<char *>(), static_cast<size_t>(Size), Content}; |
| return true; |
| } |
| }; |
| |
| struct SPSSimpleNativeMemoryMapInitializeRequest; |
| |
| template <> |
| class SPSSerializationTraits<SPSSimpleNativeMemoryMapInitializeRequest, |
| SimpleNativeMemoryMap::InitializeRequest> { |
| using SPSType = SPSTuple<SPSSequence<SPSSimpleNativeMemoryMapSegment>, |
| SPSSequence<SPSAllocActionPair>>; |
| |
| public: |
| static bool deserialize(SPSInputBuffer &IB, |
| SimpleNativeMemoryMap::InitializeRequest &FR) { |
| return SPSType::AsArgList::deserialize(IB, FR.Segments, FR.AAPs); |
| } |
| }; |
| |
| namespace sps_ci { |
| |
| ORC_RT_SPS_WRAPPER( |
| orc_rt_sps_ci_SimpleNativeMemoryMap_reserve_sps_wrapper, |
| SPSExpected<SPSExecutorAddr>(SPSExecutorAddr, SPSSize), |
| WrapperFunction::handleWithAsyncMethod(&SimpleNativeMemoryMap::reserve)) |
| |
| ORC_RT_SPS_WRAPPER( |
| orc_rt_sps_ci_SimpleNativeMemoryMap_releaseMultiple_sps_wrapper, |
| SPSError(SPSExecutorAddr, SPSSequence<SPSExecutorAddr>), |
| WrapperFunction::handleWithAsyncMethod( |
| &SimpleNativeMemoryMap::releaseMultiple)) |
| |
| ORC_RT_SPS_WRAPPER( |
| orc_rt_sps_ci_SimpleNativeMemoryMap_initialize_sps_wrapper, |
| SPSExpected<SPSExecutorAddr>(SPSExecutorAddr, |
| SPSSimpleNativeMemoryMapInitializeRequest), |
| WrapperFunction::handleWithAsyncMethod(&SimpleNativeMemoryMap::initialize)) |
| |
| ORC_RT_SPS_WRAPPER( |
| orc_rt_sps_ci_SimpleNativeMemoryMap_deinitializeMultiple_sps_wrapper, |
| SPSError(SPSExecutorAddr, SPSSequence<SPSExecutorAddr>), |
| WrapperFunction::handleWithAsyncMethod( |
| &SimpleNativeMemoryMap::deinitializeMultiple)) |
| |
| static std::pair<const char *, const void *> |
| orc_rt_sps_ci_SimpleNativeMemoryMap_sps_interface[] = { |
| ORC_RT_SYMTAB_PAIR( |
| orc_rt_sps_ci_SimpleNativeMemoryMap_reserve_sps_wrapper), |
| ORC_RT_SYMTAB_PAIR( |
| orc_rt_sps_ci_SimpleNativeMemoryMap_releaseMultiple_sps_wrapper), |
| ORC_RT_SYMTAB_PAIR( |
| orc_rt_sps_ci_SimpleNativeMemoryMap_initialize_sps_wrapper), |
| ORC_RT_SYMTAB_PAIR( |
| orc_rt_sps_ci_SimpleNativeMemoryMap_deinitializeMultiple_sps_wrapper)}; |
| |
| Error addSimpleNativeMemoryMap(SimpleSymbolTable &ST) { |
| return ST.addUnique(orc_rt_sps_ci_SimpleNativeMemoryMap_sps_interface); |
| } |
| |
| } // namespace sps_ci |
| } // namespace orc_rt |