[PATCH v2] glx: Silence warnings when building with clang
Jeremy Huddleston
jeremyhu at apple.com
Mon Apr 25 11:09:00 PDT 2011
In file included from glapi.c:46:
In file included from ./glapi.h:51:
./glthread.h:237:20: error: unknown attribute 'tls_model' ignored [-Werror,-Wunknown-attributes]
__attribute__((tls_model("initial-exec")));
^
In file included from glapi.c:46:
./glapi.h:92:20: error: unknown attribute 'tls_model' ignored [-Werror,-Wunknown-attributes]
__attribute__((tls_model("initial-exec")));
^
glapi.c:82:20: error: unknown attribute 'tls_model' ignored [-Werror,-Wunknown-attributes]
__attribute__((tls_model("initial-exec"))) = NULL;
^
glapi.c:85:20: error: unknown attribute 'tls_model' ignored [-Werror,-Wunknown-attributes]
__attribute__((tls_model("initial-exec")));
^
4 errors generated.
Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
---
configure.ac | 21 +++++++++++++++++++++
glx/glapi.c | 6 ++----
glx/glapi.h | 3 +--
glx/glthread.h | 3 +--
include/dix-config.h.in | 3 +++
5 files changed, 28 insertions(+), 8 deletions(-)
diff --git a/configure.ac b/configure.ac
index 86e67f0..974861b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -590,7 +590,28 @@ dnl GLX build options
AC_ARG_ENABLE(aiglx, AS_HELP_STRING([--enable-aiglx], [Build accelerated indirect GLX (default: enabled)]),
[AIGLX=$enableval],
[AIGLX=yes])
+
AX_TLS
+if test "$ac_cv_tls" != "none"; then
+ AC_MSG_CHECKING(if thread local storage (TLS) class supports the tls_model attribute)
+
+ AC_CACHE_VAL(ac_cv_tls_model, [
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS -Werror=unknown-attributes"
+ AC_TRY_COMPILE([], [TLS int bar __attribute__((tls_model("initial-exec")));],
+ ac_cv_tls_model=yes, ac_cv_tls_model=no)
+ CFLAGS="$save_CFLAGS"
+ ])
+
+ AC_MSG_RESULT($ac_cv_tls_model)
+
+ ac_tls_initial_exec="$ac_cv_tls"
+ if test "x$ac_cv_tls_model" = "xyes" ; then
+ ac_tls_initial_exec="$ac_tls_initial_exec __attribute__((tls_model("initial-exec")))"
+ fi
+ AC_DEFINE_UNQUOTED([TLS_MODEL_INITIAL_EXEC], $ac_tls_initial_exec, [If the compiler supports the tls_model attribute, we prefer initial-exec])
+fi
+
AC_ARG_ENABLE(glx-tls, AS_HELP_STRING([--enable-glx-tls], [Build GLX with TLS support (default: auto)]),
[GLX_USE_TLS=$enableval
if test "x$GLX_USE_TLS" = "xyes" && test "${ac_cv_tls}" = "none" ; then
diff --git a/glx/glapi.c b/glx/glapi.c
index 7cb8495..7ffffc2 100644
--- a/glx/glapi.c
+++ b/glx/glapi.c
@@ -78,11 +78,9 @@ static void init_glapi_relocs(void);
/*@{*/
#if defined(GLX_USE_TLS)
-PUBLIC TLS struct _glapi_table * _glapi_tls_Dispatch
- __attribute__((tls_model("initial-exec"))) = NULL;
+PUBLIC TLS_MODEL_INITIAL_EXEC struct _glapi_table * _glapi_tls_Dispatch = NULL;
-PUBLIC TLS void * _glapi_tls_Context
- __attribute__((tls_model("initial-exec")));
+PUBLIC TLS_MODEL_INITIAL_EXEC void * _glapi_tls_Context;
PUBLIC const struct _glapi_table *_glapi_Dispatch = NULL;
PUBLIC const void *_glapi_Context = NULL;
diff --git a/glx/glapi.h b/glx/glapi.h
index 6521f31..f837ef4 100644
--- a/glx/glapi.h
+++ b/glx/glapi.h
@@ -83,8 +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 TLS void * _glapi_tls_Context
- __attribute__((tls_model("initial-exec")));
+extern TLS_MODEL_INITIAL_EXEC void * _glapi_tls_Context;
# define GET_CURRENT_CONTEXT(C) GLcontext *C = (GLcontext *) _glapi_tls_Context
diff --git a/glx/glthread.h b/glx/glthread.h
index 140e2aa..c558926 100644
--- a/glx/glthread.h
+++ b/glx/glthread.h
@@ -233,8 +233,7 @@ _glthread_SetTSD(_glthread_TSD *, void *);
#if defined(GLX_USE_TLS)
-extern TLS struct _glapi_table * _glapi_tls_Dispatch
- __attribute__((tls_model("initial-exec")));
+extern TLS_MODEL_INITIAL_EXEC struct _glapi_table * _glapi_tls_Dispatch;
#define GET_DISPATCH() _glapi_tls_Dispatch
diff --git a/include/dix-config.h.in b/include/dix-config.h.in
index f00c767..9b2f053 100644
--- a/include/dix-config.h.in
+++ b/include/dix-config.h.in
@@ -447,6 +447,9 @@
/* If the compiler supports a TLS storage class define it to that here */
#undef TLS
+/* If the compiler supports the tls_model attribute, we prefer initial-exec */
+#undef TLS_MODEL_INITIAL_EXEC
+
/* Correctly set _XSERVER64 for OSX fat binaries */
#ifdef __APPLE__
#include "dix-config-apple-verbatim.h"
--
1.7.4.1
More information about the xorg-devel
mailing list