| .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 |