summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac12
-rw-r--r--m4/tls.m417
-rw-r--r--src/pulsecore/thread.h2
3 files changed, 19 insertions, 12 deletions
diff --git a/configure.ac b/configure.ac
index f56be997..7c9da77c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -199,17 +199,7 @@ else
esac
fi
-AC_MSG_CHECKING([whether $CC knows __thread])
-AC_LANG_CONFTEST([static __thread int a = 6; int main() { a = 5; }])
-$CC conftest.c $CFLAGS -o conftest > /dev/null 2> /dev/null
-ret=$?
-rm -f conftest.o conftest
-if test $ret -eq 0 ; then
- AC_DEFINE([HAVE_TLS_BUILTIN], 1, [Have __thread().])
- AC_MSG_RESULT([yes])
-else
- AC_MSG_RESULT([no])
-fi
+CC_CHECK_TLS
AC_MSG_CHECKING([whether $CC knows _Bool])
AC_LANG_CONFTEST([int main() { _Bool b; }])
diff --git a/m4/tls.m4 b/m4/tls.m4
new file mode 100644
index 00000000..3808f06e
--- /dev/null
+++ b/m4/tls.m4
@@ -0,0 +1,17 @@
+AC_DEFUN([CC_CHECK_TLS], [
+ AC_CACHE_CHECK([whether $CC knows __thread for Thread-Local Storage],
+ cc_cv_tls___thread,
+ [AC_COMPILE_IFELSE(
+ AC_LANG_PROGRAM(
+ [[static __thread int a = 6;]],
+ [[a = 5;]]),
+ [cc_cv_tls___thread=yes],
+ [cc_cv_tls___thread=no])
+ ])
+
+ AS_IF([test "x$cc_cv_tls___thread" = "xyes"],
+ [AC_DEFINE([SUPPORT_TLS___THREAD], 1,
+ [Define this if the compiler supports __thread for Thread-Local Storage])
+ $1],
+ [$2])
+])
diff --git a/src/pulsecore/thread.h b/src/pulsecore/thread.h
index f3aca13e..87e850d6 100644
--- a/src/pulsecore/thread.h
+++ b/src/pulsecore/thread.h
@@ -86,7 +86,7 @@ void *pa_tls_set(pa_tls *t, void *userdata);
} \
struct __stupid_useless_struct_to_allow_trailing_semicolon
-#ifdef HAVE_TLS_BUILTIN
+#ifdef SUPPORT_TLS___THREAD
/* An optimized version of the above that requires no dynamic
* allocation if the compiler supports __thread */
#define PA_STATIC_TLS_DECLARE_NO_FREE(name) \