annotate libsanitizer/lsan/lsan_allocator.h @ 158:494b0b89df80 default tip

...
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Mon, 25 May 2020 18:13:55 +0900
parents 1830386684a0
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 //=-- lsan_allocator.h ----------------------------------------------------===//
kono
parents:
diff changeset
2 //
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
4 // See https://llvm.org/LICENSE.txt for license information.
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
111
kono
parents:
diff changeset
6 //
kono
parents:
diff changeset
7 //===----------------------------------------------------------------------===//
kono
parents:
diff changeset
8 //
kono
parents:
diff changeset
9 // This file is a part of LeakSanitizer.
kono
parents:
diff changeset
10 // Allocator for standalone LSan.
kono
parents:
diff changeset
11 //
kono
parents:
diff changeset
12 //===----------------------------------------------------------------------===//
kono
parents:
diff changeset
13
kono
parents:
diff changeset
14 #ifndef LSAN_ALLOCATOR_H
kono
parents:
diff changeset
15 #define LSAN_ALLOCATOR_H
kono
parents:
diff changeset
16
kono
parents:
diff changeset
17 #include "sanitizer_common/sanitizer_allocator.h"
kono
parents:
diff changeset
18 #include "sanitizer_common/sanitizer_common.h"
kono
parents:
diff changeset
19 #include "sanitizer_common/sanitizer_internal_defs.h"
kono
parents:
diff changeset
20 #include "lsan_common.h"
kono
parents:
diff changeset
21
kono
parents:
diff changeset
22 namespace __lsan {
kono
parents:
diff changeset
23
kono
parents:
diff changeset
24 void *Allocate(const StackTrace &stack, uptr size, uptr alignment,
kono
parents:
diff changeset
25 bool cleared);
kono
parents:
diff changeset
26 void Deallocate(void *p);
kono
parents:
diff changeset
27 void *Reallocate(const StackTrace &stack, void *p, uptr new_size,
kono
parents:
diff changeset
28 uptr alignment);
kono
parents:
diff changeset
29 uptr GetMallocUsableSize(const void *p);
kono
parents:
diff changeset
30
kono
parents:
diff changeset
31 template<typename Callable>
kono
parents:
diff changeset
32 void ForEachChunk(const Callable &callback);
kono
parents:
diff changeset
33
kono
parents:
diff changeset
34 void GetAllocatorCacheRange(uptr *begin, uptr *end);
kono
parents:
diff changeset
35 void AllocatorThreadFinish();
kono
parents:
diff changeset
36 void InitializeAllocator();
kono
parents:
diff changeset
37
kono
parents:
diff changeset
38 const bool kAlwaysClearMemory = true;
kono
parents:
diff changeset
39
kono
parents:
diff changeset
40 struct ChunkMetadata {
kono
parents:
diff changeset
41 u8 allocated : 8; // Must be first.
kono
parents:
diff changeset
42 ChunkTag tag : 2;
kono
parents:
diff changeset
43 #if SANITIZER_WORDSIZE == 64
kono
parents:
diff changeset
44 uptr requested_size : 54;
kono
parents:
diff changeset
45 #else
kono
parents:
diff changeset
46 uptr requested_size : 32;
kono
parents:
diff changeset
47 uptr padding : 22;
kono
parents:
diff changeset
48 #endif
kono
parents:
diff changeset
49 u32 stack_trace_id;
kono
parents:
diff changeset
50 };
kono
parents:
diff changeset
51
kono
parents:
diff changeset
52 #if defined(__mips64) || defined(__aarch64__) || defined(__i386__) || \
kono
parents:
diff changeset
53 defined(__arm__)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
54 template <typename AddressSpaceViewTy>
111
kono
parents:
diff changeset
55 struct AP32 {
kono
parents:
diff changeset
56 static const uptr kSpaceBeg = 0;
kono
parents:
diff changeset
57 static const u64 kSpaceSize = SANITIZER_MMAP_RANGE_SIZE;
kono
parents:
diff changeset
58 static const uptr kMetadataSize = sizeof(ChunkMetadata);
kono
parents:
diff changeset
59 typedef __sanitizer::CompactSizeClassMap SizeClassMap;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
60 static const uptr kRegionSizeLog = 20;
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
61 using AddressSpaceView = AddressSpaceViewTy;
111
kono
parents:
diff changeset
62 typedef NoOpMapUnmapCallback MapUnmapCallback;
kono
parents:
diff changeset
63 static const uptr kFlags = 0;
kono
parents:
diff changeset
64 };
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
65 template <typename AddressSpaceView>
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
66 using PrimaryAllocatorASVT = SizeClassAllocator32<AP32<AddressSpaceView>>;
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
67 using PrimaryAllocator = PrimaryAllocatorASVT<LocalAddressSpaceView>;
111
kono
parents:
diff changeset
68 #elif defined(__x86_64__) || defined(__powerpc64__)
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
69 # if defined(__powerpc64__)
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
70 const uptr kAllocatorSpace = 0xa0000000000ULL;
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
71 const uptr kAllocatorSize = 0x20000000000ULL; // 2T.
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
72 # else
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
73 const uptr kAllocatorSpace = 0x600000000000ULL;
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
74 const uptr kAllocatorSize = 0x40000000000ULL; // 4T.
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
75 # endif
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
76 template <typename AddressSpaceViewTy>
111
kono
parents:
diff changeset
77 struct AP64 { // Allocator64 parameters. Deliberately using a short name.
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
78 static const uptr kSpaceBeg = kAllocatorSpace;
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
79 static const uptr kSpaceSize = kAllocatorSize;
111
kono
parents:
diff changeset
80 static const uptr kMetadataSize = sizeof(ChunkMetadata);
kono
parents:
diff changeset
81 typedef DefaultSizeClassMap SizeClassMap;
kono
parents:
diff changeset
82 typedef NoOpMapUnmapCallback MapUnmapCallback;
kono
parents:
diff changeset
83 static const uptr kFlags = 0;
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
84 using AddressSpaceView = AddressSpaceViewTy;
111
kono
parents:
diff changeset
85 };
kono
parents:
diff changeset
86
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
87 template <typename AddressSpaceView>
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
88 using PrimaryAllocatorASVT = SizeClassAllocator64<AP64<AddressSpaceView>>;
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
89 using PrimaryAllocator = PrimaryAllocatorASVT<LocalAddressSpaceView>;
111
kono
parents:
diff changeset
90 #endif
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
91
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
92 template <typename AddressSpaceView>
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
93 using AllocatorASVT = CombinedAllocator<PrimaryAllocatorASVT<AddressSpaceView>>;
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
94 using Allocator = AllocatorASVT<LocalAddressSpaceView>;
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
95 using AllocatorCache = Allocator::AllocatorCache;
111
kono
parents:
diff changeset
96
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
97 Allocator::AllocatorCache *GetAllocatorCache();
111
kono
parents:
diff changeset
98
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
99 int lsan_posix_memalign(void **memptr, uptr alignment, uptr size,
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
100 const StackTrace &stack);
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
101 void *lsan_aligned_alloc(uptr alignment, uptr size, const StackTrace &stack);
111
kono
parents:
diff changeset
102 void *lsan_memalign(uptr alignment, uptr size, const StackTrace &stack);
kono
parents:
diff changeset
103 void *lsan_malloc(uptr size, const StackTrace &stack);
kono
parents:
diff changeset
104 void lsan_free(void *p);
kono
parents:
diff changeset
105 void *lsan_realloc(void *p, uptr size, const StackTrace &stack);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
106 void *lsan_reallocarray(void *p, uptr nmemb, uptr size,
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
107 const StackTrace &stack);
111
kono
parents:
diff changeset
108 void *lsan_calloc(uptr nmemb, uptr size, const StackTrace &stack);
kono
parents:
diff changeset
109 void *lsan_valloc(uptr size, const StackTrace &stack);
145
1830386684a0 gcc-9.2.0
anatofuz
parents: 111
diff changeset
110 void *lsan_pvalloc(uptr size, const StackTrace &stack);
111
kono
parents:
diff changeset
111 uptr lsan_mz_size(const void *p);
kono
parents:
diff changeset
112
kono
parents:
diff changeset
113 } // namespace __lsan
kono
parents:
diff changeset
114
kono
parents:
diff changeset
115 #endif // LSAN_ALLOCATOR_H