blob: 06dce8c235c8ce7768f2acce86b390663253c9da [file] [log] [blame]
Kostya Serebryany4ad375f2012-05-10 13:48:04 +00001//===-- tsan_mman.h ---------------------------------------------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file is a part of ThreadSanitizer (TSan), a race detector.
11//
12//===----------------------------------------------------------------------===//
13#ifndef TSAN_MMAN_H
14#define TSAN_MMAN_H
15
16#include "tsan_defs.h"
17
18namespace __tsan {
19
Dmitry Vyukov954fc8c2012-08-15 15:35:15 +000020const uptr kDefaultAlignment = 16;
21
22void InitializeAllocator();
23void AlloctorThreadFinish(ThreadState *thr);
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000024
25// For user allocations.
Dmitry Vyukov954fc8c2012-08-15 15:35:15 +000026void *user_alloc(ThreadState *thr, uptr pc, uptr sz,
27 uptr align = kDefaultAlignment);
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000028// Does not accept NULL.
29void user_free(ThreadState *thr, uptr pc, void *p);
30void *user_realloc(ThreadState *thr, uptr pc, void *p, uptr sz);
31void *user_alloc_aligned(ThreadState *thr, uptr pc, uptr sz, uptr align);
32// Given the pointer p into a valid allocated block,
33// returns the descriptor of the block.
34MBlock *user_mblock(ThreadState *thr, void *p);
35
Alexey Samsonov31301462012-09-24 13:19:47 +000036// Invoking malloc/free hooks that may be installed by the user.
37void invoke_malloc_hook(void *ptr, uptr size);
38void invoke_free_hook(void *ptr);
39
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000040enum MBlockType {
41 MBlockScopedBuf,
42 MBlockString,
43 MBlockStackTrace,
Dmitry Vyukov5bfac972012-07-16 16:44:47 +000044 MBlockShadowStack,
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000045 MBlockSync,
46 MBlockClock,
47 MBlockThreadContex,
Dmitry Vyukovf6985e32012-05-22 14:34:43 +000048 MBlockDeadInfo,
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000049 MBlockRacyStacks,
50 MBlockRacyAddresses,
51 MBlockAtExit,
52 MBlockFlag,
53 MBlockReport,
54 MBlockReportMop,
55 MBlockReportThread,
56 MBlockReportMutex,
57 MBlockReportLoc,
58 MBlockReportStack,
59 MBlockSuppression,
60 MBlockExpectRace,
Dmitry Vyukov97c26bd2012-06-27 16:05:06 +000061 MBlockSignal,
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000062
63 // This must be the last.
Alexey Samsonov046248c2012-09-13 11:54:41 +000064 MBlockTypeCount
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000065};
66
67// For internal data structures.
68void *internal_alloc(MBlockType typ, uptr sz);
69void internal_free(void *p);
70
71template<typename T>
72void DestroyAndFree(T *&p) {
73 p->~T();
74 internal_free(p);
75 p = 0;
76}
77
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000078} // namespace __tsan
79#endif // TSAN_MMAN_H