libgcj and the NPTL posix threads implementation
Jeff Sturm
jsturm@one-point.com
Mon Mar 1 22:59:00 GMT 2004
On Mon, 1 Mar 2004, Anthony Green wrote:
> > But your version is more efficient
> > within a DSO.
>
> Why is this? It doesn't call any functions, does it?
For:
static int __thread x;
int t(void) {
return x;
}
compare the output compiled with -fPIC:
t:
pushl %ebx
call __i686.get_pc_thunk.bx
addl $_GLOBAL_OFFSET_TABLE_, %ebx
leal x@TLSLDM(%ebx), %eax
call ___tls_get_addr@PLT
popl %ebx
movl x@DTPOFF(%eax), %eax
ret
vs. without:
t:
movl %gs:x@NTPOFF, %eax
ret
The former is necessary in a DSO where the exact thread-local offset can't
be known at compile time.
Jeff
More information about the Java
mailing list