1 //===-- sanitizer_allocator_internal.h --------------------------*- C++ -*-===//
3 // This file is distributed under the University of Illinois Open Source
4 // License. See LICENSE.TXT for details.
6 //===----------------------------------------------------------------------===//
8 // This allocator is used inside run-times.
10 //===----------------------------------------------------------------------===//
12 #ifndef SANITIZER_ALLOCATOR_INTERNAL_H
13 #define SANITIZER_ALLOCATOR_INTERNAL_H
15 #include "sanitizer_allocator.h"
16 #include "sanitizer_internal_defs.h"
18 namespace __sanitizer
{
20 // FIXME: Check if we may use even more compact size class map for internal
22 typedef CompactSizeClassMap InternalSizeClassMap
;
24 static const uptr kInternalAllocatorRegionSizeLog
= 20;
25 static const uptr kInternalAllocatorNumRegions
=
26 SANITIZER_MMAP_RANGE_SIZE
>> kInternalAllocatorRegionSizeLog
;
27 #if SANITIZER_WORDSIZE == 32
28 typedef FlatByteMap
<kInternalAllocatorNumRegions
> ByteMap
;
30 typedef TwoLevelByteMap
<(kInternalAllocatorNumRegions
>> 12), 1 << 12> ByteMap
;
33 static const uptr kSpaceBeg
= 0;
34 static const u64 kSpaceSize
= SANITIZER_MMAP_RANGE_SIZE
;
35 static const uptr kMetadataSize
= 0;
36 typedef InternalSizeClassMap SizeClassMap
;
37 static const uptr kRegionSizeLog
= kInternalAllocatorRegionSizeLog
;
38 typedef __sanitizer::ByteMap ByteMap
;
39 typedef NoOpMapUnmapCallback MapUnmapCallback
;
40 static const uptr kFlags
= 0;
42 typedef SizeClassAllocator32
<AP32
> PrimaryInternalAllocator
;
44 typedef SizeClassAllocatorLocalCache
<PrimaryInternalAllocator
>
45 InternalAllocatorCache
;
47 typedef CombinedAllocator
<PrimaryInternalAllocator
, InternalAllocatorCache
,
48 LargeMmapAllocator
<NoOpMapUnmapCallback
, DieOnFailure
>
51 void *InternalAlloc(uptr size
, InternalAllocatorCache
*cache
= nullptr,
53 void *InternalRealloc(void *p
, uptr size
,
54 InternalAllocatorCache
*cache
= nullptr);
55 void *InternalCalloc(uptr countr
, uptr size
,
56 InternalAllocatorCache
*cache
= nullptr);
57 void InternalFree(void *p
, InternalAllocatorCache
*cache
= nullptr);
58 InternalAllocator
*internal_allocator();
60 enum InternalAllocEnum
{
64 } // namespace __sanitizer
66 inline void *operator new(__sanitizer::operator_new_size_type size
,
67 __sanitizer::InternalAllocEnum
) {
68 return __sanitizer::InternalAlloc(size
);
71 #endif // SANITIZER_ALLOCATOR_INTERNAL_H