Commit Graph
12 Commits
Author SHA1 Message Date
Rich Felker ce3688eca9 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.
2015-06-20 02:54:30 +00:00
Rich Felker 7b75c4877d mark mips cancellable syscall code as code
otherwise disassemblers treat it as data.
2015-05-25 15:56:36 -04:00
Rich Felker cbc02ba23c consistently use hidden visibility for cancellable syscall internals
in a few places, non-hidden symbols were referenced from asm in ways
that assumed ld-time binding. while these is no semantic reason these
symbols need to be hidden, fixing the references without making them
hidden was going to be ugly, and hidden reduces some bloat anyway.

in the asm files, .global/.hidden directives have been moved to the
top to unclutter the actual code.
2015-04-14 11:18:59 -04:00
Rich Felker f409338a9e prepare cancellation syscall asm for possibility of __cancel returning 2015-02-20 20:25:35 -05:00
Rich Felker cffb9e1ee2 fix clobbering of caller's stack in mips __clone function
this was resulting in crashes in posix_spawn on mips, and would have
affected applications calling clone too. since the prototype for
__clone has it as a variadic function, it may not assume that 16($sp)
is writable for use in making the syscall. instead, it needs to
allocate additional stack space, and then adjust the stack pointer
back in both of the code paths for the parent process/thread.
2013-09-16 11:52:39 -04:00
Rich Felker bfba15c9b9 fix child stack alignment on mips clone
unlike other archs, the mips version of clone was not doing anything
to align the stack pointer. this seems to have been the cause for some
SIGBUS crashes that were observed in posix_spawn.
2013-09-14 19:19:11 -04:00
Rich Felker 881868382a update mips cancellation-point syscall asm with 7-arg and r25 fixes
these fixes were already made to the normal syscall asm but not the
cancellation point version.
2012-09-15 02:24:12 -04:00
Rich Felker be48e22b42 fix mips syscall_cp_asm code (saved register usage) 2012-09-09 00:59:30 -04:00
Rich Felker a03f69d445 mips clone: don't free stack space used to copy arg
the mips abi reserves stack space equal to the size of the in-register
args for the callee to save the args, if desired. this would cause the
beginning of the thread structure to be clobbered...
2012-07-11 23:01:09 -04:00
Rich Felker b58f738bcb fix mips clone() on real linux kernel
the old code worked in qemu app-level emulation, but not on real
kernels where the clone syscall does not copy the register values to
the new thread. save arguments on the new thread stack instead.
2012-07-11 22:59:43 -04:00
Rich Felker 715b6403ce fix clone() on mips (args were in wrong order)
with this change, threads on mips seem to be working
2012-07-11 20:44:38 -04:00
Rich Felker 5c94367a9b first attempt at making threads work on mips 2012-07-11 11:35:27 -04:00