1//===-- sanitizer_allocator_internal.h --------------------------*- C++ -*-===// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file is distributed under the University of Illinois Open Source 6// License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9// 10// This allocator is used inside run-times. 11// 12//===----------------------------------------------------------------------===// 13 14#ifndef SANITIZER_ALLOCATOR_INTERNAL_H 15#define SANITIZER_ALLOCATOR_INTERNAL_H 16 17#include "sanitizer_allocator.h" 18#include "sanitizer_internal_defs.h" 19 20namespace __sanitizer { 21 22// FIXME: Check if we may use even more compact size class map for internal 23// purposes. 24typedef CompactSizeClassMap InternalSizeClassMap; 25 26static const uptr kInternalAllocatorSpace = 0; 27static const u64 kInternalAllocatorSize = SANITIZER_MMAP_RANGE_SIZE; 28static const uptr kInternalAllocatorRegionSizeLog = 20; 29#if SANITIZER_WORDSIZE == 32 30static const uptr kInternalAllocatorNumRegions = 31 kInternalAllocatorSize >> kInternalAllocatorRegionSizeLog; 32typedef FlatByteMap<kInternalAllocatorNumRegions> ByteMap; 33#else 34static const uptr kInternalAllocatorNumRegions = 35 kInternalAllocatorSize >> kInternalAllocatorRegionSizeLog; 36typedef TwoLevelByteMap<(kInternalAllocatorNumRegions >> 12), 1 << 12> ByteMap; 37#endif 38typedef SizeClassAllocator32< 39 kInternalAllocatorSpace, kInternalAllocatorSize, 0, InternalSizeClassMap, 40 kInternalAllocatorRegionSizeLog, ByteMap> PrimaryInternalAllocator; 41 42typedef SizeClassAllocatorLocalCache<PrimaryInternalAllocator> 43 InternalAllocatorCache; 44 45typedef CombinedAllocator<PrimaryInternalAllocator, InternalAllocatorCache, 46 LargeMmapAllocator<> > InternalAllocator; 47 48void *InternalAlloc(uptr size, InternalAllocatorCache *cache = nullptr); 49void InternalFree(void *p, InternalAllocatorCache *cache = nullptr); 50InternalAllocator *internal_allocator(); 51 52enum InternalAllocEnum { 53 INTERNAL_ALLOC 54}; 55 56} // namespace __sanitizer 57 58inline void *operator new(__sanitizer::operator_new_size_type size, 59 InternalAllocEnum) { 60 return InternalAlloc(size); 61} 62 63#endif // SANITIZER_ALLOCATOR_INTERNAL_H 64