From: Rich Felker Date: Sat, 20 Jun 2015 02:54:30 +0000 (+0000) Subject: work around mips detached thread exit breakage due to kernel regression X-Git-Tag: v1.1.11~32 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ce3688eca920aa77549323f84e21f33522397115;p=musl work around mips detached thread exit breakage due to kernel regression 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. --- diff --git a/src/thread/mips/__unmapself.s b/src/thread/mips/__unmapself.s index 9aa03712..ba139dc8 100644 --- a/src/thread/mips/__unmapself.s +++ b/src/thread/mips/__unmapself.s @@ -2,6 +2,7 @@ .global __unmapself .type __unmapself,@function __unmapself: + move $sp, $25 li $2, 4091 syscall li $4, 0