summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Huddleston <jeremyhu@apple.com>2012-03-08 09:41:34 -0800
committerSøren Sandmann Pedersen <ssp@redhat.com>2012-03-13 18:02:26 -0400
commita069da6c66da407cc52e1e92321d69c68fd6beb5 (patch)
tree8dc02f7edc53804b92486c735ac2fe643a0c8108
parent61d999b9101c76bd463101923d2143e31857e7f8 (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.ac26
-rw-r--r--pixman/pixman-compiler.h4
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)