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