Commit | Line | Data |
---|---|---|
13ae64f3 JJ |
1 | .section ".tdata", "awT", @progbits |
2 | .globl baz | |
3 | .hidden baz | |
4 | .globl var | |
5 | .hidden var2 | |
6 | bar: .long 27 | |
7 | baz: .long 29 | |
8 | var: .long 31 | |
9 | var2: .long 33 | |
10 | .text | |
11 | .globl fn | |
12 | .type fn,@function | |
13 | fn: | |
14 | /* Main binary, no PIC */ | |
15 | 1: movl 1b, %edx | |
16 | addl $_GLOBAL_OFFSET_TABLE_+[.-1b], %edx | |
17 | ||
18 | /* foo can be anywhere in startup TLS */ | |
19 | movl %gs:0, %eax | |
20 | subl foo@GOTTPOFF(%edx), %eax | |
21 | /* %eax now contains &foo */ | |
22 | ||
23 | /* bar only in the main program */ | |
24 | movl %gs:0, %eax | |
25 | subl $bar@TPOFF, %eax | |
26 | /* %eax now contains &bar */ | |
27 | ||
28 | /* baz only in the main program */ | |
29 | movl %gs:0, %ecx | |
30 | /* Arbitrary instructions in between */ | |
31 | nop | |
32 | subl $baz@TPOFF, %ecx | |
33 | /* %ecx now contains &baz */ | |
34 | ||
35 | /* var and var2 only in the main program */ | |
36 | movl %gs:0, %ecx | |
37 | /* Arbitrary instructions in between */ | |
38 | nop | |
39 | nop | |
40 | leal var@NTPOFF(%ecx), %eax | |
41 | /* Arbitrary instructions in between */ | |
42 | nop | |
43 | leal var2@NTPOFF(%ecx), %edx | |
44 | ||
45 | ret |