diff options
author | Asiri Rathnayake <asiri.rathnayake@arm.com> | 2017-01-03 12:59:50 +0000 |
---|---|---|
committer | Asiri Rathnayake <asiri.rathnayake@arm.com> | 2017-01-03 12:59:50 +0000 |
commit | 205d7d3f6878fa05037e1355ff2f552bdbbd9637 (patch) | |
tree | 96d1bd0963334f4fe3a5fb6512f13b2ba342a49a /libcxx/include/__threading_support | |
parent | 97ba9fae1f536778b1aaff4220512626e6170728 (diff) | |
download | bcm5719-llvm-205d7d3f6878fa05037e1355ff2f552bdbbd9637.tar.gz bcm5719-llvm-205d7d3f6878fa05037e1355ff2f552bdbbd9637.zip |
[libcxx] Add build/test support for the externally threaded libc++abi variant
Differential revision: https://reviews.llvm.org/D27576
Reviewers: EricWF
llvm-svn: 290889
Diffstat (limited to 'libcxx/include/__threading_support')
-rw-r--r-- | libcxx/include/__threading_support | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/libcxx/include/__threading_support b/libcxx/include/__threading_support index 0064c7d598b..b1eaf25ae8a 100644 --- a/libcxx/include/__threading_support +++ b/libcxx/include/__threading_support @@ -67,7 +67,11 @@ typedef pthread_mutex_t __libcpp_mutex_t; typedef pthread_cond_t __libcpp_condvar_t; #define _LIBCPP_CONDVAR_INITIALIZER PTHREAD_COND_INITIALIZER -// THread ID +// Execute once +typedef pthread_once_t __libcpp_exec_once_flag; +#define _LIBCPP_EXEC_ONCE_INITIALIZER PTHREAD_ONCE_INIT + +// Thread id typedef pthread_t __libcpp_thread_id; // Thread @@ -110,7 +114,17 @@ int __libcpp_condvar_timedwait(__libcpp_condvar_t *__cv, __libcpp_mutex_t *__m, _LIBCPP_THREAD_ABI_VISIBILITY int __libcpp_condvar_destroy(__libcpp_condvar_t* __cv); -// Thread ID +// Execute once +_LIBCPP_THREAD_ABI_VISIBILITY +int __libcpp_execute_once(__libcpp_exec_once_flag *flag, + void (*init_routine)(void)); + +// Thread id +#if defined(__APPLE__) && !defined(__arm__) +_LIBCPP_THREAD_ABI_VISIBILITY +mach_port_t __libcpp_thread_get_port(); +#endif + _LIBCPP_THREAD_ABI_VISIBILITY bool __libcpp_thread_id_equal(__libcpp_thread_id t1, __libcpp_thread_id t2); @@ -145,7 +159,7 @@ _LIBCPP_THREAD_ABI_VISIBILITY void *__libcpp_tls_get(__libcpp_tls_key __key); _LIBCPP_THREAD_ABI_VISIBILITY -void __libcpp_tls_set(__libcpp_tls_key __key, void *__p); +int __libcpp_tls_set(__libcpp_tls_key __key, void *__p); #if defined(_LIBCPP_HAS_THREAD_API_PTHREAD) || \ defined(_LIBCPP_BUILDING_THREAD_API_EXTERNAL_PTHREAD) @@ -221,6 +235,19 @@ int __libcpp_condvar_destroy(__libcpp_condvar_t *__cv) return pthread_cond_destroy(__cv); } +// Execute once +int __libcpp_execute_once(__libcpp_exec_once_flag *flag, + void (*init_routine)(void)) { + return pthread_once(flag, init_routine); +} + +// Thread id +#if defined(__APPLE__) && !defined(__arm__) +mach_port_t __libcpp_thread_get_port() { + return pthread_mach_thread_np(pthread_self()); +} +#endif + // Returns non-zero if the thread ids are equal, otherwise 0 bool __libcpp_thread_id_equal(__libcpp_thread_id t1, __libcpp_thread_id t2) { @@ -276,9 +303,9 @@ void *__libcpp_tls_get(__libcpp_tls_key __key) return pthread_getspecific(__key); } -void __libcpp_tls_set(__libcpp_tls_key __key, void *__p) +int __libcpp_tls_set(__libcpp_tls_key __key, void *__p) { - pthread_setspecific(__key, __p); + return pthread_setspecific(__key, __p); } #endif // _LIBCPP_HAS_THREAD_API_PTHREAD |