There is an assumption that the function executed in child thread
created by runtime.close should not return. And different systems
enforce that differently: some exit that thread, some exit the
whole process.
The test TestNewOSProc0 introduced in CL 9161 breaks that assumption,
so we need to adjust the code to only exit the thread should the
called function return.
Change-Id: Id631cb2f02ec6fbd765508377a79f3f96c6a2ed6
Reviewed-on: https://go-review.googlesource.com/9246
Reviewed-by: Dave Cheney <dave@cheney.net>
// Call fn
CALL R12
- // It shouldn't return. If it does, exit
+ // It shouldn't return. If it does, exit that thread.
MOVL $111, DI
MOVL $60, AX
SYSCALL
MOVW $16(R13), R13
BL (R0)
- // It shouldn't return
+ // It shouldn't return. If it does, exit that thread.
MOVW $0, R0
MOVW R0, 4(R13)
BL runtime·exit1(SB)
MOVD R12, R0
BL (R0)
- // It shouldn't return. If it does, exit
+ // It shouldn't return. If it does, exit that thread.
MOVW $111, R0
again:
- MOVD $SYS_exit_group, R8
+ MOVD $SYS_exit, R8
SVC
B again // keep exiting
MOVD R12, CTR
BL (CTR)
- // It shouldn't return. If it does, exit
+ // It shouldn't return. If it does, exit that thread.
MOVW $111, R3
- SYSCALL $SYS_exit_group
+ SYSCALL $SYS_exit
BR -2(PC) // keep exiting
TEXT runtime·sigaltstack(SB),NOSPLIT,$-8