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 20 namespace __sanitizer { 21 struct DTLS; 22 } 23 24 namespace __lsan { 25 26 class ThreadContext : public ThreadContextBase { 27 public: 28 explicit ThreadContext(int tid); 29 void OnStarted(void *arg) override; 30 void OnFinished() override; stack_begin()31 uptr stack_begin() { return stack_begin_; } stack_end()32 uptr stack_end() { return stack_end_; } tls_begin()33 uptr tls_begin() { return tls_begin_; } tls_end()34 uptr tls_end() { return tls_end_; } cache_begin()35 uptr cache_begin() { return cache_begin_; } cache_end()36 uptr cache_end() { return cache_end_; } dtls()37 DTLS *dtls() { return dtls_; } 38 39 private: 40 uptr stack_begin_, stack_end_, 41 cache_begin_, cache_end_, 42 tls_begin_, tls_end_; 43 DTLS *dtls_; 44 }; 45 46 void InitializeThreadRegistry(); 47 48 void ThreadStart(u32 tid, uptr os_id); 49 void ThreadFinish(); 50 u32 ThreadCreate(u32 tid, uptr uid, bool detached); 51 void ThreadJoin(u32 tid); 52 u32 ThreadTid(uptr uid); 53 54 u32 GetCurrentThread(); 55 void SetCurrentThread(u32 tid); 56 ThreadContext *CurrentThreadContext(); 57 void EnsureMainThreadIDIsCorrect(); 58 } // namespace __lsan 59 60 #endif // LSAN_THREAD_H 61