diff --git a/configure.ac b/configure.ac index b6811638d..9e04ff015 100644 --- a/configure.ac +++ b/configure.ac @@ -590,7 +590,10 @@ AC_ARG_ENABLE(aiglx, AS_HELP_STRING([--enable-aiglx], [Build accelerate [AIGLX=yes]) AX_TLS AC_ARG_ENABLE(glx-tls, AS_HELP_STRING([--enable-glx-tls], [Build GLX with TLS support (default: auto)]), - [GLX_USE_TLS=$enableval], + [GLX_USE_TLS=$enableval + if test "x$GLX_USE_TLS" = "xyes" && test "${ac_cv_tls}" = "none" ; then + AC_MSG_ERROR([GLX with TLS support requested, but the compiler does not support it.]) + fi], [GLX_USE_TLS=no if test "${ac_cv_tls}" != "none" ; then GLX_USE_TLS=yes diff --git a/glx/glapi.c b/glx/glapi.c index 209ae50c0..19576a775 100644 --- a/glx/glapi.c +++ b/glx/glapi.c @@ -184,11 +184,11 @@ static GLint NoOpUnused(void) /*@{*/ #if defined(GLX_USE_TLS) -PUBLIC __thread struct _glapi_table * _glapi_tls_Dispatch +PUBLIC TLS struct _glapi_table * _glapi_tls_Dispatch __attribute__((tls_model("initial-exec"))) = (struct _glapi_table *) __glapi_noop_table; -PUBLIC __thread void * _glapi_tls_Context +PUBLIC TLS void * _glapi_tls_Context __attribute__((tls_model("initial-exec"))); PUBLIC const struct _glapi_table *_glapi_Dispatch = NULL; diff --git a/glx/glapi.h b/glx/glapi.h index 80b53aa92..dec8328cd 100644 --- a/glx/glapi.h +++ b/glx/glapi.h @@ -83,7 +83,7 @@ typedef void (*_glapi_warning_func)(void *ctx, const char *str, ...); const extern void *_glapi_Context; const extern struct _glapi_table *_glapi_Dispatch; -extern __thread void * _glapi_tls_Context +extern TLS void * _glapi_tls_Context __attribute__((tls_model("initial-exec"))); # define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) _glapi_tls_Context diff --git a/glx/glthread.h b/glx/glthread.h index 28793fcc7..140e2aa8e 100644 --- a/glx/glthread.h +++ b/glx/glthread.h @@ -233,7 +233,7 @@ _glthread_SetTSD(_glthread_TSD *, void *); #if defined(GLX_USE_TLS) -extern __thread struct _glapi_table * _glapi_tls_Dispatch +extern TLS struct _glapi_table * _glapi_tls_Dispatch __attribute__((tls_model("initial-exec"))); #define GET_DISPATCH() _glapi_tls_Dispatch diff --git a/include/dix-config.h.in b/include/dix-config.h.in index fc93f3ec1..fd9ecced2 100644 --- a/include/dix-config.h.in +++ b/include/dix-config.h.in @@ -444,6 +444,9 @@ /* Define to 1 if you have the `ffs' function. */ #undef HAVE_FFS +/* If the compiler supports a TLS storage class define it to that here */ +#undef TLS + /* Correctly set _XSERVER64 for OSX fat binaries */ #ifdef __APPLE__ #include "dix-config-apple-verbatim.h"