diff --git a/src/x86_64/Ginit.c b/src/x86_64/Ginit.c index 6e9d4fe..8c102be 100644 --- a/src/x86_64/Ginit.c +++ b/src/x86_64/Ginit.c @@ -264,6 +264,24 @@ x86_64_local_addr_space_init (void) local_addr_space.acc.get_proc_name = get_static_proc_name; unw_flush_cache (&local_addr_space, 0, 0); +#ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP + { + static const pthread_mutex_t cachelock_init = PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP; + local_addr_space.global_cache.lock = cachelock_init; + } +#else +#pragma weak pthread_mutexattr_init +#pragma weak pthread_mutexattr_destroy +#pragma weak pthread_mutex_init +#pragma weak pthread_mutexattr_settype + if (pthread_mutex_init) { + pthread_mutexattr_t attr; + pthread_mutexattr_init(&attr); + pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE); + pthread_mutex_init(&local_addr_space.global_cache.lock, &attr); + pthread_mutexattr_destroy(&attr); + } +#endif memset (last_good_addr, 0, sizeof (unw_word_t) * NLGA); lga_victim = 0; }