aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/libs/cxxsupp/libcxxabi/src/cxa_exception_storage.cpp
diff options
context:
space:
mode:
authorheretic <heretic@yandex-team.ru>2022-02-10 16:45:43 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:45:43 +0300
commit397cbe258b9e064f49c4ca575279f02f39fef76e (patch)
treea0b0eb3cca6a14e4e8ea715393637672fa651284 /contrib/libs/cxxsupp/libcxxabi/src/cxa_exception_storage.cpp
parent43f5a35593ebc9f6bcea619bb170394ea7ae468e (diff)
downloadydb-397cbe258b9e064f49c4ca575279f02f39fef76e.tar.gz
Restoring authorship annotation for <heretic@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/libs/cxxsupp/libcxxabi/src/cxa_exception_storage.cpp')
-rw-r--r--contrib/libs/cxxsupp/libcxxabi/src/cxa_exception_storage.cpp140
1 files changed, 70 insertions, 70 deletions
diff --git a/contrib/libs/cxxsupp/libcxxabi/src/cxa_exception_storage.cpp b/contrib/libs/cxxsupp/libcxxabi/src/cxa_exception_storage.cpp
index 3a3233a1b9..1c2b0ebb60 100644
--- a/contrib/libs/cxxsupp/libcxxabi/src/cxa_exception_storage.cpp
+++ b/contrib/libs/cxxsupp/libcxxabi/src/cxa_exception_storage.cpp
@@ -1,103 +1,103 @@
//===----------------------------------------------------------------------===//
-//
-// 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
-//
-//
-// This file implements the storage for the "Caught Exception Stack"
-// https://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html#cxx-exc-stack
-//
-//===----------------------------------------------------------------------===//
-
-#include "cxa_exception.h"
-
-#include <__threading_support>
-
-#if defined(_LIBCXXABI_HAS_NO_THREADS)
-
-namespace __cxxabiv1 {
-extern "C" {
- static __cxa_eh_globals eh_globals;
- __cxa_eh_globals *__cxa_get_globals() { return &eh_globals; }
- __cxa_eh_globals *__cxa_get_globals_fast() { return &eh_globals; }
+//
+// 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
+//
+//
+// This file implements the storage for the "Caught Exception Stack"
+// https://itanium-cxx-abi.github.io/cxx-abi/abi-eh.html#cxx-exc-stack
+//
+//===----------------------------------------------------------------------===//
+
+#include "cxa_exception.h"
+
+#include <__threading_support>
+
+#if defined(_LIBCXXABI_HAS_NO_THREADS)
+
+namespace __cxxabiv1 {
+extern "C" {
+ static __cxa_eh_globals eh_globals;
+ __cxa_eh_globals *__cxa_get_globals() { return &eh_globals; }
+ __cxa_eh_globals *__cxa_get_globals_fast() { return &eh_globals; }
} // extern "C"
} // namespace __cxxabiv1
-
-#elif defined(HAS_THREAD_LOCAL)
-
-namespace __cxxabiv1 {
-namespace {
+
+#elif defined(HAS_THREAD_LOCAL)
+
+namespace __cxxabiv1 {
+namespace {
__cxa_eh_globals *__globals() {
- static thread_local __cxa_eh_globals eh_globals;
- return &eh_globals;
- }
+ static thread_local __cxa_eh_globals eh_globals;
+ return &eh_globals;
+ }
} // namespace
-
-extern "C" {
+
+extern "C" {
__cxa_eh_globals *__cxa_get_globals() { return __globals(); }
__cxa_eh_globals *__cxa_get_globals_fast() { return __globals(); }
} // extern "C"
} // namespace __cxxabiv1
-
-#else
-
-#include "abort_message.h"
-#include "fallback_malloc.h"
-
-#if defined(__ELF__) && defined(_LIBCXXABI_LINK_PTHREAD_LIB)
-#pragma comment(lib, "pthread")
-#endif
-
-// In general, we treat all threading errors as fatal.
-// We cannot call std::terminate() because that will in turn
-// call __cxa_get_globals() and cause infinite recursion.
-
-namespace __cxxabiv1 {
-namespace {
- std::__libcpp_tls_key key_;
- std::__libcpp_exec_once_flag flag_ = _LIBCPP_EXEC_ONCE_INITIALIZER;
-
+
+#else
+
+#include "abort_message.h"
+#include "fallback_malloc.h"
+
+#if defined(__ELF__) && defined(_LIBCXXABI_LINK_PTHREAD_LIB)
+#pragma comment(lib, "pthread")
+#endif
+
+// In general, we treat all threading errors as fatal.
+// We cannot call std::terminate() because that will in turn
+// call __cxa_get_globals() and cause infinite recursion.
+
+namespace __cxxabiv1 {
+namespace {
+ std::__libcpp_tls_key key_;
+ std::__libcpp_exec_once_flag flag_ = _LIBCPP_EXEC_ONCE_INITIALIZER;
+
void _LIBCPP_TLS_DESTRUCTOR_CC destruct_(void *p) {
__free_with_fallback(p);
if (0 != std::__libcpp_tls_set(key_, NULL))
- abort_message("cannot zero out thread value for __cxa_get_globals()");
+ abort_message("cannot zero out thread value for __cxa_get_globals()");
}
-
+
void construct_() {
if (0 != std::__libcpp_tls_create(&key_, destruct_))
- abort_message("cannot create thread specific key for __cxa_get_globals()");
+ abort_message("cannot create thread specific key for __cxa_get_globals()");
}
} // namespace
-
-extern "C" {
+
+extern "C" {
__cxa_eh_globals *__cxa_get_globals() {
// Try to get the globals for this thread
__cxa_eh_globals *retVal = __cxa_get_globals_fast();
-
+
// If this is the first time we've been asked for these globals, create them
if (NULL == retVal) {
retVal = static_cast<__cxa_eh_globals*>(
__calloc_with_fallback(1, sizeof(__cxa_eh_globals)));
if (NULL == retVal)
- abort_message("cannot allocate __cxa_eh_globals");
+ abort_message("cannot allocate __cxa_eh_globals");
if (0 != std::__libcpp_tls_set(key_, retVal))
- abort_message("std::__libcpp_tls_set failure in __cxa_get_globals()");
+ abort_message("std::__libcpp_tls_set failure in __cxa_get_globals()");
}
- return retVal;
+ return retVal;
}
-
- // Note that this implementation will reliably return NULL if not
- // preceded by a call to __cxa_get_globals(). This is an extension
- // to the Itanium ABI and is taken advantage of in several places in
- // libc++abi.
+
+ // Note that this implementation will reliably return NULL if not
+ // preceded by a call to __cxa_get_globals(). This is an extension
+ // to the Itanium ABI and is taken advantage of in several places in
+ // libc++abi.
__cxa_eh_globals *__cxa_get_globals_fast() {
// First time through, create the key.
- if (0 != std::__libcpp_execute_once(&flag_, construct_))
- abort_message("execute once failure in __cxa_get_globals_fast()");
- return static_cast<__cxa_eh_globals*>(std::__libcpp_tls_get(key_));
+ if (0 != std::__libcpp_execute_once(&flag_, construct_))
+ abort_message("execute once failure in __cxa_get_globals_fast()");
+ return static_cast<__cxa_eh_globals*>(std::__libcpp_tls_get(key_));
}
} // extern "C"
} // namespace __cxxabiv1
-
-#endif
+
+#endif