summaryrefslogtreecommitdiff
path: root/ld/testsuite/ld-sparc/tlspie32.s
diff options
context:
space:
mode:
Diffstat (limited to 'ld/testsuite/ld-sparc/tlspie32.s')
-rw-r--r--ld/testsuite/ld-sparc/tlspie32.s62
1 files changed, 56 insertions, 6 deletions
diff --git a/ld/testsuite/ld-sparc/tlspie32.s b/ld/testsuite/ld-sparc/tlspie32.s
index 4d38d307cb6..931aa53f0c9 100644
--- a/ld/testsuite/ld-sparc/tlspie32.s
+++ b/ld/testsuite/ld-sparc/tlspie32.s
@@ -1,20 +1,70 @@
- .section ".text"
- .global tls_gd
.section .tbss,"awT",@nobits
+ .global tls_gd
.align 4
.type tls_gd, #object
.size tls_gd, 4
tls_gd:
.skip 4
+ .global tls_ld
+ .align 4
+ .type tls_ld, #object
+ .size tls_ld, 4
+tls_ld:
+ .skip 4
+ .global tls_ie
+ .align 4
+ .type tls_ie, #object
+ .size tls_ie, 4
+tls_ie:
+ .skip 4
.section ".text"
+.LLGETPC0:
+ retl
+ add %o7, %l7, %l7
.align 4
- .global get_gdp
- .type get_gdp, #function
+ .global foo
+ .type foo, #function
.proc 0104
-get_gdp:
+foo:
+ save %sp, -104, %sp
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7
+ call .LLGETPC0
+ add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7
+ nop;nop;nop;nop
+
+ /* GD -> IE with global variable not defined in executable */
+ sethi %tgd_hi22(sG1), %g1
+ add %g1, %tgd_lo10(sG1), %g1
+ add %l7, %g1, %o0, %tgd_add(sG1)
+ call __tls_get_addr, %tgd_call(sG1)
+ nop
+ nop;nop;nop;nop
+
+ /* GD -> LE with global variable defined in executable */
sethi %tgd_hi22(tls_gd), %g1
add %g1, %tgd_lo10(tls_gd), %g1
add %l7, %g1, %o0, %tgd_add(tls_gd)
call __tls_get_addr, %tgd_call(tls_gd)
nop
- .size get_gdp, .-get_gdp
+ nop;nop;nop;nop
+
+ /* LD -> LE with global variable defined in executable */
+ sethi %tldm_hi22(tls_ld), %g1
+ add %g1, %tldm_lo10(tls_ld), %g1
+ add %l7, %g1, %o0, %tldm_add(tls_ld)
+ call __tls_get_addr, %tldm_call(tls_ld)
+ nop
+ sethi %tldo_hix22(tls_ld), %g1
+ xor %g1, %tldo_lox10(tls_ld), %g1
+ add %o0, %g1, %g1, %tldo_add(tls_ld)
+ nop;nop;nop;nop
+
+ /* IE -> LE with global variable defined in executable */
+ sethi %tie_hi22(tls_ie), %g1
+ add %g1, %tie_lo10(tls_ie), %g1
+ ld [%l7 + %g1], %g1, %tie_ld(tls_ie)
+ add %g7, %g1, %g1, %tie_add(tls_ie)
+ nop;nop;nop;nop
+
+ ret
+ restore