From ff8c0e6eb5a820c012c9de81608648d3ffc78600 Mon Sep 17 00:00:00 2001 From: Dominic Chen Date: Wed, 6 Jul 2022 15:52:32 -0700 Subject: [PATCH] [scudo] Pass MapPlatformData in more calls Allow platforms to avoid looking up private data by providing private context Differential Revision: https://reviews.llvm.org/D129237 --- compiler-rt/lib/scudo/standalone/release.h | 5 +++-- compiler-rt/lib/scudo/standalone/vector.h | 7 ++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/compiler-rt/lib/scudo/standalone/release.h b/compiler-rt/lib/scudo/standalone/release.h index 293a8bc..9dad3c3 100644 --- a/compiler-rt/lib/scudo/standalone/release.h +++ b/compiler-rt/lib/scudo/standalone/release.h @@ -82,7 +82,7 @@ public: } else { Buffer = reinterpret_cast( map(nullptr, roundUpTo(BufferSize, getPageSizeCached()), - "scudo:counters", MAP_ALLOWNOMEM)); + "scudo:counters", MAP_ALLOWNOMEM, &MapData)); } } ~PackedCounterArray() { @@ -92,7 +92,7 @@ public: Mutex.unlock(); else unmap(reinterpret_cast(Buffer), - roundUpTo(BufferSize, getPageSizeCached())); + roundUpTo(BufferSize, getPageSizeCached()), 0, &MapData); } bool isAllocated() const { return !!Buffer; } @@ -138,6 +138,7 @@ private: uptr SizePerRegion; uptr BufferSize; uptr *Buffer; + MapPlatformData MapData = {}; static HybridMutex Mutex; static uptr StaticBuffer[StaticBufferCount]; diff --git a/compiler-rt/lib/scudo/standalone/vector.h b/compiler-rt/lib/scudo/standalone/vector.h index eae774b..84e9c53 100644 --- a/compiler-rt/lib/scudo/standalone/vector.h +++ b/compiler-rt/lib/scudo/standalone/vector.h @@ -27,7 +27,7 @@ public: } void destroy() { if (Data != &LocalData[0]) - unmap(Data, CapacityBytes); + unmap(Data, CapacityBytes, 0, &MapData); } T &operator[](uptr I) { DCHECK_LT(I, Size); @@ -83,8 +83,8 @@ private: DCHECK_GT(NewCapacity, 0); DCHECK_LE(Size, NewCapacity); NewCapacity = roundUpTo(NewCapacity * sizeof(T), getPageSizeCached()); - T *NewData = - reinterpret_cast(map(nullptr, NewCapacity, "scudo:vector")); + T *NewData = reinterpret_cast( + map(nullptr, NewCapacity, "scudo:vector", 0, &MapData)); memcpy(NewData, Data, Size * sizeof(T)); destroy(); Data = NewData; @@ -95,6 +95,7 @@ private: T LocalData[256 / sizeof(T)] = {}; uptr CapacityBytes = 0; uptr Size = 0; + MapPlatformData MapData = {}; }; template class Vector : public VectorNoCtor { -- 2.7.4