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