1 .data 2 .align 4096 3 .section ".tdata", #alloc, #write, #tls 4 .align 4 5 .globl sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8 6 .globl sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 7 .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 8sg1: .word 17 9sg2: .word 18 10sg3: .word 19 11sg4: .word 20 12sg5: .word 21 13sg6: .word 22 14sg7: .word 23 15sg8: .word 24 16sl1: .word 65 17sl2: .word 66 18sl3: .word 67 19sl4: .word 68 20sl5: .word 69 21sl6: .word 70 22sl7: .word 71 23sl8: .word 72 24sh1: .word 257 25sh2: .word 258 26sh3: .word 259 27sh4: .word 260 28sh5: .word 261 29sh6: .word 262 30sh7: .word 263 31sh8: .word 264 32 33 .text 34 .align 4096 35.LLGETPC0: 36 retl 37 add %o7, %l7, %l7 38 39 .globl fn1 40 .type fn1,#function 41 .proc 04 42fn1: 43 save %sp, -104, %sp 44 sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %l7 45 call .LLGETPC0 46 add %l7, %lo(_GLOBAL_OFFSET_TABLE_+4), %l7 47 nop;nop;nop;nop 48 49 /* GD */ 50 sethi %tgd_hi22(sg1), %l1 51 nop 52 add %l1, %tgd_lo10(sg1), %l2 53 nop 54 add %l7, %l2, %o0, %tgd_add(sg1) 55 nop 56 call __tls_get_addr, %tgd_call(sg1) 57 nop 58 nop;nop;nop;nop 59 60 /* GD -> IE because variable is referenced through IE too */ 61 sethi %tgd_hi22(sg2), %o0 62 add %o0, %tgd_lo10(sg2), %o1 63 add %l7, %o1, %o0, %tgd_add(sg2) 64 call __tls_get_addr, %tgd_call(sg2) 65 nop 66 nop;nop;nop;nop 67 68 /* GD against local variable */ 69 sethi %tgd_hi22(sl1), %o4 70 add %o4, %tgd_lo10(sl1), %o4 71 add %l7, %o4, %o0, %tgd_add(sl1) 72 call __tls_get_addr, %tgd_call(sl1) 73 nop 74 nop;nop;nop;nop 75 76 /* GD -> IE against local variable referenced through IE too */ 77 sethi %tgd_hi22(sl2), %o0 78 add %o0, %tgd_lo10(sl2), %o0 79 add %l7, %o0, %o0, %tgd_add(sl2) 80 call __tls_get_addr, %tgd_call(sl2) 81 nop 82 nop;nop;nop;nop 83 84 /* GD against hidden and local variable */ 85 sethi %tgd_hi22(sh1), %o4 86 add %o4, %tgd_lo10(sh1), %o4 87 add %l7, %o4, %o0, %tgd_add(sh1) 88 call __tls_get_addr, %tgd_call(sh1) 89 nop 90 nop;nop;nop;nop 91 92 /* GD -> IE against hidden and local variable referenced through 93 IE too */ 94 sethi %tgd_hi22(sh2), %o0 95 add %o0, %tgd_lo10(sh2), %o0 96 add %l7, %o0, %o0, %tgd_add(sh2) 97 call __tls_get_addr, %tgd_call(sh2) 98 nop 99 nop;nop;nop;nop 100 101 /* GD against hidden but not local variable */ 102 sethi %tgd_hi22(sH1), %o4 103 add %o4, %tgd_lo10(sH1), %o4 104 add %l7, %o4, %o0, %tgd_add(sH1) 105 call __tls_get_addr, %tgd_call(sH1) 106 nop 107 nop;nop;nop;nop 108 109 /* GD -> IE against hidden but not local variable referenced through 110 IE too */ 111 sethi %tgd_hi22(sH2), %o0 112 add %o0, %tgd_lo10(sH2), %o0 113 add %l7, %o0, %o0, %tgd_add(sH2) 114 call __tls_get_addr, %tgd_call(sH2) 115 nop 116 nop;nop;nop;nop 117 118 /* LD */ 119 sethi %tldm_hi22(sl1), %l1 120 nop 121 add %l1, %tldm_lo10(sl1), %l2 122 nop 123 add %l7, %l2, %o0, %tldm_add(sl1) 124 nop 125 call __tls_get_addr, %tldm_call(sl1) 126 nop 127 sethi %tldo_hix22(sl1), %l3 128 nop 129 xor %l3, %tldo_lox10(sl1), %l4 130 nop 131 add %o0, %l4, %l5, %tldo_add(sl1) 132 nop 133 sethi %tldo_hix22(sl2 + 2), %l2 134 nop 135 xor %l2, %tldo_lox10(sl2 + 2), %l3 136 nop 137 lduh [%o0 + %l3], %l6, %tldo_add(sl2 + 2) 138 nop;nop;nop;nop 139 140 /* LD against hidden and local variables */ 141 sethi %tldm_hi22(sh1), %o1 142 sethi %tldo_hix22(sh1), %l3 143 add %o1, %tldm_lo10(sh1), %o2 144 sethi %tldo_hix22(sh2 + 1), %l2 145 add %l7, %o2, %o0, %tldm_add(sh1) 146 xor %l3, %tldo_lox10(sh1), %l4 147 call __tls_get_addr, %tldm_call(sh1) 148 xor %l2, %tldo_lox10(sh2 + 1), %l3 149 add %o0, %l4, %l5, %tldo_add(sh1) 150 ldub [%o0 + %l3], %l6, %tldo_add(sh2 + 1) 151 nop;nop;nop;nop 152 153 /* LD against hidden but not local variables */ 154 sethi %tldm_hi22(sH1), %o1 155 sethi %tldo_hix22(sH1 + 3), %l3 156 add %o1, %tldm_lo10(sH1), %o2 157 sethi %tldo_hix22(sH2), %l2 158 add %l7, %o2, %o0, %tldm_add(sH1) 159 xor %l3, %tldo_lox10(sH1 + 3), %l4 160 call __tls_get_addr, %tldm_call(sH1) 161 xor %l2, %tldo_lox10(sH2), %l3 162 add %o0, %l4, %l5, %tldo_add(sH1 + 3) 163 ld [%o0 + %l3], %l6, %tldo_add(sH2) 164 nop;nop;nop;nop 165 166 /* IE against global var */ 167 sethi %tie_hi22(sg2), %l1 168 nop 169 add %l1, %tie_lo10(sg2), %l2 170 nop 171 ld [%l7 + %l2], %l2, %tie_ld(sg2) 172 nop 173 add %g7, %l2, %l2, %tie_add(sg2) 174 nop;nop;nop;nop 175 176 /* IE against local var */ 177 sethi %tie_hi22(sl2), %o3 178 add %o3, %tie_lo10(sl2), %o3 179 ld [%l7 + %o3], %o2, %tie_ld(sl2) 180 add %g7, %o2, %o4, %tie_add(sl2) 181 nop;nop;nop;nop 182 183 /* IE against hidden and local var */ 184 sethi %tie_hi22(sh2), %l1 185 add %l1, %tie_lo10(sh2), %l2 186 ld [%l7 + %l2], %l2, %tie_ld(sh2) 187 add %g7, %l2, %l2, %tie_add(sh2) 188 nop;nop;nop;nop 189 190 /* IE against hidden but not local var */ 191 sethi %tie_hi22(sH2), %l1 192 add %l1, %tie_lo10(sH2), %l2 193 ld [%l7 + %l2], %l2, %tie_ld(sH2) 194 add %g7, %l2, %l2, %tie_add(sH2) 195 nop;nop;nop;nop 196 197 /* Direct access through %g7 */ 198 199 /* IE against global var */ 200 sethi %tie_hi22(sg5), %l1 201 add %l1, %tie_lo10(sg5), %l2 202 ld [%l7 + %l2], %l2, %tie_ld(sg5) 203 ld [%g7 + %l2], %l2, %tie_add(sg5) 204 nop;nop;nop;nop 205 206 /* IE against local var */ 207 sethi %tie_hi22(sl5), %o3 208 add %o3, %tie_lo10(sl5), %o4 209 ld [%l7 + %o4], %o5, %tie_ld(sl5) 210 stb %l2, [%g7 + %o5], %tie_add(sl5) 211 nop;nop;nop;nop 212 213 /* IE against hidden and local var */ 214 sethi %tie_hi22(sh5), %o3 215 add %o3, %tie_lo10(sh5), %o4 216 ld [%l7 + %o4], %o5, %tie_ld(sh5) 217 lduh [%g7 + %o5], %l2, %tie_add(sh5) 218 nop;nop;nop;nop 219 220 /* IE against hidden but not local var */ 221 sethi %tie_hi22(sH5), %o3 222 add %o3, %tie_lo10(sH5), %o4 223 ld [%l7 + %o4], %o5, %tie_ld(sH5) 224 st %l2, [%g7 + %o5], %tie_add(sH5) 225 nop;nop;nop;nop 226 227 ret 228 restore 229