ports/181838: [patch] x11-servers/xorg-server: fix TLS variables with clang
Niclas Zeising
zeising at freebsd.org
Sat Sep 7 22:00:01 UTC 2013
The following reply was made to PR ports/181838; it has been noted by GNATS.
From: Niclas Zeising <zeising at freebsd.org>
To: Tijl Coosemans <tijl at FreeBSD.org>
Cc: bug-followup at FreeBSD.org
Subject: Re: ports/181838: [patch] x11-servers/xorg-server: fix TLS variables
with clang
Date: Sat, 07 Sep 2013 23:51:32 +0200
This is a multi-part message in MIME format.
--------------090100090803040407060508
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 7bit
On 09/06/13 23:22, Tijl Coosemans wrote:
> On Fri, 06 Sep 2013 22:18:27 +0200 Niclas Zeising wrote:
>> Can you please elaborate a bit on this, exactly what happends when
>> setting that configure variable?
>
> The configure script tests how to declare a thread-local variable. For
> clang and gcc this is done using the __thread keyword like this:
>
> __thread int thread_specific_int_var;
>
> Other compilers use __declspec(thread) instead of __thread.
>
> The code in configure comes from the XORG_TLS call in configure.ac.
> XORG_TLS is defined in m4/xorg-tls.m4. Here are the relevant bits:
>
> 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)
>
> The for-loop runs over the elements in $keywords and sets ac_cv_tls
> to the keyword if the compiler accepts it. The problem is that clang
> accepts __declspec(thread) but it doesn't actually work (there's a
> warning about this but no error) so when the for-loop ends ac_cv_tls
> is set to __declspec(thread). Because the test is inside AC_CACHE_VAL
> it can be skipped by defining ac_cv_tls which is what the patch does.
>
> I found a similar test in pixman but there the for-loop contains a
> break so it ends on the first successful keyword (i.e. __thread).
>
>> Have you tried and ensured that this doesn't break xserver built with
>> gcc?
>
> No, I currently don't have gcc installed, but the keyword for gcc is
> also __thread. You could search for __thread in a config.log generated
> with gcc to verify this.
>
Hi!
Looking through the git history of xorg-server, I noticed that this test
has changed in later versions. I changed the TLS test to mimic this
way, and it seems to work. I just want a second set of eyes, can you
please test the attached patch?
Regards!
--
Niclas Zeising
--------------090100090803040407060508
Content-Type: text/x-patch;
name="xserver-tls.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment;
filename="xserver-tls.diff"
Index: Makefile
===================================================================
--- Makefile (revision 1141)
+++ Makefile (working copy)
@@ -31,7 +31,8 @@
XORG_VERSION= 1.12.4
XORG_REVISION= 1
PLIST_SUB+= OLD="@comment " NEW=""
-EXTRA_PATCHES+= ${FILESDIR}/extra-clang
+EXTRA_PATCHES+= ${FILESDIR}/extra-clang \
+ ${FILESDIR}/extra-configure
.else
XORG_VERSION= 1.7.7
XORG_REVISION= 8
Index: files/extra-configure
===================================================================
--- files/extra-configure (revision 0)
+++ files/extra-configure (working copy)
@@ -0,0 +1,11 @@
+--- configure.orig 2013-09-07 22:11:27.210621324 +0200
++++ configure 2013-09-07 22:11:52.912624338 +0200
+@@ -22839,7 +22839,7 @@
+ }
+ _ACEOF
+ if ac_fn_c_try_compile "$LINENO"; then :
+- ac_cv_tls=$kw
++ ac_cv_tls=$kw; break ;
+ fi
+ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ done
Property changes on: files/extra-configure
___________________________________________________________________
Added: fbsd:nokeywords
## -0,0 +1 ##
+yes
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
--------------090100090803040407060508--
More information about the freebsd-x11
mailing list