mirror of
https://github.com/golang/go
synced 2024-09-30 18:18:32 -06:00
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: Cherry Zhang <cherryyz@google.com>
This commit is contained in:
parent
3706cd85d3
commit
334291d1f6
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user