tsan_mman.h revision 5d71de26cedae3dafc17449fe0182045c0bd20e8
1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//===-- tsan_mman.h ---------------------------------------------*- C++ -*-===//
2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//                     The LLVM Compiler Infrastructure
4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// This file is distributed under the University of Illinois Open Source
6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// License. See LICENSE.TXT for details.
7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//===----------------------------------------------------------------------===//
9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// This file is a part of ThreadSanitizer (TSan), a race detector.
11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//
12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//===----------------------------------------------------------------------===//
13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#ifndef TSAN_MMAN_H
14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#define TSAN_MMAN_H
15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include "tsan_defs.h"
17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace __tsan {
19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleconst uptr kDefaultAlignment = 16;
21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid InitializeAllocator();
23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid AllocatorThreadStart(ThreadState *thr);
24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid AllocatorThreadFinish(ThreadState *thr);
25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid AllocatorPrintStats();
26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// For user allocations.
28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid *user_alloc(ThreadState *thr, uptr pc, uptr sz,
29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville                 uptr align = kDefaultAlignment);
30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Does not accept NULL.
31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid user_free(ThreadState *thr, uptr pc, void *p);
32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid *user_realloc(ThreadState *thr, uptr pc, void *p, uptr sz);
33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid *user_alloc_aligned(ThreadState *thr, uptr pc, uptr sz, uptr align);
34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleuptr user_alloc_usable_size(const void *p);
35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Invoking malloc/free hooks that may be installed by the user.
37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid invoke_malloc_hook(void *ptr, uptr size);
38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid invoke_free_hook(void *ptr);
39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleenum MBlockType {
41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockScopedBuf,
42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockString,
43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockStackTrace,
44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockShadowStack,
45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockSync,
46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockClock,
47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockThreadContex,
48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockDeadInfo,
49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockRacyStacks,
50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockRacyAddresses,
51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockAtExit,
52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockFlag,
53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockReport,
54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockReportMop,
55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockReportThread,
56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockReportMutex,
57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockReportLoc,
58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockReportStack,
59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockSuppression,
60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockExpectRace,
61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockSignal,
62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockJmpBuf,
63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  // This must be the last.
65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  MBlockTypeCount
66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville};
67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// For internal data structures.
69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid *internal_alloc(MBlockType typ, uptr sz);
70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid internal_free(void *p);
71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate<typename T>
73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid DestroyAndFree(T *&p) {
74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  p->~T();
75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  internal_free(p);
76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville  p = 0;
77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}
78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville
79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}  // namespace __tsan
80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif  // TSAN_MMAN_H
81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville