1*7c3d14c8STreehugger Robot //=-- lsan_thread.h -------------------------------------------------------===// 2*7c3d14c8STreehugger Robot // 3*7c3d14c8STreehugger Robot // The LLVM Compiler Infrastructure 4*7c3d14c8STreehugger Robot // 5*7c3d14c8STreehugger Robot // This file is distributed under the University of Illinois Open Source 6*7c3d14c8STreehugger Robot // License. See LICENSE.TXT for details. 7*7c3d14c8STreehugger Robot // 8*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===// 9*7c3d14c8STreehugger Robot // 10*7c3d14c8STreehugger Robot // This file is a part of LeakSanitizer. 11*7c3d14c8STreehugger Robot // Thread registry for standalone LSan. 12*7c3d14c8STreehugger Robot // 13*7c3d14c8STreehugger Robot //===----------------------------------------------------------------------===// 14*7c3d14c8STreehugger Robot 15*7c3d14c8STreehugger Robot #ifndef LSAN_THREAD_H 16*7c3d14c8STreehugger Robot #define LSAN_THREAD_H 17*7c3d14c8STreehugger Robot 18*7c3d14c8STreehugger Robot #include "sanitizer_common/sanitizer_thread_registry.h" 19*7c3d14c8STreehugger Robot 20*7c3d14c8STreehugger Robot namespace __sanitizer { 21*7c3d14c8STreehugger Robot struct DTLS; 22*7c3d14c8STreehugger Robot } 23*7c3d14c8STreehugger Robot 24*7c3d14c8STreehugger Robot namespace __lsan { 25*7c3d14c8STreehugger Robot 26*7c3d14c8STreehugger Robot class ThreadContext : public ThreadContextBase { 27*7c3d14c8STreehugger Robot public: 28*7c3d14c8STreehugger Robot explicit ThreadContext(int tid); 29*7c3d14c8STreehugger Robot void OnStarted(void *arg) override; 30*7c3d14c8STreehugger Robot void OnFinished() override; stack_begin()31*7c3d14c8STreehugger Robot uptr stack_begin() { return stack_begin_; } stack_end()32*7c3d14c8STreehugger Robot uptr stack_end() { return stack_end_; } tls_begin()33*7c3d14c8STreehugger Robot uptr tls_begin() { return tls_begin_; } tls_end()34*7c3d14c8STreehugger Robot uptr tls_end() { return tls_end_; } cache_begin()35*7c3d14c8STreehugger Robot uptr cache_begin() { return cache_begin_; } cache_end()36*7c3d14c8STreehugger Robot uptr cache_end() { return cache_end_; } dtls()37*7c3d14c8STreehugger Robot DTLS *dtls() { return dtls_; } 38*7c3d14c8STreehugger Robot 39*7c3d14c8STreehugger Robot private: 40*7c3d14c8STreehugger Robot uptr stack_begin_, stack_end_, 41*7c3d14c8STreehugger Robot cache_begin_, cache_end_, 42*7c3d14c8STreehugger Robot tls_begin_, tls_end_; 43*7c3d14c8STreehugger Robot DTLS *dtls_; 44*7c3d14c8STreehugger Robot }; 45*7c3d14c8STreehugger Robot 46*7c3d14c8STreehugger Robot void InitializeThreadRegistry(); 47*7c3d14c8STreehugger Robot 48*7c3d14c8STreehugger Robot void ThreadStart(u32 tid, uptr os_id); 49*7c3d14c8STreehugger Robot void ThreadFinish(); 50*7c3d14c8STreehugger Robot u32 ThreadCreate(u32 tid, uptr uid, bool detached); 51*7c3d14c8STreehugger Robot void ThreadJoin(u32 tid); 52*7c3d14c8STreehugger Robot u32 ThreadTid(uptr uid); 53*7c3d14c8STreehugger Robot 54*7c3d14c8STreehugger Robot u32 GetCurrentThread(); 55*7c3d14c8STreehugger Robot void SetCurrentThread(u32 tid); 56*7c3d14c8STreehugger Robot ThreadContext *CurrentThreadContext(); 57*7c3d14c8STreehugger Robot void EnsureMainThreadIDIsCorrect(); 58*7c3d14c8STreehugger Robot } // namespace __lsan 59*7c3d14c8STreehugger Robot 60*7c3d14c8STreehugger Robot #endif // LSAN_THREAD_H 61