[PATCH v3] glx: Silence warnings when building with clang

Ian Romanick idr at freedesktop.org
Mon Apr 25 18:38:46 PDT 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 04/25/2011 12:20 PM, Jeremy Huddleston wrote:
> This replaces AX_TLS (GPL3) with XORG_TLS (MIT)
> 
> 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>

This looks okay to me.  Though I did prefer the TLS_MODEL_INITIAL_EXEC
name used in v2.  Not really worth respinning for...

Reviewed-by: Ian Romanick <ian.d.romanick at intel.com>

> ---
>  configure.ac            |    3 +-
>  glx/glapi.c             |    6 +--
>  glx/glapi.h             |    3 +-
>  glx/glthread.h          |    3 +-
>  include/dix-config.h.in |    2 +-
>  m4/ax_tls.m4            |   74 -----------------------------------------------
>  m4/xorg-tls.m4          |   54 ++++++++++++++++++++++++++++++++++
>  7 files changed, 61 insertions(+), 84 deletions(-)
>  delete mode 100644 m4/ax_tls.m4
>  create mode 100644 m4/xorg-tls.m4
> 
> diff --git a/configure.ac b/configure.ac
> index 86e67f0..80f4d0d 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -590,7 +590,8 @@ 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
> +
> +XORG_TLS
>  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..9e219f6 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 struct _glapi_table * _glapi_tls_Dispatch = NULL;
>  
> -PUBLIC TLS void * _glapi_tls_Context
> -    __attribute__((tls_model("initial-exec")));
> +PUBLIC TLS 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..7051c1e 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 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..532401a 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 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..4710ef8 100644
> --- a/include/dix-config.h.in
> +++ b/include/dix-config.h.in
> @@ -444,7 +444,7 @@
>  /* 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 */
> +/* The compiler supported TLS storage class, prefering initial-exec if tls_model is supported */
>  #undef TLS
>  
>  /* Correctly set _XSERVER64 for OSX fat binaries */
> diff --git a/m4/ax_tls.m4 b/m4/ax_tls.m4
> deleted file mode 100644
> index 481c3d0..0000000
> --- a/m4/ax_tls.m4
> +++ /dev/null
> @@ -1,74 +0,0 @@
> -# ===========================================================================
> -#             http://www.nongnu.org/autoconf-archive/ax_tls.html
> -# ===========================================================================
> -#
> -# SYNOPSIS
> -#
> -#   AX_TLS
> -#
> -# DESCRIPTION
> -#
> -#   Provides a test for the compiler support of thread local storage (TLS)
> -#   extensions. Defines TLS if it is found. Currently only knows about GCC
> -#   and MSVC. I think SunPro uses the same as GCC, and Borland apparently
> -#   supports either.
> -#
> -# LICENSE
> -#
> -#   Copyright (c) 2008 Alan Woodland <ajw05 at aber.ac.uk>
> -#
> -#   This program is free software: you can redistribute it and/or modify it
> -#   under the terms of the GNU General Public License as published by the
> -#   Free Software Foundation, either version 3 of the License, or (at your
> -#   option) any later version.
> -#
> -#   This program is distributed in the hope that it will be useful, but
> -#   WITHOUT ANY WARRANTY; without even the implied warranty of
> -#   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
> -#   Public License for more details.
> -#
> -#   You should have received a copy of the GNU General Public License along
> -#   with this program. If not, see <http://www.gnu.org/licenses/>.
> -#
> -#   As a special exception, the respective Autoconf Macro's copyright owner
> -#   gives unlimited permission to copy, distribute and modify the configure
> -#   scripts that are the output of Autoconf when processing the Macro. You
> -#   need not follow the terms of the GNU General Public License when using
> -#   or distributing such scripts, even though portions of the text of the
> -#   Macro appear in them. The GNU General Public License (GPL) does govern
> -#   all other use of the material that constitutes the Autoconf Macro.
> -#
> -#   This special exception to the GPL applies to versions of the Autoconf
> -#   Macro released by the Autoconf Archive. When you make and distribute a
> -#   modified version of the Autoconf Macro, you may extend this special
> -#   exception to the GPL to apply to your modified version as well.
> -
> -AC_DEFUN([AX_TLS], [
> -  AC_MSG_CHECKING(for thread local storage (TLS) class)
> -  AC_CACHE_VAL(ac_cv_tls, [
> -    ax_tls_keywords="__thread __declspec(thread) none"
> -    for ax_tls_keyword in $ax_tls_keywords; do
> -       case $ax_tls_keyword in
> -          none) ac_cv_tls=none ; break ;;
> -          *)
> -             AC_TRY_COMPILE(
> -                [#include <stdlib.h>
> -                 static void
> -                 foo(void) {
> -                 static ] $ax_tls_keyword [ int bar;
> -                 exit(1);
> -                 }],
> -                 [],
> -                 [ac_cv_tls=$ax_tls_keyword ; break],
> -                 ac_cv_tls=none
> -             )
> -       esac
> -    done
> -])
> -
> -  if test "$ac_cv_tls" != "none"; then
> -    dnl AC_DEFINE([TLS], [], [If the compiler supports a TLS storage class define it to that here])
> -    AC_DEFINE_UNQUOTED([TLS], $ac_cv_tls, [If the compiler supports a TLS storage class define it to that here])
> -  fi
> -  AC_MSG_RESULT($ac_cv_tls)
> -])
> diff --git a/m4/xorg-tls.m4 b/m4/xorg-tls.m4
> new file mode 100644
> index 0000000..ec2f0fd
> --- /dev/null
> +++ b/m4/xorg-tls.m4
> @@ -0,0 +1,54 @@
> +dnl Copyright © 2011 Apple Inc.
> +dnl
> +dnl Permission is hereby granted, free of charge, to any person obtaining a
> +dnl copy of this software and associated documentation files (the "Software"),
> +dnl to deal in the Software without restriction, including without limitation
> +dnl the rights to use, copy, modify, merge, publish, distribute, sublicense,
> +dnl and/or sell copies of the Software, and to permit persons to whom the
> +dnl Software is furnished to do so, subject to the following conditions:
> +dnl
> +dnl The above copyright notice and this permission notice (including the next
> +dnl paragraph) shall be included in all copies or substantial portions of the
> +dnl Software.
> +dnl
> +dnl THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> +dnl IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> +dnl FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
> +dnl THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> +dnl LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> +dnl FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> +dnl DEALINGS IN THE SOFTWARE.
> +dnl
> +dnl Authors: Jeremy Huddleston <jeremyhu at apple.com>
> +
> +AC_DEFUN([XORG_TLS], [
> +    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([int $kw test;], [], ac_cv_tls=$kw)
> +        done
> +    ])
> +    AC_MSG_RESULT($ac_cv_tls)
> +
> +    if test "$ac_cv_tls" != "none"; then
> +        AC_MSG_CHECKING(for tls_model attribute support)
> +        AC_CACHE_VAL(ac_cv_tls_model, [
> +            save_CFLAGS="$CFLAGS"
> +            CFLAGS="$CFLAGS -Werror=unknown-attributes"
> +            AC_TRY_COMPILE([int $ac_cv_tls __attribute__((tls_model("initial-exec"))) test;], [],
> +                           ac_cv_tls_model=yes, ac_cv_tls_model=no)
> +            CFLAGS="$save_CFLAGS"
> +        ])
> +        AC_MSG_RESULT($ac_cv_tls_model)
> +
> +        if test "x$ac_cv_tls_model" = "xyes" ; then
> +            xorg_tls=$ac_cv_tls' __attribute__((tls_model("initial-exec")))'
> +        else
> +            xorg_tls=$ac_cv_tls
> +        fi
> +
> +        AC_DEFINE_UNQUOTED([TLS], $xorg_tls, [The compiler supported TLS storage class, prefering initial-exec if tls_model is supported])
> +    fi
> +])

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org/

iEYEARECAAYFAk22IiYACgkQX1gOwKyEAw+zOQCgm5lz/LVaJP+X4wEurpy2z0lz
uukAn1dAGuhE73oeF7ABZsDtxJtnKw4R
=6vaz
-----END PGP SIGNATURE-----


More information about the xorg-devel mailing list