[compiler-rt] [scudo][NFC] Add a default unmap() to unmap all pages (PR #102234)
via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 6 14:38:00 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-compiler-rt-sanitizer
Author: None (ChiaHungDuan)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/102234.diff
11 Files Affected:
- (modified) compiler-rt/lib/scudo/standalone/combined.h (+2-4)
- (modified) compiler-rt/lib/scudo/standalone/mem_map_base.h (+4)
- (modified) compiler-rt/lib/scudo/standalone/primary64.h (+1-1)
- (modified) compiler-rt/lib/scudo/standalone/release.h (+1-1)
- (modified) compiler-rt/lib/scudo/standalone/secondary.h (+1-1)
- (modified) compiler-rt/lib/scudo/standalone/tests/common_test.cpp (+2-2)
- (modified) compiler-rt/lib/scudo/standalone/tests/map_test.cpp (+3-3)
- (modified) compiler-rt/lib/scudo/standalone/tests/memtag_test.cpp (+1-1)
- (modified) compiler-rt/lib/scudo/standalone/tests/strings_test.cpp (+1-1)
- (modified) compiler-rt/lib/scudo/standalone/tests/vector_test.cpp (+1-1)
- (modified) compiler-rt/lib/scudo/standalone/vector.h (+1-2)
``````````diff
diff --git a/compiler-rt/lib/scudo/standalone/combined.h b/compiler-rt/lib/scudo/standalone/combined.h
index fcf65652c5fce..9c26282e6f860 100644
--- a/compiler-rt/lib/scudo/standalone/combined.h
+++ b/compiler-rt/lib/scudo/standalone/combined.h
@@ -1706,14 +1706,12 @@ class Allocator {
return;
// N.B. because RawStackDepotMap is part of RawRingBufferMap, the order
// is very important.
- RB->RawStackDepotMap.unmap(RB->RawStackDepotMap.getBase(),
- RB->RawStackDepotMap.getCapacity());
+ RB->RawStackDepotMap.unmap();
// Note that the `RB->RawRingBufferMap` is stored on the pages managed by
// itself. Take over the ownership before calling unmap() so that any
// operation along with unmap() won't touch inaccessible pages.
MemMapT RawRingBufferMap = RB->RawRingBufferMap;
- RawRingBufferMap.unmap(RawRingBufferMap.getBase(),
- RawRingBufferMap.getCapacity());
+ RawRingBufferMap.unmap();
atomic_store(&RingBufferAddress, 0, memory_order_release);
}
diff --git a/compiler-rt/lib/scudo/standalone/mem_map_base.h b/compiler-rt/lib/scudo/standalone/mem_map_base.h
index 99ab0cba604fc..cba02a16b02f2 100644
--- a/compiler-rt/lib/scudo/standalone/mem_map_base.h
+++ b/compiler-rt/lib/scudo/standalone/mem_map_base.h
@@ -35,6 +35,10 @@ template <class Derived> class MemMapBase {
DCHECK((Addr == getBase()) || (Addr + Size == getBase() + getCapacity()));
invokeImpl(&Derived::unmapImpl, Addr, Size);
}
+ // A default implementation to unmap all pages.
+ void unmap() {
+ unmap(getBase(), getCapacity());
+ }
// This is used to remap a mapped range (either from map() or dispatched from
// ReservedMemory). For example, we have reserved several pages and then we
diff --git a/compiler-rt/lib/scudo/standalone/primary64.h b/compiler-rt/lib/scudo/standalone/primary64.h
index 8a583bacb4a93..8436f33c2fdcf 100644
--- a/compiler-rt/lib/scudo/standalone/primary64.h
+++ b/compiler-rt/lib/scudo/standalone/primary64.h
@@ -160,7 +160,7 @@ template <typename Config> class SizeClassAllocator64 {
ScopedLock ML(Region->MMLock);
MemMapT MemMap = Region->MemMapInfo.MemMap;
if (MemMap.isAllocated())
- MemMap.unmap(MemMap.getBase(), MemMap.getCapacity());
+ MemMap.unmap();
}
*Region = {};
}
diff --git a/compiler-rt/lib/scudo/standalone/release.h b/compiler-rt/lib/scudo/standalone/release.h
index b6f76a4d20585..69f926e3f8680 100644
--- a/compiler-rt/lib/scudo/standalone/release.h
+++ b/compiler-rt/lib/scudo/standalone/release.h
@@ -158,7 +158,7 @@ class BufferPool {
DCHECK_EQ((Mask & (static_cast<uptr>(1) << Buf.BufferIndex)), 0U);
Mask |= static_cast<uptr>(1) << Buf.BufferIndex;
} else {
- Buf.MemMap.unmap(Buf.MemMap.getBase(), Buf.MemMap.getCapacity());
+ Buf.MemMap.unmap();
}
}
diff --git a/compiler-rt/lib/scudo/standalone/secondary.h b/compiler-rt/lib/scudo/standalone/secondary.h
index df7d1e63b9562..88eb5bd1ee566 100644
--- a/compiler-rt/lib/scudo/standalone/secondary.h
+++ b/compiler-rt/lib/scudo/standalone/secondary.h
@@ -66,7 +66,7 @@ template <typename Config> static Header *getHeader(const void *Ptr) {
} // namespace LargeBlock
static inline void unmap(MemMapT &MemMap) {
- MemMap.unmap(MemMap.getBase(), MemMap.getCapacity());
+ MemMap.unmap();
}
namespace {
diff --git a/compiler-rt/lib/scudo/standalone/tests/common_test.cpp b/compiler-rt/lib/scudo/standalone/tests/common_test.cpp
index fff7c662a41bc..e6ddbb00b843c 100644
--- a/compiler-rt/lib/scudo/standalone/tests/common_test.cpp
+++ b/compiler-rt/lib/scudo/standalone/tests/common_test.cpp
@@ -50,7 +50,7 @@ TEST(ScudoCommonTest, SKIP_ON_FUCHSIA(ResidentMemorySize)) {
memset(P, 1, Size);
EXPECT_GT(getResidentMemorySize(), OnStart + Size - Threshold);
- MemMap.unmap(MemMap.getBase(), Size);
+ MemMap.unmap();
}
TEST(ScudoCommonTest, Zeros) {
@@ -69,7 +69,7 @@ TEST(ScudoCommonTest, Zeros) {
MemMap.releasePagesToOS(MemMap.getBase(), Size);
EXPECT_EQ(std::count(P, P + N, 0), N);
- MemMap.unmap(MemMap.getBase(), Size);
+ MemMap.unmap();
}
} // namespace scudo
diff --git a/compiler-rt/lib/scudo/standalone/tests/map_test.cpp b/compiler-rt/lib/scudo/standalone/tests/map_test.cpp
index 06a56f848030e..cc7d3ee4dc6c2 100644
--- a/compiler-rt/lib/scudo/standalone/tests/map_test.cpp
+++ b/compiler-rt/lib/scudo/standalone/tests/map_test.cpp
@@ -46,7 +46,7 @@ TEST(ScudoMapDeathTest, MapUnmap) {
scudo::uptr P = MemMap.getBase();
if (P == 0U)
continue;
- MemMap.unmap(MemMap.getBase(), Size);
+ MemMap.unmap();
memset(reinterpret_cast<void *>(P), 0xbb, Size);
}
},
@@ -68,7 +68,7 @@ TEST(ScudoMapDeathTest, MapWithGuardUnmap) {
ASSERT_TRUE(MemMap.remap(Q, Size, MappingName));
memset(reinterpret_cast<void *>(Q), 0xaa, Size);
EXPECT_DEATH(memset(reinterpret_cast<void *>(Q), 0xaa, Size + 1), "");
- MemMap.unmap(MemMap.getBase(), MemMap.getCapacity());
+ MemMap.unmap();
}
TEST(ScudoMapTest, MapGrowUnmap) {
@@ -87,5 +87,5 @@ TEST(ScudoMapTest, MapGrowUnmap) {
Q += PageSize;
ASSERT_TRUE(MemMap.remap(Q, PageSize, MappingName));
memset(reinterpret_cast<void *>(Q), 0xbb, PageSize);
- MemMap.unmap(MemMap.getBase(), MemMap.getCapacity());
+ MemMap.unmap();
}
diff --git a/compiler-rt/lib/scudo/standalone/tests/memtag_test.cpp b/compiler-rt/lib/scudo/standalone/tests/memtag_test.cpp
index 0613847f1e203..1fae651865359 100644
--- a/compiler-rt/lib/scudo/standalone/tests/memtag_test.cpp
+++ b/compiler-rt/lib/scudo/standalone/tests/memtag_test.cpp
@@ -63,7 +63,7 @@ class MemtagTest : public Test {
void TearDown() override {
if (Buffer) {
ASSERT_TRUE(MemMap.isAllocated());
- MemMap.unmap(MemMap.getBase(), MemMap.getCapacity());
+ MemMap.unmap();
}
}
diff --git a/compiler-rt/lib/scudo/standalone/tests/strings_test.cpp b/compiler-rt/lib/scudo/standalone/tests/strings_test.cpp
index 2c0916d789202..f81e5036e83b0 100644
--- a/compiler-rt/lib/scudo/standalone/tests/strings_test.cpp
+++ b/compiler-rt/lib/scudo/standalone/tests/strings_test.cpp
@@ -145,7 +145,7 @@ TEST(ScudoStringsTest, CapacityIncreaseFails) {
scudo::MemMapT MemMap;
if (MemMap.map(/*Addr=*/0U, scudo::getPageSizeCached(), "scudo:test",
MAP_ALLOWNOMEM)) {
- MemMap.unmap(MemMap.getBase(), MemMap.getCapacity());
+ MemMap.unmap();
setrlimit(RLIMIT_AS, &Limit);
TEST_SKIP("Limiting address space does not prevent mmap.");
}
diff --git a/compiler-rt/lib/scudo/standalone/tests/vector_test.cpp b/compiler-rt/lib/scudo/standalone/tests/vector_test.cpp
index a972d24a62688..cec8f46a8af21 100644
--- a/compiler-rt/lib/scudo/standalone/tests/vector_test.cpp
+++ b/compiler-rt/lib/scudo/standalone/tests/vector_test.cpp
@@ -62,7 +62,7 @@ TEST(ScudoVectorTest, ReallocateFails) {
scudo::MemMapT MemMap;
if (MemMap.map(/*Addr=*/0U, scudo::getPageSizeCached(), "scudo:test",
MAP_ALLOWNOMEM)) {
- MemMap.unmap(MemMap.getBase(), MemMap.getCapacity());
+ MemMap.unmap();
setrlimit(RLIMIT_AS, &Limit);
TEST_SKIP("Limiting address space does not prevent mmap.");
}
diff --git a/compiler-rt/lib/scudo/standalone/vector.h b/compiler-rt/lib/scudo/standalone/vector.h
index 98b3db4ad6980..0d059bab461c4 100644
--- a/compiler-rt/lib/scudo/standalone/vector.h
+++ b/compiler-rt/lib/scudo/standalone/vector.h
@@ -86,8 +86,7 @@ template <typename T, size_t StaticNumEntries> class VectorNoCtor {
}
void destroy() {
if (Data != &LocalData[0])
- ExternalBuffer.unmap(ExternalBuffer.getBase(),
- ExternalBuffer.getCapacity());
+ ExternalBuffer.unmap();
}
private:
``````````
</details>
https://github.com/llvm/llvm-project/pull/102234
More information about the llvm-commits
mailing list