brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.8 KiB · 143e61f Raw
74 lines · c
1//===- nsan_thread.h --------------------------------------------*- C++ -*-===//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#ifndef NSAN_THREAD_H10#define NSAN_THREAD_H11 12#include "nsan_allocator.h"13#include "sanitizer_common/sanitizer_common.h"14#include "sanitizer_common/sanitizer_posix.h"15 16namespace __nsan {17 18class NsanThread {19public:20  static NsanThread *Create(thread_callback_t start_routine, void *arg);21  static void TSDDtor(void *tsd);22  void Destroy();23 24  void Init(); // Should be called from the thread itself.25  thread_return_t ThreadStart();26 27  uptr stack_top();28  uptr stack_bottom();29  uptr tls_begin() { return tls_begin_; }30  uptr tls_end() { return tls_end_; }31  bool IsMainThread() { return start_routine_ == nullptr; }32 33  bool AddrIsInStack(uptr addr);34 35  void StartSwitchFiber(uptr bottom, uptr size);36  void FinishSwitchFiber(uptr *bottom_old, uptr *size_old);37 38  NsanThreadLocalMallocStorage &malloc_storage() { return malloc_storage_; }39 40  int destructor_iterations_;41  __sanitizer_sigset_t starting_sigset_;42 43private:44  void SetThreadStackAndTls();45  void ClearShadowForThreadStackAndTLS();46  struct StackBounds {47    uptr bottom;48    uptr top;49  };50  StackBounds GetStackBounds() const;51 52  thread_callback_t start_routine_;53  void *arg_;54 55  bool stack_switching_;56 57  StackBounds stack_;58  StackBounds next_stack_;59 60  uptr tls_begin_;61  uptr tls_end_;62 63  NsanThreadLocalMallocStorage malloc_storage_;64};65 66NsanThread *GetCurrentThread();67void SetCurrentThread(NsanThread *t);68void NsanTSDInit(void (*destructor)(void *tsd));69void NsanTSDDtor(void *tsd);70 71} // namespace __nsan72 73#endif // NSAN_THREAD_H74