Browse Source

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.
Segev Finer 6 years ago
parent
commit
8b2b61e000
3 changed files with 12 additions and 3 deletions
  1. 4 1
      src/thread/mips/clone.s
  2. 4 1
      src/thread/mips64/clone.s
  3. 4 1
      src/thread/mipsn32/clone.s

+ 4 - 1
src/thread/mips/clone.s

@@ -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

+ 4 - 1
src/thread/mips64/clone.s

@@ -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

+ 4 - 1
src/thread/mipsn32/clone.s

@@ -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