diff options
Diffstat (limited to 'ld/testsuite/ld-sh/tlspic1.s')
-rw-r--r-- | ld/testsuite/ld-sh/tlspic1.s | 267 |
1 files changed, 267 insertions, 0 deletions
diff --git a/ld/testsuite/ld-sh/tlspic1.s b/ld/testsuite/ld-sh/tlspic1.s new file mode 100644 index 0000000..153709a --- /dev/null +++ b/ld/testsuite/ld-sh/tlspic1.s @@ -0,0 +1,267 @@ + .section ".tdata", "awT", @progbits + .globl sg1, sg2 + .globl sh1, sh2 + .hidden sh1, sh2 +sg1: .long 17 +sg2: .long 18 +sl1: .long 65 +sl2: .long 66 +sh1: .long 257 +sh2: .long 258 + .text + .align 1 + .globl fn1 + .type fn1,@function +fn1: + mov.l r12,@-r15 + mov.l r14,@-r15 + sts.l pr,@-r15 + mova .L3,r0 + mov.l .L3,r12 + add r0,r12 + mov r15,r14 + nop;nop;nop;nop + + ! GD + mov.l 1f,r4 + mova 2f,r0 + mov.l 2f,r1 + add r0,r1 + jsr @r1 + add r12,r4 + bra 3f + nop + .align 2 +1: .long sg1@TLSGD +2: .long __tls_get_addr@PLT +3: + nop;nop;nop;nop + + ! GD -> IE because variable is referenced through @GOTTPOFF too + mov.l 1f,r4 + mova 2f,r0 + mov.l 2f,r1 + add r0,r1 + jsr @r1 + add r12,r4 + bra 3f + nop + .align 2 +1: .long sg2@TLSGD +2: .long __tls_get_addr@PLT +3: + nop;nop;nop;nop + + ! GD against local variable + mov.l 1f,r4 + mova 2f,r0 + mov.l 2f,r1 + add r0,r1 + jsr @r1 + add r12,r4 + bra 3f + nop + .align 2 +1: .long sl1@TLSGD +2: .long __tls_get_addr@PLT +3: + nop;nop;nop;nop + + ! GD -> IE against local variable referenced through @GOTTPOFF too + mov.l 1f,r4 + mova 2f,r0 + mov.l 2f,r1 + add r0,r1 + jsr @r1 + add r12,r4 + bra 3f + nop + .align 2 +1: .long sl2@TLSGD +2: .long __tls_get_addr@PLT +3: + nop;nop;nop;nop + + ! GD against hidden and local variable + mov.l 1f,r4 + mova 2f,r0 + mov.l 2f,r1 + add r0,r1 + jsr @r1 + add r12,r4 + bra 3f + nop + .align 2 +1: .long sh1@TLSGD +2: .long __tls_get_addr@PLT +3: + nop;nop;nop;nop + + ! GD -> IE against hidden and local variable referenced through + ! @GOTTPOFF too + mov.l 1f,r4 + mova 2f,r0 + mov.l 2f,r1 + add r0,r1 + jsr @r1 + add r12,r4 + bra 3f + nop + .align 2 +1: .long sh2@TLSGD +2: .long __tls_get_addr@PLT +3: + nop;nop;nop;nop + + ! GD against hidden but not local variable + mov.l 1f,r4 + mova 2f,r0 + mov.l 2f,r1 + add r0,r1 + jsr @r1 + add r12,r4 + bra 3f + nop + .align 2 +1: .long sH1@TLSGD +2: .long __tls_get_addr@PLT +3: + nop;nop;nop;nop + + ! GD -> IE against hidden but not local variable referenced through + ! @GOTTPOFF too + mov.l 1f,r4 + mova 2f,r0 + mov.l 2f,r1 + add r0,r1 + jsr @r1 + add r12,r4 + bra 3f + nop + .align 2 +1: .long sH2@TLSGD +2: .long __tls_get_addr@PLT +3: + nop;nop;nop;nop + + ! LD + mov.l 1f,r4 + mova 2f,r0 + mov.l 2f,r1 + add r0,r1 + jsr @r1 + add r12,r4 + bra 3f + nop + .align 2 +1: .long sl1@TLSLDM +2: .long __tls_get_addr@PLT +3: + nop;nop + mov.l .L4,r1 + add r0,r1 + nop;nop + mov.l .L5,r2 + add r0,r2 + nop;nop;nop;nop + + ! LD against hidden and local variables + mov.l 1f,r4 + mova 2f,r0 + mov.l 2f,r1 + add r0,r1 + jsr @r1 + add r12,r4 + bra 3f + nop + .align 2 +1: .long sl1@TLSLDM +2: .long __tls_get_addr@PLT +3: + nop;nop + mov.l .L6,r1 + add r0,r1 + nop;nop + mov.l .L7,r2 + add r0,r2 + nop;nop;nop;nop + + ! LD against hidden but not local variables + mov.l 1f,r4 + mova 2f,r0 + mov.l 2f,r1 + add r0,r1 + jsr @r1 + add r12,r4 + bra 3f + nop + .align 2 +1: .long sH1@TLSLDM +2: .long __tls_get_addr@PLT +3: + nop;nop + mov.l .L8,r1 + add r0,r1 + nop;nop + mov.l .L9,r2 + add r0,r2 + nop;nop;nop;nop + + ! @GOTTPOFF IE against global var + mov.l 1f,r0 + stc gbr,r1 + mov.l @(r0,r12),r0 + bra 2f + add r0,r1 + .align 2 +1: .long sg2@GOTTPOFF +2: + nop;nop;nop;nop + + ! @GOTTPOFF IE against local var + mov.l 1f,r0 + stc gbr,r1 + mov.l @(r0,r12),r0 + bra 2f + add r0,r1 + .align 2 +1: .long sl2@GOTTPOFF +2: + nop;nop;nop;nop + + ! @GOTTPOFF IE against hidden and local var + mov.l 1f,r0 + stc gbr,r1 + mov.l @(r0,r12),r0 + bra 2f + add r0,r1 + .align 2 +1: .long sh2@GOTTPOFF +2: + nop;nop;nop;nop + + ! @GOTTPOFF IE against hidden but not local var + mov.l 1f,r0 + stc gbr,r1 + mov.l @(r0,r12),r0 + bra 2f + add r0,r1 + .align 2 +1: .long sH2@GOTTPOFF +2: + nop;nop;nop;nop + + mov r14,r15 + lds.l @r15+,pr + mov.l @r15+,r14 + rts + mov.l @r15+,r12 + + .align 2 +.L3: .long _GLOBAL_OFFSET_TABLE_ +.L4: .long sl1@DTPOFF +.L5: .long sl1@DTPOFF + 4 +.L6: .long sh1@DTPOFF +.L7: .long sh2@DTPOFF +.L8: .long sH1@DTPOFF +.L9: .long sH2@DTPOFF |