On 7/1/06, Gary Funck <[EMAIL PROTECTED]> wrote:
...
What are the technical reasons for the front-end enforcing this restriction,
when apparently some linkers will handle the TLS linkage fine?  If in fact
it is required that __thread be added to the extern, is the compiler simply
accommodating a limitation/bug in the linker?

Because the compiler has to generate different code
for accesses to __thread vs non __thread variable:
# cat -n t.c
    1  extern          int i1;
    2  extern __thread int i2;
    3
    4  int func1() { return i1; }
    5  int func2() { return i2; }
# gcc -O -S t.c
# cat t.s
       .file   "t.c"
       .text
.globl func1
       .type   func1,@function
func1:
       pushl   %ebp
       movl    %esp, %ebp
       movl    i1, %eax
       leave
       ret
.Lfe1:
       .size   func1,.Lfe1-func1
.globl func2
       .type   func2,@function
func2:
       pushl   %ebp
       movl    %esp, %ebp
       movl    [EMAIL PROTECTED], %eax
       movl    %gs:(%eax), %eax
       leave
       ret
.Lfe2:
       .size   func2,.Lfe2-func2
       .ident  "GCC: (GNU) 3.2.2 20030222 (Red Hat Linux 3.2.2-5)"
#

--
#pragma ident "Seongbae Park, compiler, http://seongbae.blogspot.com";

Reply via email to