libgcj and the NPTL posix threads implementation

Ulrich Weigand weigand@i1.informatik.uni-erlangen.de
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:
>
>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.

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 ...

Bye,
Ulrich

-- 
  Dr. Ulrich Weigand
  weigand@informatik.uni-erlangen.de



More information about the Java mailing list