[Pixman] pixman on iOS

Jeremy Huddleston Sequoia jeremyhu at apple.com
Thu Oct 25 14:57:29 PDT 2012


We should maybe try using -Werror=ignored-attributes in the test, or just prefer the first one.

On Oct 25, 2012, at 14:44, Siarhei Siamashka <siarhei.siamashka at gmail.com> wrote:

> On Mon, 13 Feb 2012 16:16:30 -0800
> Jeremy Huddleston <jeremyhu at apple.com> wrote:
> 
>> From: Jeremy Huddleston <jeremyhu at apple.com>
>> Date: Sat, 11 Feb 2012 00:44:38 -0800
>> Subject: [PATCH 2/2] Expand TLS support beyond __thread to
>> __declspec(thread)
>> 
>> Also prefer initial-exec if available.  This code was pretty much
>> coppied from a similar commit that I made to xorg-server in April.
>> 
>> cf: xorg/xserver: bb4d145bd25e2aee988b100ecf1105ea3b6a40b8
>> 
>> Signed-off-by: Jeremy Huddleston <jeremyhu at apple.com>
> 
> This commit seems to cause troubles for clang in linux.
> Running pixman configure with clang-3.1 prefers the use
> of __declspec(thread) for TLS:
> 
> checking for gettimeofday... yes
> checking sys/time.h usability... yes
> checking sys/time.h presence... yes
> checking for sys/time.h... yes
> checking for thread local storage (TLS) support... __declspec(thread)
> 
> And config.log contains:
> 
> configure:13722: checking for thread local storage (TLS) support
> configure:13750: clang -c -g -O2 -Wall -fno-strict-aliasing -fvisibility=hidden  conftest.c >&5
> configure:13750: $? = 0
> configure:13750: clang -c -g -O2 -Wall -fno-strict-aliasing -fvisibility=hidden  conftest.c >&5
> configure:13750: $? = 0
> configure:13758: result: __declspec(thread)
> 
> So clang seems to accept both __thread and __declspec(thread) but
> selects the latter because it is the last in the list.
> 
> 
> For the current clang svn (soon to be clang-3.2) we get a bit different
> result in config.log:
> 
> configure:13722: checking for thread local storage (TLS) support
> configure:13750: clang -c -g -O2 -Wall -fno-strict-aliasing -fvisibility=hidden  conftest.c >&5
> configure:13750: $? = 0
> configure:13750: clang -c -g -O2 -Wall -fno-strict-aliasing -fvisibility=hidden  conftest.c >&5
> conftest.c:45:16: warning: __declspec attribute 'thread' is not supported [-Wignored-attributes]
> int __declspec(thread) test;
>               ^
> 1 warning generated.
> configure:13750: $? = 0
> configure:13758: result: __declspec(thread)
> 
> Here clang-3.2 produces a warning about __declspec(thread), but does not
> fail compilation. Which results in __declspec(thread) also being
> selected for TLS.
> 
> 
> A simple test demonstrates that __declspec(thread) does not work
> correctly in clang:
> 
> /************************************/
> #include <pthread.h>
> #include <unistd.h>
> #include <assert.h>
> 
> int __declspec(thread) a = 0;
> 
> void *thread_func(void * arg)
> {
>     a++;
>     sleep(1);
>     assert(a == 1);
>     return NULL;
> }
> 
> int main(void)
> {
>     pthread_t thread1, thread2;
>     pthread_create(&thread1, NULL, thread_func, NULL);
>     pthread_create(&thread2, NULL, thread_func, NULL);
>     pthread_join(thread1, NULL);
>     pthread_join(thread2, NULL); 
>     return 0;
> }
> /************************************/
> 
> On a positive side, looks like clang-3.2 is going to be able to pass
> pixman test suite successfully.
> 
> I would suggest to just change the order of checks for
> __declspec(thread) and __thread in configure.ac
> 
> -- 
> Best regards,
> Siarhei Siamashka



More information about the Pixman mailing list