Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 7 Sep 2013 22:00:00 GMT
From:      Niclas Zeising <zeising@freebsd.org>
To:        freebsd-x11@FreeBSD.org
Subject:   Re: ports/181838: [patch] x11-servers/xorg-server: fix TLS variables with clang
Message-ID:  <201309072200.r87M00q1098854@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR ports/181838; it has been noted by GNATS.

From: Niclas Zeising <zeising@freebsd.org>
To: Tijl Coosemans <tijl@FreeBSD.org>
Cc: bug-followup@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--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201309072200.r87M00q1098854>