| .section ".tdata", "awT", @progbits |
| .global sg1, sg2, sg3, sg4, sg5, sg6, sg7, sg8 |
| .global sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 |
| .hidden sh1, sh2, sh3, sh4, sh5, sh6, sh7, sh8 |
| .align 4 |
| sg1: .long 17 |
| sg2: .long 18 |
| sg3: .long 19 |
| sg4: .long 20 |
| sg5: .long 21 |
| sg6: .long 22 |
| sg7: .long 23 |
| sg8: .long 24 |
| sl1: .long 65 |
| sl2: .long 66 |
| sl3: .long 67 |
| sl4: .long 68 |
| sl5: .long 69 |
| sl6: .long 70 |
| sl7: .long 71 |
| sl8: .long 72 |
| sh1: .long 157 |
| sh2: .long 158 |
| sh3: .long 159 |
| sh4: .long 160 |
| sh5: .long 161 |
| sh6: .long 162 |
| sh7: .long 163 |
| sh8: .long 164 |
| |
| .text |
| .global _start |
| .type _start, @function |
| _start: |
| entry sp, 32 |
| |
| /* GD -> IE because variable is not defined in executable */ |
| movi a8, sG1@tlsfunc |
| movi a10, sG1@tlsarg |
| callx8.tls a8, sG1@tlscall |
| |
| /* GD -> IE because variable is not defined in executable where |
| the variable is referenced through IE too */ |
| movi a8, sG2@tlsfunc |
| movi a10, sG2@tlsarg |
| callx8.tls a8, sG2@tlscall |
| |
| /* GD -> LE with global variable defined in executable */ |
| movi a8, sg1@tlsfunc |
| movi a10, sg1@tlsarg |
| callx8.tls a8, sg1@tlscall |
| |
| /* GD -> LE with local variable defined in executable */ |
| movi a8, sl1@tlsfunc |
| movi a10, sl1@tlsarg |
| callx8.tls a8, sl1@tlscall |
| |
| /* GD -> LE with hidden variable defined in executable */ |
| movi a8, sh1@tlsfunc |
| movi a10, sh1@tlsarg |
| callx8.tls a8, sh1@tlscall |
| |
| /* LD -> LE */ |
| movi a8, _TLS_MODULE_BASE_@tlsfunc |
| movi a10, _TLS_MODULE_BASE_@tlsarg |
| callx8.tls a8, _TLS_MODULE_BASE_@tlscall |
| movi a12, 1+sl1@dtpoff |
| add a12, a12, a10 |
| movi a13, sl2@dtpoff+2 |
| add a13, a13, a10 |
| |
| /* LD -> LE against hidden variables */ |
| movi a12, sh1@dtpoff |
| add a12, a12, a10 |
| movi a13, 3+sh2@dtpoff |
| add a13, a13, a10 |
| |
| /* IE against global var */ |
| rur a2, THREADPTR |
| movi a3, sG2@tpoff |
| add a3, a3, a2 |
| |
| /* IE -> LE against global var defined in exec */ |
| rur a4, THREADPTR |
| movi a5, sg1@tpoff |
| add a5, a5, a4 |
| |
| /* IE -> LE against local var */ |
| rur a6, THREADPTR |
| movi a7, sl1@tpoff |
| add a7, a7, a6 |
| |
| /* IE -> LE against hidden var */ |
| rur a8, THREADPTR |
| movi a9, sh1@tpoff |
| add a9, a9, a8 |
| |
| retw |