tsan_mman.h revision 5d71de26cedae3dafc17449fe0182045c0bd20e8
1fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//===-- tsan_mman.h ---------------------------------------------*- C++ -*-===// 2fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 3fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// The LLVM Compiler Infrastructure 4fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 5fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// This file is distributed under the University of Illinois Open Source 6fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// License. See LICENSE.TXT for details. 7fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 8fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//===----------------------------------------------------------------------===// 9fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 10fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// This file is a part of ThreadSanitizer (TSan), a race detector. 11fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// 12fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville//===----------------------------------------------------------------------===// 13fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#ifndef TSAN_MMAN_H 14fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#define TSAN_MMAN_H 15fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 16fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#include "tsan_defs.h" 17fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 18fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillenamespace __tsan { 19fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 20fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleconst uptr kDefaultAlignment = 16; 21fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 22fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid InitializeAllocator(); 23fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid AllocatorThreadStart(ThreadState *thr); 24fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid AllocatorThreadFinish(ThreadState *thr); 25fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid AllocatorPrintStats(); 26fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 27fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// For user allocations. 28fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid *user_alloc(ThreadState *thr, uptr pc, uptr sz, 29fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville uptr align = kDefaultAlignment); 30fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Does not accept NULL. 31fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid user_free(ThreadState *thr, uptr pc, void *p); 32fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid *user_realloc(ThreadState *thr, uptr pc, void *p, uptr sz); 33fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid *user_alloc_aligned(ThreadState *thr, uptr pc, uptr sz, uptr align); 34fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleuptr user_alloc_usable_size(const void *p); 35fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 36fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// Invoking malloc/free hooks that may be installed by the user. 37fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid invoke_malloc_hook(void *ptr, uptr size); 38fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid invoke_free_hook(void *ptr); 39fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 40fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilleenum MBlockType { 41fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockScopedBuf, 42fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockString, 43fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockStackTrace, 44fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockShadowStack, 45fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockSync, 46fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockClock, 47fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockThreadContex, 48fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockDeadInfo, 49fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockRacyStacks, 50fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockRacyAddresses, 51fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockAtExit, 52fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockFlag, 53fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockReport, 54fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockReportMop, 55fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockReportThread, 56fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockReportMutex, 57fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockReportLoc, 58fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockReportStack, 59fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockSuppression, 60fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockExpectRace, 61fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockSignal, 62fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockJmpBuf, 63fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 64fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville // This must be the last. 65fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville MBlockTypeCount 66fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville}; 67fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 68fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville// For internal data structures. 69fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid *internal_alloc(MBlockType typ, uptr sz); 70fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid internal_free(void *p); 71fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 72fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savilletemplate<typename T> 73fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Savillevoid DestroyAndFree(T *&p) { 74fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville p->~T(); 75fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville internal_free(p); 76fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville p = 0; 77fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} 78fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville 79fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville} // namespace __tsan 80fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville#endif // TSAN_MMAN_H 81fbaaef999ba563838ebd00874ed8a1c01fbf286dWink Saville