Commit 334291d1 authored by Austin Clements's avatar Austin Clements

runtime: M-targeted signals for Linux

We'll add a test once all of the POSIX platforms are done.

For #10958, #24543.

Change-Id: If7e3f14e8391791364877629bf415d9f8e788b0a
Reviewed-on: https://go-review.googlesource.com/c/go/+/201401
Run-TryBot: Austin Clements <austin@google.com>
Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
parent 3706cd85
......@@ -332,7 +332,9 @@ func gettid() uint32
func minit() {
minitSignals()
// for debuggers, in case cgo created the thread
// Cgo-created threads and the bootstrap m are missing a
// procid. We need this for asynchronous preemption and its
// useful in debuggers.
getg().m.procid = uint64(gettid())
}
......@@ -454,3 +456,11 @@ func sysSigaction(sig uint32, new, old *sigactiont) {
// rt_sigaction is implemented in assembly.
//go:noescape
func rt_sigaction(sig uintptr, new, old *sigactiont, size uintptr) int32
func getpid() int
func tgkill(tgid, tid, sig int)
// signalM sends a signal to mp.
func signalM(mp *m, sig int) {
tgkill(getpid(), int(mp.procid), sig)
}
......@@ -188,6 +188,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT,$12
INVOKE_SYSCALL
RET
TEXT ·getpid(SB),NOSPLIT,$0-4
MOVL $SYS_getpid, AX
INVOKE_SYSCALL
MOVL AX, ret+0(FP)
RET
TEXT ·tgkill(SB),NOSPLIT,$0
MOVL $SYS_tgkill, AX
MOVL tgid+0(FP), BX
MOVL tid+4(FP), CX
MOVL sig+8(FP), DX
INVOKE_SYSCALL
RET
TEXT runtime·setitimer(SB),NOSPLIT,$0-12
MOVL $SYS_setittimer, AX
MOVL mode+0(FP), BX
......
......@@ -171,6 +171,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT,$0
SYSCALL
RET
TEXT ·getpid(SB),NOSPLIT,$0-8
MOVL $SYS_getpid, AX
SYSCALL
MOVQ AX, ret+0(FP)
RET
TEXT ·tgkill(SB),NOSPLIT,$0
MOVQ tgid+0(FP), DI
MOVQ tid+8(FP), SI
MOVQ sig+16(FP), DX
MOVL $SYS_tgkill, AX
SYSCALL
RET
TEXT runtime·setitimer(SB),NOSPLIT,$0-24
MOVL mode+0(FP), DI
MOVQ new+8(FP), SI
......
......@@ -172,6 +172,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT|NOFRAME,$0
SWI $0
RET
TEXT ·getpid(SB),NOSPLIT,$0-4
MOVW $SYS_getpid, R7
SWI $0
MOVW R0, ret+0(FP)
RET
TEXT ·tgkill(SB),NOSPLIT,$0-12
MOVW tgid+0(FP), R0
MOVW tid+4(FP), R1
MOVW sig+8(FP), R2
MOVW $SYS_tgkill, R7
SWI $0
RET
TEXT runtime·mmap(SB),NOSPLIT,$0
MOVW addr+0(FP), R0
MOVW n+4(FP), R1
......
......@@ -175,6 +175,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT|NOFRAME,$0
SVC
RET
TEXT ·getpid(SB),NOSPLIT|NOFRAME,$0-8
MOVD $SYS_getpid, R8
SVC
MOVD R0, ret+0(FP)
RET
TEXT ·tgkill(SB),NOSPLIT,$0-24
MOVD tgid+0(FP), R0
MOVD tid+8(FP), R1
MOVD sig+16(FP), R2
MOVD $SYS_tgkill, R8
SVC
RET
TEXT runtime·setitimer(SB),NOSPLIT|NOFRAME,$0-24
MOVW mode+0(FP), R0
MOVD new+8(FP), R1
......
......@@ -177,6 +177,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT|NOFRAME,$0
SYSCALL
RET
TEXT ·getpid(SB),NOSPLIT|NOFRAME,$0-8
MOVV $SYS_getpid, R2
SYSCALL
MOVV R2, ret+0(FP)
RET
TEXT ·tgkill(SB),NOSPLIT|NOFRAME,$0-24
MOVV tgid+0(FP), R4
MOVV tid+8(FP), R5
MOVV sig+16(FP), R6
MOVV $SYS_tgkill, R2
SYSCALL
RET
TEXT runtime·setitimer(SB),NOSPLIT|NOFRAME,$0-24
MOVW mode+0(FP), R4
MOVV new+8(FP), R5
......
......@@ -183,6 +183,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT,$0
SYSCALL
RET
TEXT ·getpid(SB),NOSPLIT,$0-4
MOVW $SYS_getpid, R2
SYSCALL
MOVW R2, ret+0(FP)
RET
TEXT ·tgkill(SB),NOSPLIT,$0-12
MOVW tgid+0(FP), R4
MOVW tid+4(FP), R5
MOVW sig+8(FP), R6
MOVW $SYS_tgkill, R2
SYSCALL
RET
TEXT runtime·setitimer(SB),NOSPLIT,$0-12
MOVW mode+0(FP), R4
MOVW new+4(FP), R5
......
......@@ -156,6 +156,18 @@ TEXT runtime·raiseproc(SB),NOSPLIT|NOFRAME,$0
SYSCALL $SYS_kill
RET
TEXT ·getpid(SB),NOSPLIT|NOFRAME,$0-8
SYSCALL $SYS_getpid
MOVD R3, ret+0(FP)
RET
TEXT ·tgkill(SB),NOSPLIT|NOFRAME,$0-24
MOVD tgid+0(FP), R3
MOVD tid+8(FP), R4
MOVD sig+16(FP), R5
SYSCALL $SYS_tgkill
RET
TEXT runtime·setitimer(SB),NOSPLIT|NOFRAME,$0-24
MOVW mode+0(FP), R3
MOVD new+8(FP), R4
......
......@@ -163,6 +163,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT|NOFRAME,$0
SYSCALL
RET
TEXT ·getpid(SB),NOSPLIT|NOFRAME,$0-8
MOVW $SYS_getpid, R1
SYSCALL
MOVD R2, ret+0(FP)
RET
TEXT ·tgkill(SB),NOSPLIT|NOFRAME,$0-24
MOVD tgid+0(FP), R2
MOVD tid+8(FP), R3
MOVD sig+16(FP), R4
MOVW $SYS_tgkill, R1
SYSCALL
RET
TEXT runtime·setitimer(SB),NOSPLIT|NOFRAME,$0-24
MOVW mode+0(FP), R2
MOVD new+8(FP), R3
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment