blob: 340c4ad2ea8275a49eba25535a1b869eb123feea [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
36enum MBlockType {
37 MBlockScopedBuf,
38 MBlockString,
39 MBlockStackTrace,
Dmitry Vyukov5bfac972012-07-16 16:44:47 +000040 MBlockShadowStack,
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000041 MBlockSync,
42 MBlockClock,
43 MBlockThreadContex,
Dmitry Vyukovf6985e32012-05-22 14:34:43 +000044 MBlockDeadInfo,
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000045 MBlockRacyStacks,
46 MBlockRacyAddresses,
47 MBlockAtExit,
48 MBlockFlag,
49 MBlockReport,
50 MBlockReportMop,
51 MBlockReportThread,
52 MBlockReportMutex,
53 MBlockReportLoc,
54 MBlockReportStack,
55 MBlockSuppression,
56 MBlockExpectRace,
Dmitry Vyukov97c26bd2012-06-27 16:05:06 +000057 MBlockSignal,
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000058
59 // This must be the last.
Alexey Samsonov046248c2012-09-13 11:54:41 +000060 MBlockTypeCount
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000061};
62
63// For internal data structures.
64void *internal_alloc(MBlockType typ, uptr sz);
65void internal_free(void *p);
66
67template<typename T>
68void DestroyAndFree(T *&p) {
69 p->~T();
70 internal_free(p);
71 p = 0;
72}
73
Kostya Serebryany4ad375f2012-05-10 13:48:04 +000074} // namespace __tsan
75#endif // TSAN_MMAN_H