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 19namespace __lsan { 20 21class ThreadContextLsanBase : public ThreadContextBase { 22 public: 23 explicit ThreadContextLsanBase(int tid); 24 void OnFinished() override; 25 uptr stack_begin() { return stack_begin_; } 26 uptr stack_end() { return stack_end_; } 27 uptr cache_begin() { return cache_begin_; } 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: 35 uptr stack_begin_ = 0; 36 uptr stack_end_ = 0; 37 uptr cache_begin_ = 0; 38 uptr cache_end_ = 0; 39}; 40 41// This subclass of ThreadContextLsanBase is declared in an OS-specific header. 42class ThreadContext; 43 44void InitializeThreadRegistry(); 45void InitializeMainThread(); 46 47u32 ThreadCreate(u32 tid, uptr uid, bool detached, void *arg = nullptr); 48void ThreadFinish(); 49void ThreadJoin(u32 tid); 50u32 ThreadTid(uptr uid); 51 52u32 GetCurrentThread(); 53void SetCurrentThread(u32 tid); 54ThreadContext *CurrentThreadContext(); 55void EnsureMainThreadIDIsCorrect(); 56 57} // namespace __lsan 58 59#endif // LSAN_THREAD_H 60