mirror of
https://github.com/golang/go
synced 2024-11-12 10:20:27 -07:00
runtime: save context value in NetBSD sigtramp
On NetBSD a signal handler returns to the kernel by calling the setcontext system call with the context passed to the signal handler. The implementation of runtime·sigreturn_tramp for amd64, copied from the NetBSD libc, expects that context address to be in r15. That works in the NetBSD libc because r15 is preserved across the call to the signal handler. It fails in the Go library because r15 is not preserved. There are various ways to fix this; this one uses the simple approach, essentially identical to the one in the NetBSD libc, of preserving r15 across the signal handler proper. Looking at the code for 386 and arm suggests that they are OK. However, I have not actually tested them. Update #14052. Change-Id: I2b516b1d05fe5d3b8911e65ca761d621dc37fa1b Reviewed-on: https://go-review.googlesource.com/18815 Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
This commit is contained in:
parent
4c4476c297
commit
123510bf83
@ -245,11 +245,13 @@ TEXT runtime·sigfwd(SB),NOSPLIT,$0-32
|
|||||||
CALL AX
|
CALL AX
|
||||||
RET
|
RET
|
||||||
|
|
||||||
TEXT runtime·sigtramp(SB),NOSPLIT,$24
|
TEXT runtime·sigtramp(SB),NOSPLIT,$32
|
||||||
MOVQ DI, 0(SP) // signum
|
MOVQ DI, 0(SP) // signum
|
||||||
MOVQ SI, 8(SP) // info
|
MOVQ SI, 8(SP) // info
|
||||||
MOVQ DX, 16(SP) // ctx
|
MOVQ DX, 16(SP) // ctx
|
||||||
|
MOVQ R15, 24(SP) // for sigreturn
|
||||||
CALL runtime·sigtrampgo(SB)
|
CALL runtime·sigtrampgo(SB)
|
||||||
|
MOVQ 24(SP), R15
|
||||||
RET
|
RET
|
||||||
|
|
||||||
TEXT runtime·mmap(SB),NOSPLIT,$0
|
TEXT runtime·mmap(SB),NOSPLIT,$0
|
||||||
|
Loading…
Reference in New Issue
Block a user