1 .file 1 "tls.s" 2 .abicalls 3 .text 4 .align 2 5 .globl fn 6 .ent fn 7 .type fn,@function 8fn: 9 .frame $fp,16,$31 10 .mask 0x40000000,-8 11 .fmask 0x00000000,0 12 .set noreorder 13 .cpload $25 14 .set reorder 15 addiu $sp,$sp,-16 16 sw $fp,8($sp) 17 move $fp,$sp 18 .cprestore 0 19 20 # General Dynamic 21 lw $25,%call16(__tls_get_addr)($28) 22 addiu $4,$28,%tlsgd(tlsvar_gd) 23 jal $25 24 25 # Local Dynamic 26 lw $25,%call16(__tls_get_addr)($28) 27 addiu $4,$28,%tlsldm(tlsvar_ld) 28 jal $25 29 30 move $2,$2 # Arbitrary instructions 31 32 lui $3,%dtprel_hi(tlsvar_ld) 33 addiu $3,$3,%dtprel_lo(tlsvar_ld) 34 addu $3,$3,$2 35 36 # Initial Exec 37 .set push 38 .set mips32r2 39 rdhwr $2, $5 40 .set pop 41 lw $3,%gottprel(tlsvar_ie)($28) 42 addu $3,$3,$2 43 44 # Local Exec 45 .set push 46 .set mips32r2 47 rdhwr $2, $5 48 .set pop 49 lui $3,%tprel_hi(tlsvar_le) 50 ori $3,$3,%tprel_lo(tlsvar_le) 51 addu $3,$3,$2 52 53 move $sp,$fp 54 lw $fp,8($sp) 55 addiu $sp,$sp,16 56 j $31 57 .end fn 58 59 .section .tbss,"awT",@nobits 60 .align 2 61 .global tlsvar_gd 62 .type tlsvar_gd,@object 63 .size tlsvar_gd,4 64tlsvar_gd: 65 .space 4 66 .global tlsvar_ie 67 .type tlsvar_ie,@object 68 .size tlsvar_ie,4 69tlsvar_ie: 70 .space 4 71 72 .section .tdata,"awT" 73 .align 2 74 .global tlsvar_ld 75 .hidden tlsvar_ld 76 .type tlsvar_ld,@object 77 .size tlsvar_ld,4 78tlsvar_ld: 79 .word 1 80 .global tlsvar_le 81 .hidden tlsvar_le 82 .type tlsvar_le,@object 83 .size tlsvar_le,4 84tlsvar_le: 85 .word 1 86