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