1//=-- lsan_thread.h -------------------------------------------------------===// 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 LeakSanitizer. 11// Thread registry for standalone LSan. 12// 13//===----------------------------------------------------------------------===// 14 15#ifndef LSAN_THREAD_H 16#define LSAN_THREAD_H 17 18#include "sanitizer_common/sanitizer_thread_registry.h" 19 20namespace __lsan { 21 22class ThreadContext : public ThreadContextBase { 23 public: 24 explicit ThreadContext(int tid); 25 void OnStarted(void *arg); 26 void OnFinished(); 27 uptr stack_begin() { return stack_begin_; } 28 uptr stack_end() { return stack_end_; } 29 uptr tls_begin() { return tls_begin_; } 30 uptr tls_end() { return tls_end_; } 31 uptr cache_begin() { return cache_begin_; } 32 uptr cache_end() { return cache_end_; } 33 private: 34 uptr stack_begin_, stack_end_, 35 cache_begin_, cache_end_, 36 tls_begin_, tls_end_; 37}; 38 39void InitializeThreadRegistry(); 40 41void ThreadStart(u32 tid, uptr os_id); 42void ThreadFinish(); 43u32 ThreadCreate(u32 tid, uptr uid, bool detached); 44void ThreadJoin(u32 tid); 45u32 ThreadTid(uptr uid); 46 47u32 GetCurrentThread(); 48void SetCurrentThread(u32 tid); 49ThreadContext *CurrentThreadContext(); 50void EnsureMainThreadIDIsCorrect(); 51} // namespace __lsan 52 53#endif // LSAN_THREAD_H 54