aboutsummaryrefslogtreecommitdiff
path: root/orc-rt
diff options
context:
space:
mode:
Diffstat (limited to 'orc-rt')
-rw-r--r--orc-rt/include/orc-rt/ExecutorAddress.h3
-rw-r--r--orc-rt/include/orc-rt/SimpleNativeMemoryMap.h2
-rw-r--r--orc-rt/lib/executor/SimpleNativeMemoryMap.cpp6
-rw-r--r--orc-rt/unittests/ExecutorAddressTest.cpp6
-rw-r--r--orc-rt/unittests/SimpleNativeMemoryMapTest.cpp40
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);