| .section ".tdata", "awT", @progbits |
| .globl foo, baz |
| .hidden baz |
| foo: .long 25 |
| bar: .long 27 |
| baz: .long 29 |
| .text |
| .globl fn |
| .type fn,@function |
| fn: |
| pushl %ebp |
| movl %esp, %ebp |
| pushl %ebx |
| pushl %eax |
| call 1f |
| 1: popl %ebx |
| addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx |
| |
| /* Dynamic TLS model, foo not known to be in the current object */ |
| leal foo@TLSGD(,%ebx,1), %eax |
| call ___tls_get_addr@PLT |
| /* %eax now contains &foo */ |
| |
| /* Dynamic TLS model, bar and baz known to be in the current object */ |
| leal bar@TLSLDM(%ebx), %eax |
| call ___tls_get_addr@PLT |
| |
| /* Just show that there can be arbitrary instructions here */ |
| addl $0, %edi |
| |
| leal bar@DTPOFF(%eax), %edx |
| /* %edx now contains &bar */ |
| |
| /* Again, arbitrary instructions */ |
| addl $0, %esi |
| |
| leal baz@DTPOFF(%eax), %ecx |
| /* %ecx now contains &baz */ |
| |
| movl -4(%ebp), %ebx |
| leave |
| ret |