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 {
- __cxa_eh_globals * __globals () {
+ __cxa_eh_globals *__globals() {
static thread_local __cxa_eh_globals eh_globals;
return &eh_globals;
- }
}
+} // namespace
extern "C" {
- __cxa_eh_globals * __cxa_get_globals () { return __globals (); }
- __cxa_eh_globals * __cxa_get_globals_fast () { return __globals (); }
- }
-}
+ __cxa_eh_globals *__cxa_get_globals() { return __globals(); }
+ __cxa_eh_globals *__cxa_get_globals_fast() { return __globals(); }
+} // extern "C"
+} // namespace __cxxabiv1
#else
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 ) )
+ 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()");
- }
+ }
- void construct_ () {
- if ( 0 != std::__libcpp_tls_create ( &key_, destruct_ ) )
+ void construct_() {
+ if (0 != std::__libcpp_tls_create(&key_, destruct_))
abort_message("cannot create thread specific key for __cxa_get_globals()");
- }
-}
+ }
+} // namespace
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 )
+ __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");
- if ( 0 != std::__libcpp_tls_set ( key_, retVal ) )
+ if (0 != std::__libcpp_tls_set(key_, retVal))
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.
- __cxa_eh_globals * __cxa_get_globals_fast () {
- // First time through, create the key.
+ __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()");
-// static int init = construct_();
return static_cast<__cxa_eh_globals*>(std::__libcpp_tls_get(key_));
- }
+ }
+} // extern "C"
+} // namespace __cxxabiv1
-}
-}
#endif