67 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8//9// This file is a part of LeakSanitizer.10// Thread registry for standalone LSan.11//12//===----------------------------------------------------------------------===//13 14#ifndef LSAN_THREAD_H15#define LSAN_THREAD_H16 17#include "sanitizer_common/sanitizer_thread_arg_retval.h"18#include "sanitizer_common/sanitizer_thread_registry.h"19 20namespace __lsan {21 22class ThreadContextLsanBase : public ThreadContextBase {23 public:24 explicit ThreadContextLsanBase(int tid);25 void OnStarted(void *arg) override;26 void OnFinished() override;27 uptr stack_begin() { return stack_begin_; }28 uptr stack_end() { return stack_end_; }29 uptr cache_begin() { return cache_begin_; }30 uptr cache_end() { return cache_end_; }31 32 // The argument is passed on to the subclass's OnStarted member function.33 static void ThreadStart(u32 tid, ThreadID os_id, ThreadType thread_type,34 void *onstarted_arg);35 36 protected:37 ~ThreadContextLsanBase() {}38 uptr stack_begin_ = 0;39 uptr stack_end_ = 0;40 uptr cache_begin_ = 0;41 uptr cache_end_ = 0;42};43 44// This subclass of ThreadContextLsanBase is declared in an OS-specific header.45class ThreadContext;46 47void InitializeThreads();48void InitializeMainThread();49 50ThreadRegistry *GetLsanThreadRegistryLocked();51ThreadArgRetval &GetThreadArgRetval();52 53u32 ThreadCreate(u32 tid, bool detached, void *arg = nullptr);54void ThreadFinish();55 56ThreadContextLsanBase *GetCurrentThread();57inline u32 GetCurrentThreadId() {58 ThreadContextLsanBase *ctx = GetCurrentThread();59 return ctx ? ctx->tid : kInvalidTid;60}61void SetCurrentThread(ThreadContextLsanBase *tctx);62void EnsureMainThreadIDIsCorrect();63 64} // namespace __lsan65 66#endif // LSAN_THREAD_H67