
Summary: There is currently too much redundancy in the class/variable/* names in Scudo: - we are in the namespace `__scudo`, so there is no point in having something named `ScudoX` to end up with a final name of `__scudo::ScudoX`; - there are a lot of types/* that have `Allocator` in the name, given that Scudo is an allocator I figure this doubles up as well. So change a bunch of the Scudo names to make them shorter, less redundant, and overall simpler. They should still be pretty self explaining (or at least it looks so to me). The TSD part will be done in another CL (eg `__scudo::ScudoTSD`). Reviewers: alekseyshl, eugenis Reviewed By: alekseyshl Subscribers: delcypher, #sanitizers, llvm-commits Differential Revision: https://reviews.llvm.org/D49505 llvm-svn: 337557
76 lines
2.1 KiB
C++
76 lines
2.1 KiB
C++
//===-- scudo_allocator_combined.h ------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// Scudo Combined Allocator, dispatches allocation & deallocation requests to
|
|
/// the Primary or the Secondary backend allocators.
|
|
///
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef SCUDO_ALLOCATOR_COMBINED_H_
|
|
#define SCUDO_ALLOCATOR_COMBINED_H_
|
|
|
|
#ifndef SCUDO_ALLOCATOR_H_
|
|
# error "This file must be included inside scudo_allocator.h."
|
|
#endif
|
|
|
|
template <class PrimaryAllocator, class AllocatorCache,
|
|
class SecondaryAllocator>
|
|
class CombinedAllocator {
|
|
public:
|
|
void init(s32 ReleaseToOSIntervalMs) {
|
|
Primary.Init(ReleaseToOSIntervalMs);
|
|
Secondary.Init();
|
|
Stats.Init();
|
|
}
|
|
|
|
// Primary allocations are always MinAlignment aligned, and as such do not
|
|
// require an Alignment parameter.
|
|
void *allocatePrimary(AllocatorCache *Cache, uptr ClassId) {
|
|
return Cache->Allocate(&Primary, ClassId);
|
|
}
|
|
|
|
// Secondary allocations do not require a Cache, but do require an Alignment
|
|
// parameter.
|
|
void *allocateSecondary(uptr Size, uptr Alignment) {
|
|
return Secondary.Allocate(&Stats, Size, Alignment);
|
|
}
|
|
|
|
void deallocatePrimary(AllocatorCache *Cache, void *Ptr, uptr ClassId) {
|
|
Cache->Deallocate(&Primary, ClassId, Ptr);
|
|
}
|
|
|
|
void deallocateSecondary(void *Ptr) {
|
|
Secondary.Deallocate(&Stats, Ptr);
|
|
}
|
|
|
|
void initCache(AllocatorCache *Cache) {
|
|
Cache->Init(&Stats);
|
|
}
|
|
|
|
void destroyCache(AllocatorCache *Cache) {
|
|
Cache->Destroy(&Primary, &Stats);
|
|
}
|
|
|
|
void getStats(AllocatorStatCounters StatType) const {
|
|
Stats.Get(StatType);
|
|
}
|
|
|
|
void printStats() {
|
|
Primary.PrintStats();
|
|
Secondary.PrintStats();
|
|
}
|
|
|
|
private:
|
|
PrimaryAllocator Primary;
|
|
SecondaryAllocator Secondary;
|
|
AllocatorGlobalStats Stats;
|
|
};
|
|
|
|
#endif // SCUDO_ALLOCATOR_COMBINED_H_
|