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