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