diff options
Diffstat (limited to 'contrib/llvm-project/compiler-rt/lib/hwasan/hwasan_thread_list.cpp')
| -rw-r--r-- | contrib/llvm-project/compiler-rt/lib/hwasan/hwasan_thread_list.cpp | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/contrib/llvm-project/compiler-rt/lib/hwasan/hwasan_thread_list.cpp b/contrib/llvm-project/compiler-rt/lib/hwasan/hwasan_thread_list.cpp new file mode 100644 index 000000000000..794cfb7550d7 --- /dev/null +++ b/contrib/llvm-project/compiler-rt/lib/hwasan/hwasan_thread_list.cpp @@ -0,0 +1,29 @@ +#include "hwasan_thread_list.h" + +#include "sanitizer_common/sanitizer_placement_new.h" +#include "sanitizer_common/sanitizer_thread_arg_retval.h" + +namespace __hwasan { + +static HwasanThreadList *hwasan_thread_list; +static ThreadArgRetval *thread_data; + +HwasanThreadList &hwasanThreadList() { return *hwasan_thread_list; } +ThreadArgRetval &hwasanThreadArgRetval() { return *thread_data; } + +void InitThreadList(uptr storage, uptr size) { + CHECK_EQ(hwasan_thread_list, nullptr); + + alignas(alignof(HwasanThreadList)) static char + thread_list_placeholder[sizeof(HwasanThreadList)]; + hwasan_thread_list = + new (thread_list_placeholder) HwasanThreadList(storage, size); + + CHECK_EQ(thread_data, nullptr); + + alignas(alignof(ThreadArgRetval)) static char + thread_data_placeholder[sizeof(ThreadArgRetval)]; + thread_data = new (thread_data_placeholder) ThreadArgRetval(); +} + +} // namespace __hwasan |
