1 /* Force .data aligned to 4K, so that .got very likely gets at
2 0x5021a0 (0x60 bytes .tdata and 0x140 bytes .dynamic) */
5 .section ".tdata", "awT", @progbits
6 .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
7 .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
8 .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
33 /* Force .text aligned to 4K, so it very likely gets at 0x401000. */
42 /* GD -> IE because variable is not defined in executable */
44 leaq sG1@tlsgd(%rip), %rdi
47 call __tls_get_addr@plt
50 /* GD -> IE because variable is not defined in executable where
51 the variable is referenced through IE too */
53 leaq sG2@tlsgd(%rip), %rdi
56 call __tls_get_addr@plt
59 /* GD -> LE with global variable defined in executable */
61 leaq sg1@tlsgd(%rip), %rdi
64 call __tls_get_addr@plt
67 /* GD -> LE with local variable defined in executable */
69 leaq sl1@tlsgd(%rip), %rdi
72 call __tls_get_addr@plt
75 /* GD -> LE with hidden variable defined in executable */
77 leaq sh1@tlsgd(%rip), %rdi
80 call __tls_get_addr@plt
84 leaq sl1@tlsld(%rip), %rdi
85 call __tls_get_addr@plt
87 leaq 1+sl1@dtpoff(%rax), %rdx
89 leaq sl2@dtpoff+2(%rax), %r9
92 /* LD -> LE against hidden variables */
93 leaq sh1@tlsld(%rip), %rdi
94 call __tls_get_addr@plt
96 leaq sh1@dtpoff(%rax), %rdx
98 leaq 3+sh2@dtpoff(%rax), %rcx
101 /* IE against global var */
104 addq sG2@gottpoff(%rip), %r9
107 /* IE -> LE against global var defined in exec */
110 addq sg1@gottpoff(%rip), %r10
113 /* IE -> LE against local var */
116 addq sl1@gottpoff(%rip), %rax
119 /* IE -> LE against hidden var */
122 addq sh1@gottpoff(%rip), %rcx
125 /* Direct access through %fs */
127 /* IE against global var */
128 movq sG5@gottpoff(%rip), %rcx
130 movq %fs:(%rcx), %rdx
133 /* IE->LE against local var */
134 movq sl5@gottpoff(%rip), %r11
136 movq %fs:(%r11), %r12
139 /* IE->LE against hidden var */
140 movq sh5@gottpoff(%rip), %rdx
142 movq %fs:(%rdx), %rdx