diff options
Diffstat (limited to 'binutils-2.21/ld/testsuite/ld-s390/tlsbinpic_64.s')
-rw-r--r-- | binutils-2.21/ld/testsuite/ld-s390/tlsbinpic_64.s | 186 |
1 files changed, 186 insertions, 0 deletions
diff --git a/binutils-2.21/ld/testsuite/ld-s390/tlsbinpic_64.s b/binutils-2.21/ld/testsuite/ld-s390/tlsbinpic_64.s new file mode 100644 index 0000000..eeda6ca --- /dev/null +++ b/binutils-2.21/ld/testsuite/ld-s390/tlsbinpic_64.s @@ -0,0 +1,186 @@ + .section ".tdata", "awT", @progbits + .balign 32 + .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8 + .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 + .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 + .hidden sh1, sh2 +sg1: .long 17 +sg2: .long 18 +sg3: .long 19 +sg4: .long 20 +sg5: .long 21 +sg6: .long 22 +sg7: .long 23 +sg8: .long 24 +sl1: .long 65 +sl2: .long 66 +sl3: .long 67 +sl4: .long 68 +sl5: .long 69 +sl6: .long 70 +sl7: .long 71 +sl8: .long 72 +sh1: .long 257 +sh2: .long 258 +sh3: .long 259 +sh4: .long 260 +sh5: .long 261 +sh6: .long 262 +sh7: .long 263 +sh8: .long 264 + .text + .globl fn2 + .type fn2,@function + .balign 64 +fn2: + /* Function prolog */ + stmg %r6,%r14,48(%r15) + bras %r13,.LTN1 + /* Literal pool */ +.LT1: +.LC2: + .quad sG1@tlsgd +.LC3: + .quad sG2@tlsgd +.LC4: + .quad sg1@tlsgd +.LC5: + .quad sl1@tlsgd +.LC6: + .quad sh1@tlsgd +.LC7: + .quad sl1@tlsldm +.LC8: + .quad sl1@dtpoff +.LC9: + .quad sl2@dtpoff +.LC10: + .quad sh1@tlsldm +.LC11: + .quad sh1@dtpoff +.LC12: + .quad sh2@dtpoff +.LC13: + .quad sG2@gotntpoff +.LC14: + .quad sg1@gotntpoff +.LC15: + .quad sl1@gotntpoff +.LC16: + .quad sh1@gotntpoff +.LTN1: + /* Function prolog */ + lgr %r14,%r15 + aghi %r15,-160 + larl %r12,_GLOBAL_OFFSET_TABLE_ + stg %r14,0(%r14) + + /* Extract TCB */ + ear %r9,%a0 + sllg %r9,%r4,32 + ear %r9,%a1 + + /* GD -> IE because variable is not defined in executable */ + lg %r12,.LC2-.LT1(%r13) + brasl %r14,__tls_get_offset@plt:tls_gdcall:sG1 + la %r2,0(%r2,%r9) + + /* GD -> IE because variable is not defined in executable where + the variable is referenced through IE too */ + lg %r2,.LC3-.LT1(%r13) + brasl %r14,__tls_get_offset@plt:tls_gdcall:sG2 + la %r2,0(%r2,%r9) + + /* GD -> LE with global variable defined in executable */ + lg %r2,.LC4-.LT1(%r13) + brasl %r14,__tls_get_offset@plt:tls_gdcall:sg1 + la %r2,0(%r2,%r9) + + /* GD -> LE with local variable defined in executable */ + lg %r2,.LC5-.LT1(%r13) + brasl %r14,__tls_get_offset@plt:tls_gdcall:sl1 + la %r2,0(%r2,%r9) + + /* GD -> LE with hidden variable defined in executable */ + lg %r2,.LC6-.LT1(%r13) + brasl %r14,__tls_get_offset@plt:tls_gdcall:sh1 + la %r2,0(%r2,%r9) + + /* LD -> LE */ + lg %r2,.LC7-.LT1(%r13) + brasl %r14,__tls_get_offset@plt:tls_ldcall:sl1 + la %r3,0(%r2,%r9) + lg %r4,.LC8-.LT1(%r13) + la %r5,0(%r4,%r3) + lg %r4,.LC9-.LT1(%r13) + la %r5,0(%r4,%r3) + + /* LD -> LE against hidden variables */ + lg %r2,.LC10-.LT1(%r13) + brasl %r14,__tls_get_offset@plt:tls_ldcall:sh1 + la %r3,0(%r2,%r9) + lg %r4,.LC11-.LT1(%r13) + la %r5,0(%r4,%r3) + lg %r4,.LC12-.LT1(%r13) + la %r5,0(%r4,%r3) + + /* IE against global var */ + lg %r3,.LC13-.LT1(%r13) + lg %r3,0(%r3,%r12):tls_load:sG2 + la %r3,0(%r3,%r9) + + /* IE -> LE against global var defined in exec */ + lg %r3,.LC14-.LT1(%r13) + lg %r4,0(%r3,%r12):tls_load:sg1 + la %r5,0(%r4,%r9) + + /* IE -> LE against local var */ + lg %r3,.LC15-.LT1(%r13) + lg %r4,0(%r3,%r12):tls_load:sl2 + la %r5,0(%r4,%r9) + + /* IE -> LE against hidden var */ + lg %r3,.LC16-.LT1(%r13) + lg %r4,0(%r3,%r12):tls_load:sh1 + la %r5,0(%r4,%r9) + + /* IE against global var with larl got access */ + larl %r3,sG3@indntpoff + lg %r3,0(%r3,%r12):tls_load:sG3 + la %r3,0(%r3,%r9) + + /* IE against global var defined in exec with larl got access */ + larl %r3,sg3@indntpoff + lg %r4,0(%r3,%r12):tls_load:sg3 + la %r5,0(%r4,%r9) + + /* IE against local var with larl got access */ + larl %r3,sl3@indntpoff + lg %r4,0(%r3,%r12):tls_load:sl3 + la %r5,0(%r4,%r9) + + /* IE against hidden var with larl got access */ + larl %r3,sh3@indntpoff + lg %r4,0(%r3,%r12):tls_load:sh3 + la %r5,0(%r4,%r9) + + /* IE against global var with small got access (no optimization) */ + lg %r3,sG3@gotntpoff(%r12) + la %r3,0(%r3,%r9) + + /* IE against global var defined in exec with small got access + (no optimization) */ + lg %r3,sg3@gotntpoff(%r12) + la %r3,0(%r3,%r9) + + /* IE against local var with small got access (no optimization) */ + lg %r3,sl3@gotntpoff(%r12) + la %r3,0(%r3,%r9) + + /* IE against hidden var with small got access (no optimization) */ + lg %r3,sh3@gotntpoff(%r12) + la %r3,0(%r3,%r9) + + /* Function epilog */ + lmg %r6,%r14,208(%r15) + br %r14 |