[llvm-branch-commits] [compiler-rt] e6b3db6 - scudo: Replace the Cache argument on MapAllocator with a Config argument. NFCI.
Peter Collingbourne via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Tue Dec 22 16:57:30 PST 2020
Author: Peter Collingbourne
Date: 2020-12-22T16:52:48-08:00
New Revision: e6b3db6309f201075dd97fdfb89297f481bcee6e
URL: https://github.com/llvm/llvm-project/commit/e6b3db6309f201075dd97fdfb89297f481bcee6e
DIFF: https://github.com/llvm/llvm-project/commit/e6b3db6309f201075dd97fdfb89297f481bcee6e.diff
LOG: scudo: Replace the Cache argument on MapAllocator with a Config argument. NFCI.
This will allow the secondary allocator to access the
MaySupportMemoryTagging bool.
Differential Revision: https://reviews.llvm.org/D93729
Added:
Modified:
compiler-rt/lib/scudo/standalone/combined.h
compiler-rt/lib/scudo/standalone/secondary.h
compiler-rt/lib/scudo/standalone/tests/secondary_test.cpp
Removed:
################################################################################
diff --git a/compiler-rt/lib/scudo/standalone/combined.h b/compiler-rt/lib/scudo/standalone/combined.h
index 7bf108e0b5e0..fae71ba1b84f 100644
--- a/compiler-rt/lib/scudo/standalone/combined.h
+++ b/compiler-rt/lib/scudo/standalone/combined.h
@@ -930,7 +930,7 @@ class Allocator {
}
private:
- using SecondaryT = MapAllocator<typename Params::SecondaryCache>;
+ using SecondaryT = MapAllocator<Params>;
typedef typename PrimaryT::SizeClassMap SizeClassMap;
static const uptr MinAlignmentLog = SCUDO_MIN_ALIGNMENT_LOG;
diff --git a/compiler-rt/lib/scudo/standalone/secondary.h b/compiler-rt/lib/scudo/standalone/secondary.h
index cccbeb239dae..063640106abb 100644
--- a/compiler-rt/lib/scudo/standalone/secondary.h
+++ b/compiler-rt/lib/scudo/standalone/secondary.h
@@ -245,7 +245,7 @@ template <typename Config> class MapAllocatorCache {
atomic_s32 ReleaseToOsIntervalMs;
};
-template <class CacheT> class MapAllocator {
+template <typename Config> class MapAllocator {
public:
void initLinkerInitialized(GlobalStats *S, s32 ReleaseToOsInterval = -1) {
Cache.initLinkerInitialized(ReleaseToOsInterval);
@@ -295,7 +295,7 @@ template <class CacheT> class MapAllocator {
void releaseToOS() { Cache.releaseToOS(); }
private:
- CacheT Cache;
+ typename Config::SecondaryCache Cache;
HybridMutex Mutex;
DoublyLinkedList<LargeBlock::Header> InUseBlocks;
@@ -318,8 +318,8 @@ template <class CacheT> class MapAllocator {
// For allocations requested with an alignment greater than or equal to a page,
// the committed memory will amount to something close to Size - AlignmentHint
// (pending rounding and headers).
-template <class CacheT>
-void *MapAllocator<CacheT>::allocate(uptr Size, uptr AlignmentHint,
+template <typename Config>
+void *MapAllocator<Config>::allocate(uptr Size, uptr AlignmentHint,
uptr *BlockEnd,
FillContentsMode FillContents) {
DCHECK_GE(Size, AlignmentHint);
@@ -410,7 +410,7 @@ void *MapAllocator<CacheT>::allocate(uptr Size, uptr AlignmentHint,
return reinterpret_cast<void *>(Ptr + LargeBlock::getHeaderSize());
}
-template <class CacheT> void MapAllocator<CacheT>::deallocate(void *Ptr) {
+template <typename Config> void MapAllocator<Config>::deallocate(void *Ptr) {
LargeBlock::Header *H = LargeBlock::getHeader(Ptr);
const uptr Block = reinterpret_cast<uptr>(H);
const uptr CommitSize = H->BlockEnd - Block;
@@ -430,8 +430,8 @@ template <class CacheT> void MapAllocator<CacheT>::deallocate(void *Ptr) {
unmap(Addr, Size, UNMAP_ALL, &Data);
}
-template <class CacheT>
-void MapAllocator<CacheT>::getStats(ScopedString *Str) const {
+template <typename Config>
+void MapAllocator<Config>::getStats(ScopedString *Str) const {
Str->append(
"Stats: MapAllocator: allocated %zu times (%zuK), freed %zu times "
"(%zuK), remains %zu (%zuK) max %zuM\n",
diff --git a/compiler-rt/lib/scudo/standalone/tests/secondary_test.cpp b/compiler-rt/lib/scudo/standalone/tests/secondary_test.cpp
index 3c1e77987ec4..846ec8f6d6fa 100644
--- a/compiler-rt/lib/scudo/standalone/tests/secondary_test.cpp
+++ b/compiler-rt/lib/scudo/standalone/tests/secondary_test.cpp
@@ -19,7 +19,9 @@
#include <thread>
#include <vector>
-template <class SecondaryT> static void testSecondaryBasic(void) {
+template <typename Config> static void testSecondaryBasic(void) {
+ using SecondaryT = scudo::MapAllocator<Config>;
+
scudo::GlobalStats S;
S.init();
std::unique_ptr<SecondaryT> L(new SecondaryT);
@@ -55,7 +57,12 @@ template <class SecondaryT> static void testSecondaryBasic(void) {
Str.output();
}
+struct NoCacheConfig {
+ typedef scudo::MapAllocatorNoCache SecondaryCache;
+};
+
struct TestConfig {
+ typedef scudo::MapAllocatorCache<TestConfig> SecondaryCache;
static const scudo::u32 SecondaryCacheEntriesArraySize = 128U;
static const scudo::u32 SecondaryCacheDefaultMaxEntriesCount = 64U;
static const scudo::uptr SecondaryCacheDefaultMaxEntrySize = 1UL << 20;
@@ -64,15 +71,12 @@ struct TestConfig {
};
TEST(ScudoSecondaryTest, SecondaryBasic) {
- testSecondaryBasic<scudo::MapAllocator<scudo::MapAllocatorNoCache>>();
- testSecondaryBasic<
- scudo::MapAllocator<scudo::MapAllocatorCache<scudo::DefaultConfig>>>();
- testSecondaryBasic<
- scudo::MapAllocator<scudo::MapAllocatorCache<TestConfig>>>();
+ testSecondaryBasic<NoCacheConfig>();
+ testSecondaryBasic<scudo::DefaultConfig>();
+ testSecondaryBasic<TestConfig>();
}
-using LargeAllocator =
- scudo::MapAllocator<scudo::MapAllocatorCache<scudo::DefaultConfig>>;
+using LargeAllocator = scudo::MapAllocator<scudo::DefaultConfig>;
// This exercises a variety of combinations of size and alignment for the
// MapAllocator. The size computation done here mimic the ones done by the
More information about the llvm-branch-commits
mailing list