X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=include%2Furcu%2Ftls-compat.h;h=325b01b234c4b5f590742e830a1c3715ad9661e3;hb=1e1b595f3ba88fc9c1a97b747cc8852273289132;hp=3a31eeb619bec3bee3fa034c45b3faf8f7dd1a32;hpb=6fd172f599e8d798e68974a786dd930d876f182e;p=urcu.git diff --git a/include/urcu/tls-compat.h b/include/urcu/tls-compat.h index 3a31eeb..325b01b 100644 --- a/include/urcu/tls-compat.h +++ b/include/urcu/tls-compat.h @@ -32,7 +32,17 @@ extern "C" { #endif -#ifdef CONFIG_RCU_TLS /* Based on ax_tls.m4 */ +#ifdef CONFIG_RCU_TLS + +#if defined (__cplusplus) && (__cplusplus >= 201103L) +# define URCU_TLS_STORAGE_CLASS thread_local +#elif defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) +# define URCU_TLS_STORAGE_CLASS _Thread_local +#elif defined (_MSC_VER) +# define URCU_TLS_STORAGE_CLASS __declspec(thread) +#else +# define URCU_TLS_STORAGE_CLASS __thread +#endif /* * Hint: How to define/declare TLS variables of compound types @@ -65,16 +75,13 @@ extern "C" { */ # define DECLARE_URCU_TLS(type, name) \ - CONFIG_RCU_TLS type name + URCU_TLS_STORAGE_CLASS type name # define DEFINE_URCU_TLS(type, name) \ - CONFIG_RCU_TLS type name + URCU_TLS_STORAGE_CLASS type name # define URCU_TLS(name) (name) -# define DEFINE_URCU_TLS_IE(type, name) \ - CONFIG_RCU_TLS __attribute__((tls_model("initial-exec"))) type name - #else /* #ifndef CONFIG_RCU_TLS */ /* @@ -130,9 +137,6 @@ struct urcu_tls { # define DEFINE_URCU_TLS(type, name) \ DEFINE_URCU_TLS_1(type, name) -# define DEFINE_URCU_TLS_IE(type, name) \ - DEFINE_URCU_TLS_1(type, name) - # define URCU_TLS_1(name) (*__tls_access_ ## name()) # define URCU_TLS(name) URCU_TLS_1(name)