diff options
author | Jeremy Huddleston <jeremyhu@apple.com> | 2012-03-08 09:41:34 -0800 |
---|---|---|
committer | Søren Sandmann Pedersen <ssp@redhat.com> | 2012-03-13 18:02:26 -0400 |
commit | a069da6c66da407cc52e1e92321d69c68fd6beb5 (patch) | |
tree | 8dc02f7edc53804b92486c735ac2fe643a0c8108 | |
parent | 61d999b9101c76bd463101923d2143e31857e7f8 (diff) |
Expand TLS support beyond __thread to __declspec(thread)
This code was pretty much coppied from a similar commit that I made to
xorg-server in April.
cf: xorg/xserver: bb4d145bd25e2aee988b100ecf1105ea3b6a40b8
Signed-off-by: Jeremy Huddleston <jeremyhu@apple.com>
-rw-r--r-- | configure.ac | 26 | ||||
-rw-r--r-- | pixman/pixman-compiler.h | 4 |
2 files changed, 16 insertions, 14 deletions
diff --git a/configure.ac b/configure.ac index 1ca3c02..a920be2 100644 --- a/configure.ac +++ b/configure.ac @@ -788,25 +788,27 @@ fi dnl ===================================== dnl Thread local storage -support_for__thread=no - -AC_MSG_CHECKING(for __thread) -AC_LINK_IFELSE([AC_LANG_SOURCE([[ +AC_MSG_CHECKING(for thread local storage (TLS) support) +AC_CACHE_VAL(ac_cv_tls, [ + ac_cv_tls=none + keywords="__thread __declspec(thread)" + for kw in $keywords ; do + AC_TRY_COMPILE([ #if defined(__MINGW32__) && !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) #error This MinGW version has broken __thread support #endif #ifdef __OpenBSD__ #error OpenBSD has broken __thread support #endif -static __thread int x ; -int main () { x = 123; return x; } -]])], support_for__thread=yes) -if test $support_for__thread = yes; then - AC_DEFINE([TOOLCHAIN_SUPPORTS__THREAD],[],[Whether the tool chain supports __thread]) -fi +int $kw test;], [], ac_cv_tls=$kw) + done +]) +AC_MSG_RESULT($ac_cv_tls) -AC_MSG_RESULT($support_for__thread) +if test "$ac_cv_tls" != "none"; then + AC_DEFINE_UNQUOTED([TLS], $pixman_tls, [The compiler supported TLS storage class]) +fi dnl dnl posix tls @@ -858,7 +860,7 @@ AC_DEFUN([PIXMAN_CHECK_PTHREAD],[dnl fi ]) -if test $support_for__thread = no; then +if test $ac_cv_tls = none ; then support_for_pthread_setspecific=no AC_MSG_CHECKING(for pthread_setspecific) diff --git a/pixman/pixman-compiler.h b/pixman/pixman-compiler.h index 5b568e1..ffd5172 100644 --- a/pixman/pixman-compiler.h +++ b/pixman/pixman-compiler.h @@ -97,10 +97,10 @@ # define PIXMAN_GET_THREAD_LOCAL(name) \ (&name) -#elif defined(TOOLCHAIN_SUPPORTS__THREAD) +#elif defined(TLS) # define PIXMAN_DEFINE_THREAD_LOCAL(type, name) \ - static __thread type name + static TLS type name # define PIXMAN_GET_THREAD_LOCAL(name) \ (&name) |