1 //=-- lsan_thread.h -------------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // This file is a part of LeakSanitizer. 10 // Thread registry for standalone LSan. 11 // 12 //===----------------------------------------------------------------------===// 13 14 #ifndef LSAN_THREAD_H 15 #define LSAN_THREAD_H 16 17 #include "sanitizer_common/sanitizer_thread_registry.h" 18 19 namespace __lsan { 20 21 class ThreadContextLsanBase : public ThreadContextBase { 22 public: 23 explicit ThreadContextLsanBase(int tid); 24 void OnFinished() override; stack_begin()25 uptr stack_begin() { return stack_begin_; } stack_end()26 uptr stack_end() { return stack_end_; } cache_begin()27 uptr cache_begin() { return cache_begin_; } cache_end()28 uptr cache_end() { return cache_end_; } 29 30 // The argument is passed on to the subclass's OnStarted member function. 31 static void ThreadStart(u32 tid, tid_t os_id, ThreadType thread_type, 32 void *onstarted_arg); 33 34 protected: ~ThreadContextLsanBase()35 ~ThreadContextLsanBase() {} 36 uptr stack_begin_ = 0; 37 uptr stack_end_ = 0; 38 uptr cache_begin_ = 0; 39 uptr cache_end_ = 0; 40 }; 41 42 // This subclass of ThreadContextLsanBase is declared in an OS-specific header. 43 class ThreadContext; 44 45 void InitializeThreadRegistry(); 46 void InitializeMainThread(); 47 48 u32 ThreadCreate(u32 tid, uptr uid, bool detached, void *arg = nullptr); 49 void ThreadFinish(); 50 void ThreadDetach(u32 tid); 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 59 } // namespace __lsan 60 61 #endif // LSAN_THREAD_H 62