1*56bb7041Schristos#source: tlsbinpic_64.s
2*56bb7041Schristos#source: tlsbin_64.s
3*56bb7041Schristos#as: -m64 -Aesame
4*56bb7041Schristos#ld: -shared -melf64_s390
5*56bb7041Schristos#objdump: -dzrj.text
6*56bb7041Schristos#target: s390x-*-*
7*56bb7041Schristos
8*56bb7041Schristos# PT_TLS layout is:
9*56bb7041Schristos# Offset from   Offset from     Name
10*56bb7041Schristos# TCB base      TCB end
11*56bb7041Schristos# 0x00          -0xa0           sg1..sg2
12*56bb7041Schristos# 0x20          -0x80           sl1..sl2
13*56bb7041Schristos# 0x40          -0x60           sh1..sh2
14*56bb7041Schristos# 0x60          -0x40           bg1..bg2
15*56bb7041Schristos# 0x80          -0x20           bl1..bl2
16*56bb7041Schristos
17*56bb7041Schristos.*: +file format elf64-s390
18*56bb7041Schristos
19*56bb7041SchristosDisassembly of section .text:
20*56bb7041Schristos
21*56bb7041Schristos0+[0-9a-f]+ <fn2>:
22*56bb7041Schristos# function prolog
23*56bb7041Schristos +[0-9a-f]+:	eb 6e f0 30 00 24 	stmg	%r6,%r14,48\(%r15\)
24*56bb7041Schristos +[0-9a-f]+:	a7 d5 00 3e       	bras	%r13,[0-9a-f]+ <fn2\+0x82>
25*56bb7041Schristos# sG1@tlsgd
26*56bb7041Schristos +[0-9a-f]+:	00 00 00 00       	.long	0x00000000
27*56bb7041Schristos +[0-9a-f]+:	00 00 00 60       	.long	0x00000060
28*56bb7041Schristos# sG2@tlsgd
29*56bb7041Schristos +[0-9a-f]+:	00 00 00 00       	.long	0x00000000
30*56bb7041Schristos +[0-9a-f]+:	00 00 00 48       	.long	0x00000048
31*56bb7041Schristos# sg1@tlsgd
32*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
33*56bb7041Schristos +[0-9a-f]+:	ff ff ff 60       	.long	0xffffff60
34*56bb7041Schristos# sl1@tlsgd
35*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
36*56bb7041Schristos +[0-9a-f]+:	ff ff ff 80       	.long	0xffffff80
37*56bb7041Schristos# sh1@tlsgd
38*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
39*56bb7041Schristos +[0-9a-f]+:	ff ff ff a0       	.long	0xffffffa0
40*56bb7041Schristos# sl1@tlsldm
41*56bb7041Schristos +[0-9a-f]+:	00 00 00 00       	.long	0x00000000
42*56bb7041Schristos +[0-9a-f]+:	00 00 00 00       	.long	0x00000000
43*56bb7041Schristos# sl1@dtpoff
44*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
45*56bb7041Schristos +[0-9a-f]+:	ff ff ff 80       	.long	0xffffff80
46*56bb7041Schristos# sl2@dtpoff
47*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
48*56bb7041Schristos +[0-9a-f]+:	ff ff ff 84       	.long	0xffffff84
49*56bb7041Schristos# sh1@tlsldm
50*56bb7041Schristos +[0-9a-f]+:	00 00 00 00       	.long	0x00000000
51*56bb7041Schristos +[0-9a-f]+:	00 00 00 00       	.long	0x00000000
52*56bb7041Schristos# sh1@dtpoff
53*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
54*56bb7041Schristos +[0-9a-f]+:	ff ff ff a0       	.long	0xffffffa0
55*56bb7041Schristos# sh2@dtpoff
56*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
57*56bb7041Schristos +[0-9a-f]+:	ff ff ff a4       	.long	0xffffffa4
58*56bb7041Schristos# sG2@gotntpoff
59*56bb7041Schristos +[0-9a-f]+:	00 00 00 00       	.long	0x00000000
60*56bb7041Schristos +[0-9a-f]+:	00 00 00 48       	.long	0x00000048
61*56bb7041Schristos# sg1@gotntpoff
62*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
63*56bb7041Schristos +[0-9a-f]+:	ff ff ff 60       	.long	0xffffff60
64*56bb7041Schristos# sl1@gotntpoff
65*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
66*56bb7041Schristos +[0-9a-f]+:	ff ff ff 80       	.long	0xffffff80
67*56bb7041Schristos# sh1@gotntpoff
68*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
69*56bb7041Schristos +[0-9a-f]+:	ff ff ff a0       	.long	0xffffffa0
70*56bb7041Schristos# function prolog
71*56bb7041Schristos +[0-9a-f]+:	b9 04 00 ef       	lgr	%r14,%r15
72*56bb7041Schristos +[0-9a-f]+:	a7 fb ff 60       	aghi	%r15,-160
73*56bb7041Schristos +[0-9a-f]+:	c0 c0 [0-9a-f ]+ 	larl	%r12,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_>
74*56bb7041Schristos +[0-9a-f]+:	e3 e0 e0 00 00 24 	stg	%r14,0\(%r14\)
75*56bb7041Schristos# extract TCB
76*56bb7041Schristos +[0-9a-f]+:	b2 4f 00 90       	ear	%r9,%a0
77*56bb7041Schristos +[0-9a-f]+:	eb 94 00 20 00 0d 	sllg	%r9,%r4,32
78*56bb7041Schristos +[0-9a-f]+:	b2 4f 00 91       	ear	%r9,%a1
79*56bb7041Schristos# GD -> IE because variable is not defined in executable
80*56bb7041Schristos +[0-9a-f]+:	e3 c0 d0 00 00 04 	lg	%r12,0\(%r13\)
81*56bb7041Schristos +[0-9a-f]+:	e3 22 c0 00 00 04 	lg	%r2,0\(%r2,%r12\)
82*56bb7041Schristos +[0-9a-f]+:	41 22 90 00       	la	%r2,0\(%r2,%r9\)
83*56bb7041Schristos# GD -> IE because variable is not defined in executable where
84*56bb7041Schristos# the variable is referenced through IE too
85*56bb7041Schristos +[0-9a-f]+:	e3 20 d0 08 00 04 	lg	%r2,8\(%r13\)
86*56bb7041Schristos +[0-9a-f]+:	e3 22 c0 00 00 04 	lg	%r2,0\(%r2,%r12\)
87*56bb7041Schristos +[0-9a-f]+:	41 22 90 00       	la	%r2,0\(%r2,%r9\)
88*56bb7041Schristos# GD -> LE with global variable defined in executable
89*56bb7041Schristos +[0-9a-f]+:	e3 20 d0 10 00 04 	lg	%r2,16\(%r13\)
90*56bb7041Schristos +[0-9a-f]+:	c0 04 00 00 00 00 	brcl	0,[0-9a-f]+ <fn2\+0xca>
91*56bb7041Schristos +[0-9a-f]+:	41 22 90 00       	la	%r2,0\(%r2,%r9\)
92*56bb7041Schristos# GD -> LE with local variable defined in executable
93*56bb7041Schristos +[0-9a-f]+:	e3 20 d0 18 00 04 	lg	%r2,24\(%r13\)
94*56bb7041Schristos +[0-9a-f]+:	c0 04 00 00 00 00 	brcl	0,[0-9a-f]+ <fn2\+0xda>
95*56bb7041Schristos +[0-9a-f]+:	41 22 90 00       	la	%r2,0\(%r2,%r9\)
96*56bb7041Schristos# GD -> LE with hidden variable defined in executable
97*56bb7041Schristos +[0-9a-f]+:	e3 20 d0 20 00 04 	lg	%r2,32\(%r13\)
98*56bb7041Schristos +[0-9a-f]+:	c0 04 00 00 00 00 	brcl	0,[0-9a-f]+ <fn2\+0xea>
99*56bb7041Schristos +[0-9a-f]+:	41 22 90 00       	la	%r2,0\(%r2,%r9\)
100*56bb7041Schristos# LD -> LE
101*56bb7041Schristos +[0-9a-f]+:	e3 20 d0 28 00 04 	lg	%r2,40\(%r13\)
102*56bb7041Schristos +[0-9a-f]+:	c0 04 00 00 00 00 	brcl	0,[0-9a-f]+ <fn2\+0xfa>
103*56bb7041Schristos +[0-9a-f]+:	41 32 90 00       	la	%r3,0\(%r2,%r9\)
104*56bb7041Schristos +[0-9a-f]+:	e3 40 d0 30 00 04 	lg	%r4,48\(%r13\)
105*56bb7041Schristos +[0-9a-f]+:	41 54 30 00       	la	%r5,0\(%r4,%r3\)
106*56bb7041Schristos +[0-9a-f]+:	e3 40 d0 38 00 04 	lg	%r4,56\(%r13\)
107*56bb7041Schristos +[0-9a-f]+:	41 54 30 00       	la	%r5,0\(%r4,%r3\)
108*56bb7041Schristos +[0-9a-f]+:	e3 20 d0 40 00 04 	lg	%r2,64\(%r13\)
109*56bb7041Schristos +[0-9a-f]+:	c0 04 00 00 00 00 	brcl	0,[0-9a-f]+ <fn2\+0x11e>
110*56bb7041Schristos +[0-9a-f]+:	41 32 90 00       	la	%r3,0\(%r2,%r9\)
111*56bb7041Schristos +[0-9a-f]+:	e3 40 d0 48 00 04 	lg	%r4,72\(%r13\)
112*56bb7041Schristos +[0-9a-f]+:	41 54 30 00       	la	%r5,0\(%r4,%r3\)
113*56bb7041Schristos +[0-9a-f]+:	e3 40 d0 50 00 04 	lg	%r4,80\(%r13\)
114*56bb7041Schristos +[0-9a-f]+:	41 54 30 00       	la	%r5,0\(%r4,%r3\)
115*56bb7041Schristos# IE against global var
116*56bb7041Schristos +[0-9a-f]+:	e3 30 d0 58 00 04 	lg	%r3,88\(%r13\)
117*56bb7041Schristos +[0-9a-f]+:	e3 33 c0 00 00 04 	lg	%r3,0\(%r3,%r12\)
118*56bb7041Schristos +[0-9a-f]+:	41 33 90 00       	la	%r3,0\(%r3,%r9\)
119*56bb7041Schristos# IE -> LE against global var defined in exec
120*56bb7041Schristos +[0-9a-f]+:	e3 30 d0 60 00 04 	lg	%r3,96\(%r13\)
121*56bb7041Schristos +[0-9a-f]+:	eb 43 00 00 00 0d 	sllg	%r4,%r3,0
122*56bb7041Schristos +[0-9a-f]+:	41 54 90 00       	la	%r5,0\(%r4,%r9\)
123*56bb7041Schristos# IE -> LE against local var
124*56bb7041Schristos +[0-9a-f]+:	e3 30 d0 68 00 04 	lg	%r3,104\(%r13\)
125*56bb7041Schristos +[0-9a-f]+:	eb 43 00 00 00 0d 	sllg	%r4,%r3,0
126*56bb7041Schristos +[0-9a-f]+:	41 54 90 00       	la	%r5,0\(%r4,%r9\)
127*56bb7041Schristos# IE -> LE against hidden var
128*56bb7041Schristos +[0-9a-f]+:	e3 30 d0 70 00 04 	lg	%r3,112\(%r13\)
129*56bb7041Schristos +[0-9a-f]+:	eb 43 00 00 00 0d 	sllg	%r4,%r3,0
130*56bb7041Schristos +[0-9a-f]+:	41 54 90 00       	la	%r5,0\(%r4,%r9\)
131*56bb7041Schristos# IE against global var with larl got access
132*56bb7041Schristos +[0-9a-f]+:	c0 30 [0-9a-f ]+ 	larl	%r3,[0-9a-f]+ <.*>
133*56bb7041Schristos +[0-9a-f]+:	e3 33 c0 00 00 04 	lg	%r3,0\(%r3,%r12\)
134*56bb7041Schristos +[0-9a-f]+:	41 33 90 00       	la	%r3,0\(%r3,%r9\)
135*56bb7041Schristos# IE against global var defined in exec with larl got access
136*56bb7041Schristos +[0-9a-f]+:	c0 30 [0-9a-f ]+ 	larl	%r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x38>
137*56bb7041Schristos +[0-9a-f]+:	eb 43 00 00 00 0d 	sllg	%r4,%r3,0
138*56bb7041Schristos +[0-9a-f]+:	41 54 90 00       	la	%r5,0\(%r4,%r9\)
139*56bb7041Schristos# IE against local var with larl got access
140*56bb7041Schristos +[0-9a-f]+:	c0 30 [0-9a-f ]+ 	larl	%r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x20>
141*56bb7041Schristos +[0-9a-f]+:	eb 43 00 00 00 0d 	sllg	%r4,%r3,0
142*56bb7041Schristos +[0-9a-f]+:	41 54 90 00       	la	%r5,0\(%r4,%r9\)
143*56bb7041Schristos# IE against hidden var with larl got access
144*56bb7041Schristos +[0-9a-f]+:	c0 30 [0-9a-f ]+ 	larl	%r3,[0-9a-f]+ <_GLOBAL_OFFSET_TABLE_\+0x40>
145*56bb7041Schristos +[0-9a-f]+:	eb 43 00 00 00 0d 	sllg	%r4,%r3,0
146*56bb7041Schristos +[0-9a-f]+:	41 54 90 00       	la	%r5,0\(%r4,%r9\)
147*56bb7041Schristos# IE against global var with small got access (no optimization)
148*56bb7041Schristos +[0-9a-f]+:	e3 30 c0 28 00 04 	lg	%r3,40\(%r12\)
149*56bb7041Schristos +[0-9a-f]+:	41 33 90 00       	la	%r3,0\(%r3,%r9\)
150*56bb7041Schristos# IE against global var defined in exec with small got access
151*56bb7041Schristos# (no optimization)
152*56bb7041Schristos +[0-9a-f]+:	e3 30 c0 38 00 04 	lg	%r3,56\(%r12\)
153*56bb7041Schristos +[0-9a-f]+:	41 33 90 00       	la	%r3,0\(%r3,%r9\)
154*56bb7041Schristos# IE against local var with small got access (no optimization)
155*56bb7041Schristos +[0-9a-f]+:	e3 30 c0 20 00 04 	lg	%r3,32\(%r12\)
156*56bb7041Schristos +[0-9a-f]+:	41 33 90 00       	la	%r3,0\(%r3,%r9\)
157*56bb7041Schristos# IE against hidden var with small got access (no optimization)
158*56bb7041Schristos +[0-9a-f]+:	e3 30 c0 40 00 04 	lg	%r3,64\(%r12\)
159*56bb7041Schristos +[0-9a-f]+:	41 33 90 00       	la	%r3,0\(%r3,%r9\)
160*56bb7041Schristos# function epilog
161*56bb7041Schristos +[0-9a-f]+:	eb 6e f0 d0 00 04 	lmg	%r6,%r14,208\(%r15\)
162*56bb7041Schristos +[0-9a-f]+:	07 fe             	br	%r14
163*56bb7041Schristos +[0-9a-f]+:	07 07             	nopr	%r7
164*56bb7041Schristos +[0-9a-f]+:	07 07             	nopr	%r7
165*56bb7041Schristos +[0-9a-f]+:	07 07             	nopr	%r7
166*56bb7041Schristos +[0-9a-f]+:	07 07             	nopr	%r7
167*56bb7041Schristos +[0-9a-f]+:	07 07             	nopr	%r7
168*56bb7041Schristos +[0-9a-f]+:	07 07             	nopr	%r7
169*56bb7041Schristos +[0-9a-f]+:	07 07             	nopr	%r7
170*56bb7041Schristos +[0-9a-f]+:	07 07             	nopr	%r7
171*56bb7041Schristos +[0-9a-f]+:	07 07             	nopr	%r7
172*56bb7041Schristos +[0-9a-f]+:	07 07             	nopr	%r7
173*56bb7041Schristos
174*56bb7041Schristos0+[0-9a-f]+ <_start>:
175*56bb7041Schristos# function prolog
176*56bb7041Schristos +[0-9a-f]+:	90 6e f0 18       	stm	%r6,%r14,24\(%r15\)
177*56bb7041Schristos +[0-9a-f]+:	a7 d5 00 16       	bras	%r13,[0-9a-f]+ <_start\+0x30>
178*56bb7041Schristos# sG6@indntpoff
179*56bb7041Schristos +[0-9a-f]+:	00 00 00 00       	.long	0x00000000
180*56bb7041Schristos +[0-9a-f]+:	01 00 18 18       	.long	0x01001818
181*56bb7041Schristos# bg6@indntpoff
182*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
183*56bb7041Schristos +[0-9a-f]+:	ff ff ff d4       	.long	0xffffffd4
184*56bb7041Schristos# bl6@indntpoff
185*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
186*56bb7041Schristos +[0-9a-f]+:	ff ff ff f4       	.long	0xfffffff4
187*56bb7041Schristos# sh6@indntpoff
188*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
189*56bb7041Schristos +[0-9a-f]+:	ff ff ff b4       	.long	0xffffffb4
190*56bb7041Schristos# sg3@indntpoff
191*56bb7041Schristos +[0-9a-f]+:	ff ff ff ff       	.long	0xffffffff
192*56bb7041Schristos +[0-9a-f]+:	ff ff ff 68       	.long	0xffffff68
193*56bb7041Schristos# function prolog
194*56bb7041Schristos +[0-9a-f]+:	b9 04 00 ef       	lgr	%r14,%r15
195*56bb7041Schristos +[0-9a-f]+:	a7 fb ff 60       	aghi	%r15,-160
196*56bb7041Schristos +[0-9a-f]+:	e3 e0 e0 00 00 24 	stg	%r14,0\(%r14\)
197*56bb7041Schristos# extract TCB
198*56bb7041Schristos +[0-9a-f]+:	b2 4f 00 90       	ear	%r9,%a0
199*56bb7041Schristos +[0-9a-f]+:	eb 94 00 20 00 0d 	sllg	%r9,%r4,32
200*56bb7041Schristos +[0-9a-f]+:	b2 4f 00 91       	ear	%r9,%a1
201*56bb7041Schristos# IE against global var
202*56bb7041Schristos +[0-9a-f]+:	e3 30 d0 00 00 04 	lg	%r3,0\(%r13\)
203*56bb7041Schristos +[0-9a-f]+:	e3 33 c0 00 00 04 	lg	%r3,0\(%r3,%r12\)
204*56bb7041Schristos +[0-9a-f]+:	41 33 90 00       	la	%r3,0\(%r3,%r9\)
205*56bb7041Schristos# IE -> LE against global var defined in exec
206*56bb7041Schristos +[0-9a-f]+:	e3 30 d0 08 00 04 	lg	%r3,8\(%r13\)
207*56bb7041Schristos +[0-9a-f]+:	eb 43 00 00 00 0d 	sllg	%r4,%r3,0
208*56bb7041Schristos +[0-9a-f]+:	41 54 90 00       	la	%r5,0\(%r4,%r9\)
209*56bb7041Schristos# IE -> LE against local var
210*56bb7041Schristos +[0-9a-f]+:	e3 30 d0 10 00 04 	lg	%r3,16\(%r13\)
211*56bb7041Schristos +[0-9a-f]+:	eb 43 00 00 00 0d 	sllg	%r4,%r3,0
212*56bb7041Schristos +[0-9a-f]+:	41 54 90 00       	la	%r5,0\(%r4,%r9\)
213*56bb7041Schristos# IE -> LE against hidden but not local var
214*56bb7041Schristos +[0-9a-f]+:	e3 30 d0 18 00 04 	lg	%r3,24\(%r13\)
215*56bb7041Schristos +[0-9a-f]+:	eb 43 00 00 00 0d 	sllg	%r4,%r3,0
216*56bb7041Schristos +[0-9a-f]+:	41 54 90 00       	la	%r5,0\(%r4,%r9\)
217*56bb7041Schristos# LE, global var defined in exec
218*56bb7041Schristos +[0-9a-f]+:	e3 40 d0 20 00 04 	lg	%r4,32\(%r13\)
219*56bb7041Schristos +[0-9a-f]+:	41 54 90 00       	la	%r5,0\(%r4,%r9\)
220*56bb7041Schristos# function epilog
221*56bb7041Schristos +[0-9a-f]+:	eb 6e f0 d0 00 04 	lmg	%r6,%r14,208\(%r15\)
222*56bb7041Schristos +[0-9a-f]+:	07 fe             	br	%r14
223*56bb7041Schristos +[0-9a-f]+:	07 07             	nopr	%r7
224