summaryrefslogtreecommitdiff
path: root/gnu/llvm/compiler-rt/lib/scudo/scudo_tsd_exclusive.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/compiler-rt/lib/scudo/scudo_tsd_exclusive.cpp')
-rw-r--r--gnu/llvm/compiler-rt/lib/scudo/scudo_tsd_exclusive.cpp67
1 files changed, 0 insertions, 67 deletions
diff --git a/gnu/llvm/compiler-rt/lib/scudo/scudo_tsd_exclusive.cpp b/gnu/llvm/compiler-rt/lib/scudo/scudo_tsd_exclusive.cpp
deleted file mode 100644
index a203a74bbcf..00000000000
--- a/gnu/llvm/compiler-rt/lib/scudo/scudo_tsd_exclusive.cpp
+++ /dev/null
@@ -1,67 +0,0 @@
-//===-- scudo_tsd_exclusive.cpp ---------------------------------*- C++ -*-===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-///
-/// Scudo exclusive TSD implementation.
-///
-//===----------------------------------------------------------------------===//
-
-#include "scudo_tsd.h"
-
-#if SCUDO_TSD_EXCLUSIVE
-
-namespace __scudo {
-
-static pthread_once_t GlobalInitialized = PTHREAD_ONCE_INIT;
-static pthread_key_t PThreadKey;
-
-__attribute__((tls_model("initial-exec")))
-THREADLOCAL ThreadState ScudoThreadState = ThreadNotInitialized;
-__attribute__((tls_model("initial-exec")))
-THREADLOCAL ScudoTSD TSD;
-
-// Fallback TSD for when the thread isn't initialized yet or is torn down. It
-// can be shared between multiple threads and as such must be locked.
-ScudoTSD FallbackTSD;
-
-static void teardownThread(void *Ptr) {
- uptr I = reinterpret_cast<uptr>(Ptr);
- // The glibc POSIX thread-local-storage deallocation routine calls user
- // provided destructors in a loop of PTHREAD_DESTRUCTOR_ITERATIONS.
- // We want to be called last since other destructors might call free and the
- // like, so we wait until PTHREAD_DESTRUCTOR_ITERATIONS before draining the
- // quarantine and swallowing the cache.
- if (I > 1) {
- // If pthread_setspecific fails, we will go ahead with the teardown.
- if (LIKELY(pthread_setspecific(PThreadKey,
- reinterpret_cast<void *>(I - 1)) == 0))
- return;
- }
- TSD.commitBack();
- ScudoThreadState = ThreadTornDown;
-}
-
-
-static void initOnce() {
- CHECK_EQ(pthread_key_create(&PThreadKey, teardownThread), 0);
- initScudo();
- FallbackTSD.init();
-}
-
-void initThread(bool MinimalInit) {
- CHECK_EQ(pthread_once(&GlobalInitialized, initOnce), 0);
- if (UNLIKELY(MinimalInit))
- return;
- CHECK_EQ(pthread_setspecific(PThreadKey, reinterpret_cast<void *>(
- GetPthreadDestructorIterations())), 0);
- TSD.init();
- ScudoThreadState = ThreadInitialized;
-}
-
-} // namespace __scudo
-
-#endif // SCUDO_TSD_EXCLUSIVE