brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · b7262a9 Raw
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