mirror of
https://github.com/fluencelabs/musl
synced 2025-06-10 13:31:37 +00:00
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.
This commit is contained in:
@ -12,15 +12,18 @@ __clone:
|
||||
lw $6, 16($sp)
|
||||
lw $7, 20($sp)
|
||||
lw $9, 24($sp)
|
||||
subu $sp, $sp, 16
|
||||
sw $9, 16($sp)
|
||||
li $2, 4120
|
||||
syscall
|
||||
beq $7, $0, 1f
|
||||
nop
|
||||
addu $sp, $sp, 16
|
||||
jr $ra
|
||||
subu $2, $0, $2
|
||||
1: beq $2, $0, 1f
|
||||
nop
|
||||
addu $sp, $sp, 16
|
||||
jr $ra
|
||||
nop
|
||||
1: lw $25, 0($sp)
|
||||
|
Reference in New Issue
Block a user