[compiler-rt] 4206925 - [scudo] Use MemMap for AllocationRingBuffer
Fabio D'Urso via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 26 01:35:31 PDT 2023
Author: Fabio D'Urso
Date: 2023-09-26T10:34:26+02:00
New Revision: 42069258c63dc9b31017f927650c6bac2dfffd89
URL: https://github.com/llvm/llvm-project/commit/42069258c63dc9b31017f927650c6bac2dfffd89
DIFF: https://github.com/llvm/llvm-project/commit/42069258c63dc9b31017f927650c6bac2dfffd89.diff
LOG: [scudo] Use MemMap for AllocationRingBuffer
Reviewed By: Chia-hungDuan
Differential Revision: https://reviews.llvm.org/D159466
Added:
Modified:
compiler-rt/lib/scudo/standalone/combined.h
Removed:
################################################################################
diff --git a/compiler-rt/lib/scudo/standalone/combined.h b/compiler-rt/lib/scudo/standalone/combined.h
index 29589cdd99fa78a..e4d2e4dee893a4a 100644
--- a/compiler-rt/lib/scudo/standalone/combined.h
+++ b/compiler-rt/lib/scudo/standalone/combined.h
@@ -1044,6 +1044,7 @@ class Allocator {
atomic_u32 DeallocationTid;
};
+ MemMapT MemMap;
atomic_uptr Pos;
u32 Size;
// An array of Size (at least one) elements of type Entry is immediately
@@ -1492,12 +1493,15 @@ class Allocator {
static_cast<u32>(getFlags()->allocation_ring_buffer_size);
if (AllocationRingBufferSize < 1)
return;
- RawRingBuffer = static_cast<char *>(
- map(/*Addr=*/nullptr,
- roundUp(ringBufferSizeInBytes(AllocationRingBufferSize),
- getPageSizeCached()),
- "scudo:ring_buffer"));
+ MemMapT MemMap;
+ MemMap.map(
+ /*Addr=*/0U,
+ roundUp(ringBufferSizeInBytes(AllocationRingBufferSize),
+ getPageSizeCached()),
+ "scudo:ring_buffer");
+ RawRingBuffer = reinterpret_cast<char *>(MemMap.getBase());
auto *RingBuffer = reinterpret_cast<AllocationRingBuffer *>(RawRingBuffer);
+ RingBuffer->MemMap = MemMap;
RingBuffer->Size = AllocationRingBufferSize;
static_assert(sizeof(AllocationRingBuffer) %
alignof(typename AllocationRingBuffer::Entry) ==
@@ -1506,7 +1510,11 @@ class Allocator {
}
void unmapRingBuffer() {
- unmap(RawRingBuffer, roundUp(getRingBufferSize(), getPageSizeCached()));
+ auto *RingBuffer = getRingBuffer();
+ if (RingBuffer != nullptr) {
+ MemMapT MemMap = RingBuffer->MemMap;
+ MemMap.unmap(MemMap.getBase(), MemMap.getCapacity());
+ }
RawRingBuffer = nullptr;
}
More information about the llvm-commits
mailing list