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 _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits