#include "lsan_thread.h"
#include "lsan.h"
#include "lsan_allocator.h"
#include "lsan_common.h"
#include "sanitizer_common/sanitizer_common.h"
#include "sanitizer_common/sanitizer_placement_new.h"
#include "sanitizer_common/sanitizer_thread_registry.h"
#include "sanitizer_common/sanitizer_tls_get_addr.h"
namespace __lsan {
static ThreadRegistry *thread_registry;
static ThreadArgRetval *thread_arg_retval;
static Mutex mu_for_thread_context;
static LowLevelAllocator allocator_for_thread_context;
static ThreadContextBase *CreateThreadContext(u32 tid) { … }
void InitializeThreads() { … }
ThreadArgRetval &GetThreadArgRetval() { … }
ThreadContextLsanBase::ThreadContextLsanBase(int tid)
: … { … }
void ThreadContextLsanBase::OnStarted(void *arg) { … }
void ThreadContextLsanBase::OnFinished() { … }
u32 ThreadCreate(u32 parent_tid, bool detached, void *arg) { … }
void ThreadContextLsanBase::ThreadStart(u32 tid, tid_t os_id,
ThreadType thread_type, void *arg) { … }
void ThreadFinish() { … }
void EnsureMainThreadIDIsCorrect() { … }
void GetThreadExtraStackRangesLocked(tid_t os_id,
InternalMmapVector<Range> *ranges) { … }
void GetThreadExtraStackRangesLocked(InternalMmapVector<Range> *ranges) { … }
void LockThreads() { … }
void UnlockThreads() { … }
ThreadRegistry *GetLsanThreadRegistryLocked() { … }
void GetRunningThreadsLocked(InternalMmapVector<tid_t> *threads) { … }
void GetAdditionalThreadContextPtrsLocked(InternalMmapVector<uptr> *ptrs) { … }
}