forked from OSchip/llvm-project
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
This commit is contained in:
parent
d15119a02d
commit
e6b3db6309
|
@ -930,7 +930,7 @@ public:
|
|||
}
|
||||
|
||||
private:
|
||||
using SecondaryT = MapAllocator<typename Params::SecondaryCache>;
|
||||
using SecondaryT = MapAllocator<Params>;
|
||||
typedef typename PrimaryT::SizeClassMap SizeClassMap;
|
||||
|
||||
static const uptr MinAlignmentLog = SCUDO_MIN_ALIGNMENT_LOG;
|
||||
|
|
|
@ -245,7 +245,7 @@ private:
|
|||
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 @@ public:
|
|||
void releaseToOS() { Cache.releaseToOS(); }
|
||||
|
||||
private:
|
||||
CacheT Cache;
|
||||
typename Config::SecondaryCache Cache;
|
||||
|
||||
HybridMutex Mutex;
|
||||
DoublyLinkedList<LargeBlock::Header> InUseBlocks;
|
||||
|
@ -318,8 +318,8 @@ private:
|
|||
// 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",
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue