tsan_mman.h revision 1.6
1//===-- tsan_mman.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 file is a part of ThreadSanitizer (TSan), a race detector.
9//
10//===----------------------------------------------------------------------===//
11#ifndef TSAN_MMAN_H
12#define TSAN_MMAN_H
13
14#include "tsan_defs.h"
15
16namespace __tsan {
17
18const uptr kDefaultAlignment = 16;
19
20void InitializeAllocator();
21void InitializeAllocatorLate();
22void ReplaceSystemMalloc();
23void AllocatorProcStart(Processor *proc);
24void AllocatorProcFinish(Processor *proc);
25void AllocatorPrintStats();
26
27// For user allocations.
28void *user_alloc(ThreadState *thr, uptr pc, uptr sz,
29                 uptr align = kDefaultAlignment, bool signal = true);
30void *user_calloc(ThreadState *thr, uptr pc, uptr sz, uptr n);
31// Does not accept NULL.
32void user_free(ThreadState *thr, uptr pc, void *p, bool signal = true);
33void *user_realloc(ThreadState *thr, uptr pc, void *p, uptr sz);
34void *user_alloc_aligned(ThreadState *thr, uptr pc, uptr sz, uptr align);
35uptr user_alloc_usable_size(const void *p);
36
37// Invoking malloc/free hooks that may be installed by the user.
38void invoke_malloc_hook(void *ptr, uptr size);
39void invoke_free_hook(void *ptr);
40
41enum MBlockType {
42  MBlockScopedBuf,
43  MBlockString,
44  MBlockStackTrace,
45  MBlockShadowStack,
46  MBlockSync,
47  MBlockClock,
48  MBlockThreadContex,
49  MBlockDeadInfo,
50  MBlockRacyStacks,
51  MBlockRacyAddresses,
52  MBlockAtExit,
53  MBlockFlag,
54  MBlockReport,
55  MBlockReportMop,
56  MBlockReportThread,
57  MBlockReportMutex,
58  MBlockReportLoc,
59  MBlockReportStack,
60  MBlockSuppression,
61  MBlockExpectRace,
62  MBlockSignal,
63  MBlockJmpBuf,
64
65  // This must be the last.
66  MBlockTypeCount
67};
68
69// For internal data structures.
70void *internal_alloc(MBlockType typ, uptr sz);
71void internal_free(void *p);
72
73template<typename T>
74void DestroyAndFree(T *&p) {
75  p->~T();
76  internal_free(p);
77  p = 0;
78}
79
80}  // namespace __tsan
81#endif  // TSAN_MMAN_H
82