aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/compiler-rt/lib/hwasan/hwasan_thread_list.cpp
diff options
context:
space:
mode:
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.cpp29
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