xref: /llvm-project/compiler-rt/lib/hwasan/hwasan_thread_list.cpp (revision ba66d60b1caa9cb6fd77d69cc36c530916e68936)
1e3b6d110SNico Weber #include "hwasan_thread_list.h"
2e3b6d110SNico Weber 
3371e6d0fSEnna1 #include "sanitizer_common/sanitizer_placement_new.h"
468b76af8SVitaly Buka #include "sanitizer_common/sanitizer_thread_arg_retval.h"
568b76af8SVitaly Buka 
6e3b6d110SNico Weber namespace __hwasan {
716a76397SVitaly Buka 
8e3b6d110SNico Weber static HwasanThreadList *hwasan_thread_list;
968b76af8SVitaly Buka static ThreadArgRetval *thread_data;
10e3b6d110SNico Weber 
11e3b6d110SNico Weber HwasanThreadList &hwasanThreadList() { return *hwasan_thread_list; }
1268b76af8SVitaly Buka ThreadArgRetval &hwasanThreadArgRetval() { return *thread_data; }
13e3b6d110SNico Weber 
14e3b6d110SNico Weber void InitThreadList(uptr storage, uptr size) {
15f031fc35SVitaly Buka   CHECK_EQ(hwasan_thread_list, nullptr);
1616a76397SVitaly Buka 
17*ba66d60bSFangrui Song   alignas(alignof(HwasanThreadList)) static char
18*ba66d60bSFangrui Song       thread_list_placeholder[sizeof(HwasanThreadList)];
19e3b6d110SNico Weber   hwasan_thread_list =
20e3b6d110SNico Weber       new (thread_list_placeholder) HwasanThreadList(storage, size);
2168b76af8SVitaly Buka 
2268b76af8SVitaly Buka   CHECK_EQ(thread_data, nullptr);
2368b76af8SVitaly Buka 
24*ba66d60bSFangrui Song   alignas(alignof(ThreadArgRetval)) static char
25*ba66d60bSFangrui Song       thread_data_placeholder[sizeof(ThreadArgRetval)];
2668b76af8SVitaly Buka   thread_data = new (thread_data_placeholder) ThreadArgRetval();
27e3b6d110SNico Weber }
28e3b6d110SNico Weber 
29b18f30fbSFlorian Mayer }  // namespace __hwasan
30