156f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev//=-- lsan_thread.h -------------------------------------------------------===// 256f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev// 356f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev// The LLVM Compiler Infrastructure 456f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev// 556f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev// This file is distributed under the University of Illinois Open Source 656f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev// License. See LICENSE.TXT for details. 756f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev// 856f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev//===----------------------------------------------------------------------===// 956f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev// 1056f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev// This file is a part of LeakSanitizer. 1156f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev// Thread registry for standalone LSan. 1256f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev// 1356f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev//===----------------------------------------------------------------------===// 1456f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev 1556f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev#ifndef LSAN_THREAD_H 1656f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev#define LSAN_THREAD_H 1756f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev 1856f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev#include "sanitizer_common/sanitizer_thread_registry.h" 1956f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev 2056f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveevnamespace __lsan { 2156f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev 2256f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveevclass ThreadContext : public ThreadContextBase { 2356f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev public: 2456f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev explicit ThreadContext(int tid); 2556f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev void OnStarted(void *arg); 2656f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev void OnFinished(); 2756f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev uptr stack_begin() { return stack_begin_; } 2856f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev uptr stack_end() { return stack_end_; } 2956f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev uptr tls_begin() { return tls_begin_; } 3056f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev uptr tls_end() { return tls_end_; } 3156f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev uptr cache_begin() { return cache_begin_; } 3256f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev uptr cache_end() { return cache_end_; } 3356f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev private: 3456f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev uptr stack_begin_, stack_end_, 3556f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev cache_begin_, cache_end_, 3656f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev tls_begin_, tls_end_; 3756f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev}; 3856f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev 3956f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveevvoid InitializeThreadRegistry(); 4056f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev 4156f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveevvoid ThreadStart(u32 tid, uptr os_id); 4256f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveevvoid ThreadFinish(); 4356f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveevu32 ThreadCreate(u32 tid, uptr uid, bool detached); 4456f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveevvoid ThreadJoin(u32 tid); 4556f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveevu32 ThreadTid(uptr uid); 4656f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev 4756f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveevu32 GetCurrentThread(); 4856f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveevvoid SetCurrentThread(u32 tid); 4956f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey MatveevThreadContext *CurrentThreadContext(); 50c6ac98d7fcc81768b2ef7ddc785c27e3fc1bdef6Sergey Matveevvoid EnsureMainThreadIDIsCorrect(); 5156f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev} // namespace __lsan 5256f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev 5356f77a7570d96aa4c6afb7ab26e58925b2506f86Sergey Matveev#endif // LSAN_THREAD_H 54