[PULL XQuartz] clang fixes + [PATCH] GLX: Support TLS with better portability

Jeremy Huddleston jeremyhu at freedesktop.org
Wed Mar 23 12:13:28 PDT 2011


Actually just pull from my branch rather than git-amint that one patch.  I pulled in some additional cleanup for clang warnings.

--Jeremy

The following changes since commit 03f45df93469f6aef391e97007b9614e0770cc4c:

  Merge remote-tracking branch 'airlied/xinerama-cleanup' (2011-03-23 13:38:37 +0900)

are available in the git repository at:

  git://people.freedesktop.org/~jeremyhu/xserver master

Jeremy Huddleston (4):
      GLX: Support TLS with better portability
      XQuartz: Properly comment extra tokens (-Wextra-tokens) after endif
      XQuartz: Put ifdef guards around have_depth label (-Wunused-label)
      XQuartz: applewm: Don't check if requested window level is < 0 because it is unsigned (-Wtautological-compare)

 configure.ac               |    5 ++++-
 glx/glapi.c                |    4 ++--
 glx/glapi.h                |    2 +-
 glx/glthread.h             |    2 +-
 hw/xquartz/applewm.c       |    2 +-
 hw/xquartz/threadSafety.h  |    2 +-
 hw/xquartz/xpr/xprScreen.c |    2 ++
 include/dix-config.h.in    |    3 +++
 8 files changed, 15 insertions(+), 7 deletions(-)



On Mar 23, 2011, at 9:16 AM, Jeremy Huddleston wrote:

> From c55baebf4ebf1887262cc16899eb297b9f284f6e Mon Sep 17 00:00:00 2001
> From: Jeremy Huddleston <jeremyhu at apple.com>
> Date: Tue, 22 Mar 2011 19:01:48 -0700
> Subject: [PATCH] GLX: Support TLS with better portability
> 
> AX_TLS detects when toolchains support __thread or __declspec(thread),
> but existing code assumed __thread.
> 
> This also adds a check to configure.ac to error out if TLS is requested
> but unsupported.
> 
> Found-by: Tinderbox
> http://tinderbox.x.org/builds/2011-03-22-0007
> 
> Regression-from: 82b1eaa6cad20f39dbf15573bdb3d62acbcd91f9
> 
> Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
> Reviewed-by: Tom Fogal <tfogal at alumni.unh.edu>
> Reviewed-by: Dan Nicholson <dbn.lists at gmail.com>
> ---
> configure.ac            |    5 ++++-
> glx/glapi.c             |    4 ++--
> glx/glapi.h             |    2 +-
> glx/glthread.h          |    2 +-
> include/dix-config.h.in |    3 +++
> 5 files changed, 11 insertions(+), 5 deletions(-)
> 
> diff --git a/configure.ac b/configure.ac
> index b681163..9e04ff0 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 209ae50..19576a7 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 80b53aa..dec8328 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 28793fc..140e2aa 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 fc93f3e..fd9ecce 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"
> -- 
> 1.7.4.1
> 
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 



More information about the xorg-devel mailing list