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