libgcj and the NPTL posix threads implementation

Ulrich Weigand
Wed Mar 3 03:43:00 GMT 2004

Jeff Sturm wrote:

>static int __thread x;
>int t(void) {
>  return x;
>compare the output compiled with -fPIC:
>        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:
>    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.

However, for smalls amount of data you're allowed to use

static int __thread x __attribute__ ((tls_model ("initial-exec")));

in a library; try this with -fPIC, it'll be much more efficient ...


  Dr. Ulrich Weigand

More information about the Java mailing list