diff options
Diffstat (limited to 'ld/testsuite/ld-sparc/tlssunbin64.s')
-rw-r--r-- | ld/testsuite/ld-sparc/tlssunbin64.s | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/ld/testsuite/ld-sparc/tlssunbin64.s b/ld/testsuite/ld-sparc/tlssunbin64.s new file mode 100644 index 0000000..bb62610 --- /dev/null +++ b/ld/testsuite/ld-sparc/tlssunbin64.s @@ -0,0 +1,118 @@ + .section ".tbss" + .align 4 + .globl bg1, bg2, bg3, bg4, bg5, bg6, bg7, bg8 +bg1: .word 0 +bg2: .word 0 +bg3: .word 0 +bg4: .word 0 +bg5: .word 0 +bg6: .word 0 +bg7: .word 0 +bg8: .word 0 +bl1: .word 0 +bl2: .word 0 +bl3: .word 0 +bl4: .word 0 +bl5: .word 0 +bl6: .word 0 +bl7: .word 0 +bl8: .word 0 + .text + .globl _start + .type _start,#function + .proc 04 +_start: + save %sp, -160, %sp + .hidden _GLOBAL_OFFSET_TABLE_ + sethi %hh(_GLOBAL_OFFSET_TABLE_), %l1 + sethi %lm(_GLOBAL_OFFSET_TABLE_), %l2 + or %l1, %hm(_GLOBAL_OFFSET_TABLE_), %l1 + or %l2, %lo(_GLOBAL_OFFSET_TABLE_), %l2 + sllx %l1, 32, %l1 + add %l1, %l2, %l4 + nop;nop;nop;nop + + /* IE against global var */ + sethi %tie_hi22(sG6), %o3 + add %o3, %tie_lo10(sG6), %o3 + ldx [%l4 + %o3], %o2, %tie_ldx(sG6) + add %g7, %o2, %o4, %tie_add(sG6) + nop;nop;nop;nop + + /* IE -> LE against global var defined in exec */ + sethi %tie_hi22(bg6), %o3 + add %o3, %tie_lo10(bg6), %o5 + ldx [%l4 + %o5], %o2, %tie_ldx(bg6) + add %g7, %o2, %o4, %tie_add(bg6) + nop;nop;nop;nop + + /* IE -> LE against local var */ + sethi %tie_hi22(bl6), %o3 + add %o3, %tie_lo10(bl6), %o5 + ldx [%l4 + %o5], %l2, %tie_ldx(bl6) + add %g7, %l2, %l2, %tie_add(bl6) + nop;nop;nop;nop + + /* direct %g7 access IE -> LE against local var */ + sethi %tie_hi22(bl8), %o3 + add %o3, %tie_lo10(bl8), %o5 + ldx [%l4 + %o5], %l2, %tie_ldx(bl8) + ldsw [%g7 + %l2], %l2, %tie_add(bl8) + nop;nop;nop;nop + + /* IE -> LE against hidden but not local var */ + sethi %tie_hi22(sh6), %o3 + add %o3, %tie_lo10(sh6), %o5 + ldx [%l4 + %o5], %l2, %tie_ldx(sh6) + add %g7, %l2, %l2, %tie_add(sh6) + nop;nop;nop;nop + + /* direct %g7 access IE -> LE against hidden but not local var */ + sethi %tie_hi22(bl8), %o3 + add %o3, %tie_lo10(bl8), %o5 + ldx [%l4 + %o5], %l2, %tie_ldx(bl8) + stb %l1, [%g7 + %l2], %tie_add(bl8) + nop;nop;nop;nop + + /* LE, global var defined in exec */ + sethi %tle_hix22(sg2), %l1 + nop + xor %l1, %tle_lox10(sg2), %l2 + nop + add %g7, %l2, %l3 + nop;nop;nop;nop + + /* LE, local var */ + sethi %tle_hix22(bl2+2), %o0 + xor %o0, %tle_lox10(bl2+2), %o0 + add %g7, %o0, %o0 + nop;nop;nop;nop + + /* LE, hidden var defined in exec */ + sethi %tle_hix22(sh2+1), %l1 + xor %l1, %tle_lox10(sh2+1), %o5 + add %g7, %o5, %o1 + nop;nop;nop;nop + + /* Direct %g7 access */ + + /* LE, global var defined in exec */ + sethi %tle_hix22(sg3), %l1 + xor %l1, %tle_lox10(sg3), %o5 + ldx [%g7 + %o5], %o1 + nop;nop;nop;nop + + /* LE, local var */ + sethi %tle_hix22(bl3 + 3), %o0 + xor %o0, %tle_lox10(bl3 + 3), %o0 + stb %o1, [%g7 + %o0] + nop;nop;nop;nop + + /* LE, hidden var defined in exec */ + sethi %tle_hix22(sh3 + 3), %o2 + xor %o2, %tle_lox10(sh3 + 3), %o4 + ldstub [%g7 + %o4], %o5 + nop;nop;nop;nop + + ret + restore |