[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