Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 17 Jun 2003 17:41:11 +0400 (MSD)
From:      Igor Sysoev <is@rambler-co.ru>
To:        threads@freebsd.org
Subject:   Re: Nvidia, TLS and __thread keyword -- an observation
Message-ID:  <Pine.BSF.4.21.0306171714110.326-100000@is>
In-Reply-To: <20030617071810.GA2451@dhcp01.pn.xcllnt.net>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 17 Jun 2003, Marcel Moolenaar wrote:

> There's a definite advantage to supporting the __thread keyword in
> userland and we should add the support. It really isn't that hard,
> but it requires some thought and testing. In most cases you simply
> point your thread pointer between the control structure and the
> thread local segments.

If the thread implementation uses gs register to point to thread
specific data:

   gs -> [ thread specific data ]
         [ tls_array ]

   then this C code

   __thread  int a;  a = 1;

   can be translated to

   mov  tls_key, %ecx
   mov  $gs:tls_array, %eax
   mov  (%eax,%ecx,4), %eax
   mov  $1, (%eax)

In FreeBSD we use gs to point to KSE specific data

   gs -> [ KSE specific data ]
         [ current thread    ] -> [ thread specfic data ]
                                  [ tls_array ]

   and then same C code can be translate to

   mov  tls_key, %ecx
   mov  $gs:current_thread, %eax
   mov  tls_array(%eax), %eax
   mov  (%eax,%ecx,4), %eax
   mov  $1, (%eax)

And I think we should use this scheme not only in libkse but in libthr too
to be binary compatible.


Igor Sysoev
http://sysoev.ru/en/



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?Pine.BSF.4.21.0306171714110.326-100000>