work around mips detached thread exit breakage due to kernel regression
[musl] / src / thread / mips / clone.s
1 .set noreorder
2 .global __clone
3 .type   __clone,@function
4 __clone:
5         # Save function pointer and argument pointer on new thread stack
6         and $5, $5, -8
7         subu $5, $5, 16
8         sw $4, 0($5)
9         sw $7, 4($5)
10         # Shuffle (fn,sp,fl,arg,ptid,tls,ctid) to (fl,sp,ptid,tls,ctid)
11         move $4, $6
12         lw $6, 16($sp)
13         lw $7, 20($sp)
14         lw $9, 24($sp)
15         subu $sp, $sp, 16
16         sw $9, 16($sp)
17         li $2, 4120
18         syscall
19         beq $7, $0, 1f
20         nop
21         addu $sp, $sp, 16
22         jr $ra
23         subu $2, $0, $2
24 1:      beq $2, $0, 1f
25         nop
26         addu $sp, $sp, 16
27         jr $ra
28         nop
29 1:      lw $25, 0($sp)
30         lw $4, 4($sp)
31         jr $25
32         nop