This is the mail archive of the
java@gcc.gnu.org
mailing list for the Java project.
RE: libgcj and the NPTL posix threads implementation
- From: Jeff Sturm <jsturm at one-point dot com>
- To: Anthony Green <green at redhat dot com>
- Cc: "Boehm, Hans" <hans dot boehm at hp dot com>, "'Michael Koch'" <konqueror at gmx dot de>, <java at gcc dot gnu dot org>
- Date: Mon, 1 Mar 2004 16:08:43 -0500 (EST)
- Subject: RE: libgcj and the NPTL posix threads implementation
On Sun, 29 Feb 2004, Anthony Green wrote:
> + inline _Jv_ThreadId_t
> + _Jv_ThreadSelf (void)
> + {
> + size_t id;
> + asm ("mov %%gs:0x8, %0" : "=r"(id));
> + return id;
> + }
I'm curious what the special significance of offset 0x8 might be. As I
understand TLS on glibc, "move %gs:0, %eax" would place the thread pointer
in %eax, which is sufficient for these purposes as a pointer to an opaque
per-thread structure.
Equivalently, you could do:
static __thread _Jv_ThreadId_t me;
...
return me;
and set the variable during thread creation. It is more portable, and
should work anywhere TLS is available. But your version is more efficient
within a DSO.
Jeff