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