From owner-freebsd-x11@FreeBSD.ORG Sat Sep 7 22:00:01 2013 Return-Path: Delivered-To: freebsd-x11@smarthost.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 5031FE68 for ; Sat, 7 Sep 2013 22:00:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:1900:2254:206c::16:87]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 3DF85277F for ; Sat, 7 Sep 2013 22:00:01 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.7/8.14.7) with ESMTP id r87M01I3099183 for ; Sat, 7 Sep 2013 22:00:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.7/8.14.7/Submit) id r87M00q1098854; Sat, 7 Sep 2013 22:00:00 GMT (envelope-from gnats) Date: Sat, 7 Sep 2013 22:00:00 GMT Message-Id: <201309072200.r87M00q1098854@freefall.freebsd.org> To: freebsd-x11@FreeBSD.org Cc: From: Niclas Zeising Subject: Re: ports/181838: [patch] x11-servers/xorg-server: fix TLS variables with clang X-BeenThere: freebsd-x11@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list Reply-To: Niclas Zeising List-Id: X11 on FreeBSD -- maintaining and support List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 07 Sep 2013 22:00:01 -0000 The following reply was made to PR ports/181838; it has been noted by GNATS. From: Niclas Zeising To: Tijl Coosemans 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--