diff options
Diffstat (limited to 'orc-rt')
-rw-r--r-- | orc-rt/include/orc-rt/ExecutorAddress.h | 3 | ||||
-rw-r--r-- | orc-rt/include/orc-rt/SimpleNativeMemoryMap.h | 2 | ||||
-rw-r--r-- | orc-rt/lib/executor/SimpleNativeMemoryMap.cpp | 6 | ||||
-rw-r--r-- | orc-rt/unittests/ExecutorAddressTest.cpp | 6 | ||||
-rw-r--r-- | orc-rt/unittests/SimpleNativeMemoryMapTest.cpp | 40 |
5 files changed, 33 insertions, 24 deletions
diff --git a/orc-rt/include/orc-rt/ExecutorAddress.h b/orc-rt/include/orc-rt/ExecutorAddress.h index cc7bbf5..6ec583f 100644 --- a/orc-rt/include/orc-rt/ExecutorAddress.h +++ b/orc-rt/include/orc-rt/ExecutorAddress.h @@ -204,6 +204,9 @@ struct ExecutorAddrRange { constexpr bool contains(ExecutorAddr Addr) const noexcept { return Start <= Addr && Addr < End; } + constexpr bool contains(const ExecutorAddrRange &Other) const noexcept { + return (Other.Start >= Start && Other.End <= End); + } constexpr bool overlaps(const ExecutorAddrRange &Other) const noexcept { return !(Other.End <= Start || End <= Other.Start); } diff --git a/orc-rt/include/orc-rt/SimpleNativeMemoryMap.h b/orc-rt/include/orc-rt/SimpleNativeMemoryMap.h index c0d11e9..cf0e4ac 100644 --- a/orc-rt/include/orc-rt/SimpleNativeMemoryMap.h +++ b/orc-rt/include/orc-rt/SimpleNativeMemoryMap.h @@ -73,7 +73,7 @@ public: /// Writes content into the requested ranges, applies permissions, and /// performs allocation actions. using OnInitializeCompleteFn = move_only_function<void(Expected<void *>)>; - void initialize(OnInitializeCompleteFn &&OnComplete, InitializeRequest FR); + void initialize(OnInitializeCompleteFn &&OnComplete, InitializeRequest IR); /// Runs deallocation actions and resets memory permissions for the requested /// memory. diff --git a/orc-rt/lib/executor/SimpleNativeMemoryMap.cpp b/orc-rt/lib/executor/SimpleNativeMemoryMap.cpp index bce5c1da..5d410ac 100644 --- a/orc-rt/lib/executor/SimpleNativeMemoryMap.cpp +++ b/orc-rt/lib/executor/SimpleNativeMemoryMap.cpp @@ -124,7 +124,7 @@ void SimpleNativeMemoryMap::releaseMultiple(OnReleaseCompleteFn &&OnComplete, } void SimpleNativeMemoryMap::initialize(OnInitializeCompleteFn &&OnComplete, - InitializeRequest FR) { + InitializeRequest IR) { void *Base = nullptr; @@ -132,7 +132,7 @@ void SimpleNativeMemoryMap::initialize(OnInitializeCompleteFn &&OnComplete, // std::vector<std::pair<void*, size_t>> InitializeSegments; // Check segment validity before proceeding. - for (auto &S : FR.Segments) { + for (auto &S : IR.Segments) { if (S.Content.size() > S.Size) { return OnComplete(make_error<StringError>( @@ -173,7 +173,7 @@ void SimpleNativeMemoryMap::initialize(OnInitializeCompleteFn &&OnComplete, "finalization requires at least " "one standard-lifetime segment")); - auto DeallocActions = runFinalizeActions(std::move(FR.AAPs)); + auto DeallocActions = runFinalizeActions(std::move(IR.AAPs)); if (!DeallocActions) return OnComplete(DeallocActions.takeError()); diff --git a/orc-rt/unittests/ExecutorAddressTest.cpp b/orc-rt/unittests/ExecutorAddressTest.cpp index 98074a7..2e04901 100644 --- a/orc-rt/unittests/ExecutorAddressTest.cpp +++ b/orc-rt/unittests/ExecutorAddressTest.cpp @@ -97,10 +97,16 @@ TEST(ExecutorAddrTest, AddrRanges) { EXPECT_FALSE(R1.contains(A0)); EXPECT_FALSE(R1.contains(A2)); + EXPECT_TRUE(R3.contains(R0)); // True for singleton range at start. + EXPECT_TRUE(R3.contains(R1)); // True for singleton range at end. + EXPECT_FALSE(R3.contains(R2)); // False for non-overlaping singleton range. + EXPECT_FALSE(R3.contains(R4)); // False for overlapping, uncontained range. + EXPECT_FALSE(R1.overlaps(R0)); EXPECT_FALSE(R1.overlaps(R2)); EXPECT_TRUE(R1.overlaps(R3)); EXPECT_TRUE(R1.overlaps(R4)); + EXPECT_TRUE(R3.overlaps(R4)); } TEST(ExecutorAddrTest, Hashable) { diff --git a/orc-rt/unittests/SimpleNativeMemoryMapTest.cpp b/orc-rt/unittests/SimpleNativeMemoryMapTest.cpp index c793886..bb34529 100644 --- a/orc-rt/unittests/SimpleNativeMemoryMapTest.cpp +++ b/orc-rt/unittests/SimpleNativeMemoryMapTest.cpp @@ -74,12 +74,12 @@ class SPSSerializationTraits<SPSSimpleNativeMemoryMapInitializeRequest, SPSSequence<SPSAllocActionPair>>; public: - static size_t size(const TestSNMMInitializeRequest &FR) { - return SPSType::AsArgList::size(FR.Segments, FR.AAPs); + static size_t size(const TestSNMMInitializeRequest &IR) { + return SPSType::AsArgList::size(IR.Segments, IR.AAPs); } static bool serialize(SPSOutputBuffer &OB, - const TestSNMMInitializeRequest &FR) { - return SPSType::AsArgList::serialize(OB, FR.Segments, FR.AAPs); + const TestSNMMInitializeRequest &IR) { + return SPSType::AsArgList::serialize(OB, IR.Segments, IR.AAPs); } }; @@ -120,13 +120,13 @@ static void snmm_releaseMultiple(OnCompleteFn &&OnComplete, template <typename OnCompleteFn> static void snmm_initialize(OnCompleteFn &&OnComplete, SimpleNativeMemoryMap *Instance, - TestSNMMInitializeRequest FR) { + TestSNMMInitializeRequest IR) { using SPSSig = SPSExpected<SPSExecutorAddr>( SPSExecutorAddr, SPSSimpleNativeMemoryMapInitializeRequest); SPSWrapperFunction<SPSSig>::call( DirectCaller(nullptr, orc_rt_SimpleNativeMemoryMap_initialize_sps_wrapper), - std::forward<OnCompleteFn>(OnComplete), Instance, std::move(FR)); + std::forward<OnCompleteFn>(OnComplete), Instance, std::move(IR)); } template <typename OnCompleteFn> @@ -194,7 +194,7 @@ TEST(SimpleNativeMemoryMap, FullPipelineForOneRWSegment) { void *Addr = cantFail(cantFail(ReserveAddr.get())); std::future<Expected<Expected<void *>>> InitializeKey; - TestSNMMInitializeRequest FR; + TestSNMMInitializeRequest IR; char *InitializeBase = // Initialize addr at non-zero (64kb) offset from base. reinterpret_cast<char *>(Addr) + 64 * 1024; uint64_t SentinelValue1 = 0; // Read from pre-filled content @@ -208,11 +208,11 @@ TEST(SimpleNativeMemoryMap, FullPipelineForOneRWSegment) { memcpy(Content.data(), &SentinelValue3, sizeof(uint64_t)); memcpy(Content.data() + sizeof(uint64_t), &SentinelValue1, sizeof(uint64_t)); - FR.Segments.push_back({MemProt::Read | MemProt::Write, InitializeBase, + IR.Segments.push_back({MemProt::Read | MemProt::Write, InitializeBase, 64 * 1024, std::move(Content)}); // Read initial content into Sentinel 1. - FR.AAPs.push_back({ + IR.AAPs.push_back({ *MakeAllocAction<SPSExecutorAddr, SPSExecutorAddr>::from( read_value_sps_allocaction, ExecutorAddr::fromPtr(&SentinelValue1), ExecutorAddr::fromPtr(InitializeBase)), @@ -220,7 +220,7 @@ TEST(SimpleNativeMemoryMap, FullPipelineForOneRWSegment) { }); // Write value in finalize action, then read back into Sentinel 2. - FR.AAPs.push_back( + IR.AAPs.push_back( {*MakeAllocAction<SPSExecutorAddr, uint64_t>::from( write_value_sps_allocaction, ExecutorAddr::fromPtr(InitializeBase) + sizeof(uint64_t), @@ -230,14 +230,14 @@ TEST(SimpleNativeMemoryMap, FullPipelineForOneRWSegment) { ExecutorAddr::fromPtr(InitializeBase) + sizeof(uint64_t))}); // Read first 64 bits of the zero-fill region. - FR.AAPs.push_back({ + IR.AAPs.push_back({ *MakeAllocAction<SPSExecutorAddr, SPSExecutorAddr>::from( read_value_sps_allocaction, ExecutorAddr::fromPtr(&SentinelValue3), ExecutorAddr::fromPtr(InitializeBase) + sizeof(uint64_t) * 2), {} // No dealloc action. }); - snmm_initialize(waitFor(InitializeKey), SNMM.get(), std::move(FR)); + snmm_initialize(waitFor(InitializeKey), SNMM.get(), std::move(IR)); void *InitializeKeyAddr = cantFail(cantFail(InitializeKey.get())); EXPECT_EQ(SentinelValue1, 42U); @@ -268,22 +268,22 @@ TEST(SimpleNativeMemoryMap, ReserveInitializeShutdown) { void *Addr = cantFail(cantFail(ReserveAddr.get())); std::future<Expected<Expected<void *>>> InitializeKey; - TestSNMMInitializeRequest FR; + TestSNMMInitializeRequest IR; char *InitializeBase = // Initialize addr at non-zero (64kb) offset from base. reinterpret_cast<char *>(Addr) + 64 * 1024; uint64_t SentinelValue = 0; - FR.Segments.push_back( + IR.Segments.push_back( {MemProt::Read | MemProt::Write, InitializeBase, 64 * 1024}); - FR.AAPs.push_back( + IR.AAPs.push_back( {*MakeAllocAction<SPSExecutorAddr, uint64_t>::from( write_value_sps_allocaction, ExecutorAddr::fromPtr(InitializeBase), uint64_t(42)), *MakeAllocAction<SPSExecutorAddr, SPSExecutorAddr>::from( read_value_sps_allocaction, ExecutorAddr::fromPtr(&SentinelValue), ExecutorAddr::fromPtr(InitializeBase))}); - snmm_initialize(waitFor(InitializeKey), SNMM.get(), std::move(FR)); + snmm_initialize(waitFor(InitializeKey), SNMM.get(), std::move(IR)); cantFail(cantFail(InitializeKey.get())); EXPECT_EQ(SentinelValue, 0U); @@ -305,22 +305,22 @@ TEST(SimpleNativeMemoryMap, ReserveInitializeDetachShutdown) { void *Addr = cantFail(cantFail(ReserveAddr.get())); std::future<Expected<Expected<void *>>> InitializeKey; - TestSNMMInitializeRequest FR; + TestSNMMInitializeRequest IR; char *InitializeBase = // Initialize addr at non-zero (64kb) offset from base. reinterpret_cast<char *>(Addr) + 64 * 1024; uint64_t SentinelValue = 0; - FR.Segments.push_back( + IR.Segments.push_back( {MemProt::Read | MemProt::Write, InitializeBase, 64 * 1024}); - FR.AAPs.push_back( + IR.AAPs.push_back( {*MakeAllocAction<SPSExecutorAddr, uint64_t>::from( write_value_sps_allocaction, ExecutorAddr::fromPtr(InitializeBase), uint64_t(42)), *MakeAllocAction<SPSExecutorAddr, SPSExecutorAddr>::from( read_value_sps_allocaction, ExecutorAddr::fromPtr(&SentinelValue), ExecutorAddr::fromPtr(InitializeBase))}); - snmm_initialize(waitFor(InitializeKey), SNMM.get(), std::move(FR)); + snmm_initialize(waitFor(InitializeKey), SNMM.get(), std::move(IR)); cantFail(cantFail(InitializeKey.get())); EXPECT_EQ(SentinelValue, 0U); |