linux kernel commit
46e12c07b3b9603c60fc1d421ff18618241cb081 caused
the mips syscall mechanism to fail with EFAULT when the userspace
stack pointer is invalid, breaking __unmapself used for detached
thread exit. the workaround is to set $sp to a known-valid, readable
address, and the simplest one to obtain is the address of the current
function, which is available (per o32 calling convention) in $25.
.global __unmapself
.type __unmapself,@function
__unmapself:
+ move $sp, $25
li $2, 4091
syscall
li $4, 0