mips archs: fix runaway execution if start fn passed to clone returns
Call SYS_exit on return from fn in __clone. This is the expected behavior of this function. Without this the child task will crash on return from fn, since it will return to nowhere.
This commit is contained in:
@@ -28,5 +28,8 @@ __clone:
|
||||
nop
|
||||
1: lw $25, 0($sp)
|
||||
lw $4, 4($sp)
|
||||
jr $25
|
||||
jalr $25
|
||||
nop
|
||||
move $4, $2
|
||||
li $2, 4001
|
||||
syscall
|
||||
|
||||
@@ -26,5 +26,8 @@ __clone:
|
||||
nop
|
||||
1: ld $25, 0($sp) # function pointer
|
||||
ld $4, 8($sp) # argument pointer
|
||||
jr $25 # call the user's function
|
||||
jalr $25 # call the user's function
|
||||
nop
|
||||
move $4, $2
|
||||
li $2, 5058
|
||||
syscall
|
||||
|
||||
@@ -26,5 +26,8 @@ __clone:
|
||||
nop
|
||||
1: lw $25, 0($sp) # function pointer
|
||||
lw $4, 4($sp) # argument pointer
|
||||
jr $25 # call the user's function
|
||||
jalr $25 # call the user's function
|
||||
nop
|
||||
move $4, $2
|
||||
li $2, 6058
|
||||
syscall
|
||||
|
||||
Reference in New Issue
Block a user