diff options
Diffstat (limited to 'ld/testsuite/ld-arm/tls-descrelax.s')
-rw-r--r-- | ld/testsuite/ld-arm/tls-descrelax.s | 197 |
1 files changed, 197 insertions, 0 deletions
diff --git a/ld/testsuite/ld-arm/tls-descrelax.s b/ld/testsuite/ld-arm/tls-descrelax.s new file mode 100644 index 0000000..826f169 --- /dev/null +++ b/ld/testsuite/ld-arm/tls-descrelax.s @@ -0,0 +1,197 @@ +@ we can relax local and non-weak globals for non-shared links + + .text + .arm + + .p2align 2 +foo: +@tlscall global, manually relaxed to IE + ldr r0, 1f +2: ldr r0, [pc, r0] + nop + .p2align 2 +1: .word gd1(gottpoff) + (. - 2b - 8) + + .p2align 2 +@tlscall global, should relax to IE + ldr r0, 1f +2: blx gd1(tlscall) + nop + .p2align 2 +1: .word gd1(tlsdesc) + (. - 2b) + + .p2align 2 +@tlscall local, manually relaxed to LE + ldr r0, 1f + nop + nop + .p2align 2 +1: .word ld1(tpoff) + + .p2align 2 +@tlscall local, should relax to LE + ldr r0, 1f +2: blx ld1(tlscall) + nop + .p2align 2 +1: .word ld1(tlsdesc) + (. - 2b) + + .p2align 2 +@open coded global, manually relaxed to IE + ldr r0, 1f +2: + add r0, pc, r0 + ldr r1, [r0] + mov r0, r1 + nop + .p2align 2 +1: .word gd1(gottpoff) + (. - 2b - 8) + + .p2align 2 +@open coded global, should relax to IE + ldr r0, 1f +2: +.tlsdescseq gd1 + add r0, pc, r0 +.tlsdescseq gd1 + ldr r1, [r0,#4] +.tlsdescseq gd1 + blx r1 + nop + .p2align 2 +1: .word gd1(tlsdesc) + (. - 2b) + + .p2align 2 +@open coded local, manually relaxed to LE + ldr r0, 1f +2: + nop + nop + nop + nop + .p2align 2 +1: .word ld1(tpoff) + + .p2align 2 +@open coded local, should relax to LE + ldr r0, 1f +2: +.tlsdescseq ld1 + add r0, pc, r0 +.tlsdescseq ld1 + ldr r1, [r0,#4] +.tlsdescseq ld1 + blx r1 + nop + .p2align 2 +1: .word ld1(tlsdesc) + (. - 2b) + + + .thumb + .p2align 1 +bar: +@tlscall global, manually relaxed to IE + ldr r0, 1f +2: add r0, pc, r0 + ldr r0, [r0] + nop + .p2align 2 +1: .word gd1(gottpoff) + (. - 2b - 4) + + .p2align 1 +@tlscall global, should relax to IE + ldr r0, 1f +2: blx gd1(tlscall) + nop + .p2align 2 +1: .word gd1(tlsdesc) + (. - 2b + 1) + + .p2align 1 +@tlscall global, should relax to IE + ldr r0, 1f +2: blx r1(tlscall) + nop + .p2align 2 +1: .word r1(tlsdesc) + (. - 2b + 1) + + .p2align 1 +@tlscall local, manually relaxed to LE + ldr r0, 1f + nop + nop + .p2align 2 +1: .word ld1(tpoff) + + .p2align 1 +@tlscall local, should relax to LE + ldr r0, 1f +2: blx ld1(tlscall) + nop + .p2align 2 +1: .word ld1(tlsdesc) + (. - 2b + 1) + + .p2align 1 +@tlscall local, should relax to LE + ldr r0, 1f +2: blx r0(tlscall) + nop + .p2align 2 +1: .word r0(tlsdesc) + (. - 2b + 1) + + .p2align 1 +@open coded global, manually relaxed to IE + ldr r0, 1f +2: + add r0, pc + ldr r1, [r0] + mov r0, r1 + nop + .p2align 2 +1: .word gd1(gottpoff) + (. - 2b - 4) + + .p2align 1 +@open coded global, should relax to IE + ldr r0, 1f +2: +.tlsdescseq gd1 + add r0, pc +.tlsdescseq gd1 + ldr r1, [r0,#4] +.tlsdescseq gd1 + blx r1 + nop + .p2align 2 +1: .word gd1(tlsdesc) + (. - 2b + 1) + + .p2align 1 +@open coded local, manually relaxed to LE + ldr r0, 1f +2: + nop + nop + nop + nop + .p2align 2 +1: .word ld1(tpoff) + + .p2align 1 +@open coded local, should relax to LE + ldr r0, 1f +2: +.tlsdescseq ld1 + add r0, pc +.tlsdescseq ld1 + ldr r1, [r0,#4] +.tlsdescseq ld1 + blx r1 + nop + .p2align 2 +1: .word ld1(tlsdesc) + (. - 2b + 1) + + .section .tdata,"awT" + .global gd1 +gd1: .space 4 +ld1: .space 4 + .globl r1 +r1: .space 4 +r0: .space 4 |