1	.section ".tdata", "awT", @progbits
2	.globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8
3	.globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
4	.hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8
5sg1:	.long 17
6sg2:	.long 18
7sg3:	.long 19
8sg4:	.long 20
9sg5:	.long 21
10sg6:	.long 22
11sg7:	.long 23
12sg8:	.long 24
13sl1:	.long 65
14sl2:	.long 66
15sl3:	.long 67
16sl4:	.long 68
17sl5:	.long 69
18sl6:	.long 70
19sl7:	.long 71
20sl8:	.long 72
21sh1:	.long 257
22sh2:	.long 258
23sh3:	.long 259
24sh4:	.long 260
25sh5:	.long 261
26sh6:	.long 262
27sh7:	.long 263
28sh8:	.long 264
29	.text
30	.globl	fn1
31	.type	fn1,@function
32fn1:
33	pushl	%ebp
34	movl	%esp, %ebp
35	pushl	%ebx
36	pushl	%eax
37	call	1f
381:	popl	%ebx
39	addl	$_GLOBAL_OFFSET_TABLE_+[.-1b], %ebx
40	nop;nop;nop;nop
41
42	/* GD */
43	leal	sg1@tlsgd(%ebx), %eax
44	call	*___tls_get_addr@GOT(%ebx)
45	nop;nop;nop;nop
46
47	/* GD -> IE because variable is referenced through @gottpoff too */
48	leal	sg2@tlsgd(%ecx), %eax
49	call	*___tls_get_addr@GOT(%ecx)
50	nop;nop;nop;nop
51
52	/* GD -> IE because variable is referenced through @gotntpoff too */
53	leal	sg3@tlsgd(%edx), %eax
54	call	*___tls_get_addr@GOT(%edx)
55	nop;nop;nop;nop
56
57	/* GD -> IE because variable is referenced through @gottpoff and
58	   @gotntpoff too */
59	leal	sg4@tlsgd(%edi), %eax
60	call	*___tls_get_addr@GOT(%edi)
61	nop;nop;nop;nop
62
63	/* GD against local variable */
64	leal	sl1@tlsgd(%esi), %eax
65	call	*___tls_get_addr@GOT(%esi)
66	nop;nop;nop;nop
67
68	/* GD -> IE against local variable referenced through @gottpoff too */
69	leal	sl2@tlsgd(%ebp), %eax
70	call	*___tls_get_addr@GOT(%ebp)
71	nop;nop;nop;nop
72
73	/* GD -> IE against local variable referenced through @gotntpoff
74	   too */
75	leal	sl3@tlsgd(%ebx), %eax
76	call	*___tls_get_addr@GOT(%ebx)
77	nop;nop;nop;nop
78
79	/* GD -> IE against local variable referenced through @gottpoff and
80	   @gotntpoff too */
81	leal	sl4@tlsgd(%ebx), %eax
82	call	*___tls_get_addr@GOT(%ebx)
83	nop;nop;nop;nop
84
85	/* GD against hidden and local variable */
86	leal	sh1@tlsgd(%ebx), %eax
87	call	*___tls_get_addr@GOT(%ebx)
88	nop;nop;nop;nop
89
90	/* GD -> IE against hidden and local variable referenced through
91	   @gottpoff too */
92	leal	sh2@tlsgd(%ebx), %eax
93	call	*___tls_get_addr@GOT(%ebx)
94	nop;nop;nop;nop
95
96	/* GD -> IE against hidden and local variable referenced through
97	   @gotntpoff too */
98	leal	sh3@tlsgd(%ebx), %eax
99	call	*___tls_get_addr@GOT(%ebx)
100	nop;nop;nop;nop
101
102	/* GD -> IE against hidden and local variable referenced through
103	   @gottpoff and @gotntpoff too */
104	leal	sh4@tlsgd(%ebx), %eax
105	call	*___tls_get_addr@GOT(%ebx)
106	nop;nop;nop;nop
107
108	/* GD against hidden but not local variable */
109	leal	sH1@tlsgd(%ebx), %eax
110	call	*___tls_get_addr@GOT(%ebx)
111	nop;nop;nop;nop
112
113	/* GD -> IE against hidden but not local variable referenced through
114	   @gottpoff too */
115	leal	sH2@tlsgd(%ebx), %eax
116	call	*___tls_get_addr@GOT(%ebx)
117	nop;nop;nop;nop
118
119	/* GD -> IE against hidden but not local variable referenced through
120	   @gotntpoff too */
121	leal	sH3@tlsgd(%ebx), %eax
122	call	*___tls_get_addr@GOT(%ebx)
123	nop;nop;nop;nop
124
125	/* GD -> IE against hidden but not local variable referenced through
126	   @gottpoff and @gotntpoff too */
127	leal	sH4@tlsgd(%ebx), %eax
128	call	*___tls_get_addr@GOT(%ebx)
129	nop;nop;nop;nop
130
131	/* LD */
132	leal	sl1@tlsldm(%ebx), %eax
133	call	*___tls_get_addr@GOT(%ebx)
134	nop
135	leal	sl1@dtpoff(%eax), %edx
136	nop;nop
137	leal	2+sl2@dtpoff(%eax), %ecx
138	nop;nop;nop;nop
139
140	/* LD against hidden and local variables */
141	leal	sh1@tlsldm(%ecx), %eax
142	call	*___tls_get_addr@GOT(%ecx)
143	nop
144	leal	sh1@dtpoff(%eax), %edx
145	nop;nop
146	leal	sh2@dtpoff+3(%eax), %ecx
147	nop;nop;nop;nop
148
149	/* LD against hidden but not local variables */
150	leal	sH1@tlsldm(%edx), %eax
151	call	*___tls_get_addr@GOT(%edx)
152	nop
153	leal	sH1@dtpoff(%eax), %edx
154	nop;nop
155	leal	sH2@dtpoff+1(%eax), %ecx
156	nop;nop
157
158	/* @gottpoff IE against global var  */
159	movl	%gs:0, %ecx
160	nop;nop
161	subl	sg2@gottpoff(%ebx), %ecx
162	nop;nop;nop;nop
163
164	/* @gottpoff IE against global var  */
165	movl	%gs:0, %eax
166	nop;nop
167	subl	sg4@gottpoff(%ebx), %eax
168	nop;nop;nop;nop
169
170	/* @gotntpoff IE against global var  */
171	movl	%gs:0, %ecx
172	nop;nop
173	addl	sg3@gotntpoff(%ebx), %ecx
174	nop;nop;nop;nop
175
176	/* @gotntpoff IE against global var  */
177	movl	%gs:0, %eax
178	nop;nop
179	addl	sg4@gotntpoff(%ebx), %eax
180	nop;nop;nop;nop
181
182	/* @gottpoff IE against local var  */
183	movl	%gs:0, %ecx
184	nop;nop
185	subl	sl2@gottpoff(%ebx), %ecx
186	nop;nop;nop;nop
187
188	/* @gottpoff IE against local var  */
189	movl	%gs:0, %eax
190	nop;nop
191	subl	sl4@gottpoff(%ebx), %eax
192	nop;nop;nop;nop
193
194	/* @gotntpoff IE against local var  */
195	movl	%gs:0, %ecx
196	nop;nop
197	addl	sl3@gotntpoff(%ebx), %ecx
198	nop;nop;nop;nop
199
200	/* @gotntpoff IE against local var  */
201	movl	%gs:0, %eax
202	nop;nop
203	addl	sl4@gotntpoff(%ebx), %eax
204	nop;nop;nop;nop
205
206	/* @gottpoff IE against hidden and local var  */
207	movl	%gs:0, %ecx
208	nop;nop
209	subl	sh2@gottpoff(%ebx), %ecx
210	nop;nop;nop;nop
211
212	/* @gottpoff IE against hidden and local var  */
213	movl	%gs:0, %eax
214	nop;nop
215	subl	sh4@gottpoff(%ebx), %eax
216	nop;nop;nop;nop
217
218	/* @gotntpoff IE against hidden and local var  */
219	movl	%gs:0, %ecx
220	nop;nop
221	addl	sh3@gotntpoff(%ebx), %ecx
222	nop;nop;nop;nop
223
224	/* @gotntpoff IE against hidden and local var  */
225	movl	%gs:0, %eax
226	nop;nop
227	addl	sh4@gotntpoff(%ebx), %eax
228	nop;nop;nop;nop
229
230	/* @gottpoff IE against hidden but not local var  */
231	movl	%gs:0, %ecx
232	nop;nop
233	subl	sH2@gottpoff(%ebx), %ecx
234	nop;nop;nop;nop
235
236	/* @gottpoff IE against hidden but not local var  */
237	movl	%gs:0, %eax
238	nop;nop
239	subl	sH4@gottpoff(%ebx), %eax
240	nop;nop;nop;nop
241
242	/* @gotntpoff IE against hidden but not local var  */
243	movl	%gs:0, %ecx
244	nop;nop
245	addl	sH3@gotntpoff(%ebx), %ecx
246	nop;nop;nop;nop
247
248	/* @gotntpoff IE against hidden but not local var  */
249	movl	%gs:0, %eax
250	nop;nop
251	addl	sH4@gotntpoff(%ebx), %eax
252	nop;nop;nop;nop
253
254	/* Direct access through %gs  */
255
256	/* @gotntpoff IE against global var  */
257	movl	sg5@gotntpoff(%ebx), %ecx
258	nop;nop
259	movl	%gs:(%ecx), %edx
260	nop;nop;nop;nop
261
262	/* @gotntpoff IE against local var  */
263	movl	sl5@gotntpoff(%ebx), %eax
264	nop;nop
265	movl	%gs:(%eax), %edx
266	nop;nop;nop;nop
267
268	/* @gotntpoff IE against hidden and local var  */
269	movl	sh5@gotntpoff(%ebx), %edx
270	nop;nop
271	movl	%gs:(%edx), %edx
272	nop;nop;nop;nop
273
274	/* @gotntpoff IE against hidden but not local var  */
275	movl	sH5@gotntpoff(%ebx), %ecx
276	nop;nop
277	movl	%gs:(%ecx), %edx
278	nop;nop;nop;nop
279
280	movl    -4(%ebp), %ebx
281	leave
282	ret
283