[Mesa-dev] [PATCH] configure.ac: Enable GLX_USE_TLS if possible.

nobled nobled at dreamwidth.org
Sun Feb 12 06:02:44 PST 2012


On Wed, Feb 8, 2012 at 8:11 PM, Zhigang Gong
<zhigang.gong at linux.intel.com> wrote:
> On Wed, Feb 08, 2012 at 02:46:42PM -0800, Eric Anholt wrote:
>> On Wed,  8 Feb 2012 16:19:38 +0800, zhigang.gong at linux.intel.com wrote:
>> > From: Zhigang Gong <zhigang.gong at linux.intel.com>
>> >
>> > If the system support tls, we prefer to enable it by default
>> > just as xserver does. Actually, the checking code is copied
>> > from xserver/configure.ac.
>> >
>> > Signed-off-by: Zhigang Gong <zhigang.gong at linux.intel.com>
>> > ---
>> >  configure.ac |   10 ++++++++--
>> >  1 files changed, 8 insertions(+), 2 deletions(-)
>> >
>> > diff --git a/configure.ac b/configure.ac
>> > index b2b1ab8..7c2756b 100644
>> > --- a/configure.ac
>> > +++ b/configure.ac
>> > @@ -1103,8 +1103,14 @@ dnl
>> >  AC_ARG_ENABLE([glx-tls],
>> >      [AS_HELP_STRING([--enable-glx-tls],
>> >          [enable TLS support in GLX @<:@default=disabled@:>@])],
>> > -    [GLX_USE_TLS="$enableval"],
>> > -    [GLX_USE_TLS=no])
>> > +    [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
>> > +     fi])
>> >  AC_SUBST(GLX_TLS, ${GLX_USE_TLS})
>>
>> I don't think you have anything setting ac_cv_tls.
>
> You are right, I forgot to add the checking code which is also from xserver.
> Sorry for that, here is the v2 patch:
>
> From: Zhigang Gong <zhigang.gong at linux.intel.com>
> Date: Wed, 8 Feb 2012 16:12:42 +0800
> Subject: [PATCH v2] configure.ac: Enable GLX_USE_TLS if possible.
>
> If the system support tls, we prefer to enable it by default
> just as xserver does. Actually, the checking code is copied
> from xserver/configure.ac.
>
> Signed-off-by: Zhigang Gong <zhigang.gong at linux.intel.com>
> ---
>  configure.ac |   39 +++++++++++++++++++++++++++++++++++++--
>  1 files changed, 37 insertions(+), 2 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index b2b1ab8..3dfafba 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -1099,12 +1099,47 @@ esac
>  dnl
>  dnl TLS detection
>  dnl
> +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 $STRICT_CFLAGS"
> +        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
> +        mesa_tls=$ac_cv_tls' __attribute__((tls_model("initial-exec")))'
> +    else
> +        mesa_tls=$ac_cv_tls
> +    fi
Judging by the patch that tried to change the tls_model:
https://bugs.freedesktop.org/show_bug.cgi?id=35268
It looks like we'd need to disable enable_asm if the tls_model
attribute isn't supported, since it would probably end up defaulting
to general-dynamic for PIC code IIRC, and the assembly depends on it
being initial-exec. Clang still doesn't support the tls_model
attribute, and it doesn't fail compilation: it just gives a
-Wattributes warning, so we might need to add '-Werror -Wattributes'
(to catch the versions before -Wattributes was added, which give an
'unknown warning option' warning) to the test-compilation CFLAGS...

Plus, the test would have to be moved to before enable_asm is decided
and adds the -DUSE_X86_ASM, etc defines.

> +
> +    AC_DEFINE_UNQUOTED([TLS], $mesa_tls, [The compiler supported TLS storage class, prefering initial-exec if tls_model is supported])
> +fi
>
>  AC_ARG_ENABLE([glx-tls],
>     [AS_HELP_STRING([--enable-glx-tls],
>         [enable TLS support in GLX @<:@default=disabled@:>@])],
> -    [GLX_USE_TLS="$enableval"],
> -    [GLX_USE_TLS=no])
> +    [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
> +     fi])
>  AC_SUBST(GLX_TLS, ${GLX_USE_TLS})
>
>  AS_IF([test "x$GLX_USE_TLS" = xyes],
> --
> 1.7.4.4
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list