Skip to content

Commit 334291d

Browse files
committed
runtime: M-targeted signals for Linux
We'll add a test once all of the POSIX platforms are done. For golang#10958, golang#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>
1 parent 3706cd8 commit 334291d

File tree

9 files changed

+121
-1
lines changed

9 files changed

+121
-1
lines changed

src/runtime/os_linux.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,9 @@ func gettid() uint32
332332
func minit() {
333333
minitSignals()
334334

335-
// for debuggers, in case cgo created the thread
335+
// Cgo-created threads and the bootstrap m are missing a
336+
// procid. We need this for asynchronous preemption and its
337+
// useful in debuggers.
336338
getg().m.procid = uint64(gettid())
337339
}
338340

@@ -454,3 +456,11 @@ func sysSigaction(sig uint32, new, old *sigactiont) {
454456
// rt_sigaction is implemented in assembly.
455457
//go:noescape
456458
func rt_sigaction(sig uintptr, new, old *sigactiont, size uintptr) int32
459+
460+
func getpid() int
461+
func tgkill(tgid, tid, sig int)
462+
463+
// signalM sends a signal to mp.
464+
func signalM(mp *m, sig int) {
465+
tgkill(getpid(), int(mp.procid), sig)
466+
}

src/runtime/sys_linux_386.s

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT,$12
188188
INVOKE_SYSCALL
189189
RET
190190

191+
TEXT ·getpid(SB),NOSPLIT,$0-4
192+
MOVL $SYS_getpid, AX
193+
INVOKE_SYSCALL
194+
MOVL AX, ret+0(FP)
195+
RET
196+
197+
TEXT ·tgkill(SB),NOSPLIT,$0
198+
MOVL $SYS_tgkill, AX
199+
MOVL tgid+0(FP), BX
200+
MOVL tid+4(FP), CX
201+
MOVL sig+8(FP), DX
202+
INVOKE_SYSCALL
203+
RET
204+
191205
TEXT runtime·setitimer(SB),NOSPLIT,$0-12
192206
MOVL $SYS_setittimer, AX
193207
MOVL mode+0(FP), BX

src/runtime/sys_linux_amd64.s

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT,$0
171171
SYSCALL
172172
RET
173173

174+
TEXT ·getpid(SB),NOSPLIT,$0-8
175+
MOVL $SYS_getpid, AX
176+
SYSCALL
177+
MOVQ AX, ret+0(FP)
178+
RET
179+
180+
TEXT ·tgkill(SB),NOSPLIT,$0
181+
MOVQ tgid+0(FP), DI
182+
MOVQ tid+8(FP), SI
183+
MOVQ sig+16(FP), DX
184+
MOVL $SYS_tgkill, AX
185+
SYSCALL
186+
RET
187+
174188
TEXT runtime·setitimer(SB),NOSPLIT,$0-24
175189
MOVL mode+0(FP), DI
176190
MOVQ new+8(FP), SI

src/runtime/sys_linux_arm.s

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT|NOFRAME,$0
172172
SWI $0
173173
RET
174174

175+
TEXT ·getpid(SB),NOSPLIT,$0-4
176+
MOVW $SYS_getpid, R7
177+
SWI $0
178+
MOVW R0, ret+0(FP)
179+
RET
180+
181+
TEXT ·tgkill(SB),NOSPLIT,$0-12
182+
MOVW tgid+0(FP), R0
183+
MOVW tid+4(FP), R1
184+
MOVW sig+8(FP), R2
185+
MOVW $SYS_tgkill, R7
186+
SWI $0
187+
RET
188+
175189
TEXT runtime·mmap(SB),NOSPLIT,$0
176190
MOVW addr+0(FP), R0
177191
MOVW n+4(FP), R1

src/runtime/sys_linux_arm64.s

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT|NOFRAME,$0
175175
SVC
176176
RET
177177

178+
TEXT ·getpid(SB),NOSPLIT|NOFRAME,$0-8
179+
MOVD $SYS_getpid, R8
180+
SVC
181+
MOVD R0, ret+0(FP)
182+
RET
183+
184+
TEXT ·tgkill(SB),NOSPLIT,$0-24
185+
MOVD tgid+0(FP), R0
186+
MOVD tid+8(FP), R1
187+
MOVD sig+16(FP), R2
188+
MOVD $SYS_tgkill, R8
189+
SVC
190+
RET
191+
178192
TEXT runtime·setitimer(SB),NOSPLIT|NOFRAME,$0-24
179193
MOVW mode+0(FP), R0
180194
MOVD new+8(FP), R1

src/runtime/sys_linux_mips64x.s

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT|NOFRAME,$0
177177
SYSCALL
178178
RET
179179

180+
TEXT ·getpid(SB),NOSPLIT|NOFRAME,$0-8
181+
MOVV $SYS_getpid, R2
182+
SYSCALL
183+
MOVV R2, ret+0(FP)
184+
RET
185+
186+
TEXT ·tgkill(SB),NOSPLIT|NOFRAME,$0-24
187+
MOVV tgid+0(FP), R4
188+
MOVV tid+8(FP), R5
189+
MOVV sig+16(FP), R6
190+
MOVV $SYS_tgkill, R2
191+
SYSCALL
192+
RET
193+
180194
TEXT runtime·setitimer(SB),NOSPLIT|NOFRAME,$0-24
181195
MOVW mode+0(FP), R4
182196
MOVV new+8(FP), R5

src/runtime/sys_linux_mipsx.s

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT,$0
183183
SYSCALL
184184
RET
185185

186+
TEXT ·getpid(SB),NOSPLIT,$0-4
187+
MOVW $SYS_getpid, R2
188+
SYSCALL
189+
MOVW R2, ret+0(FP)
190+
RET
191+
192+
TEXT ·tgkill(SB),NOSPLIT,$0-12
193+
MOVW tgid+0(FP), R4
194+
MOVW tid+4(FP), R5
195+
MOVW sig+8(FP), R6
196+
MOVW $SYS_tgkill, R2
197+
SYSCALL
198+
RET
199+
186200
TEXT runtime·setitimer(SB),NOSPLIT,$0-12
187201
MOVW mode+0(FP), R4
188202
MOVW new+4(FP), R5

src/runtime/sys_linux_ppc64x.s

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,18 @@ TEXT runtime·raiseproc(SB),NOSPLIT|NOFRAME,$0
156156
SYSCALL $SYS_kill
157157
RET
158158

159+
TEXT ·getpid(SB),NOSPLIT|NOFRAME,$0-8
160+
SYSCALL $SYS_getpid
161+
MOVD R3, ret+0(FP)
162+
RET
163+
164+
TEXT ·tgkill(SB),NOSPLIT|NOFRAME,$0-24
165+
MOVD tgid+0(FP), R3
166+
MOVD tid+8(FP), R4
167+
MOVD sig+16(FP), R5
168+
SYSCALL $SYS_tgkill
169+
RET
170+
159171
TEXT runtime·setitimer(SB),NOSPLIT|NOFRAME,$0-24
160172
MOVW mode+0(FP), R3
161173
MOVD new+8(FP), R4

src/runtime/sys_linux_s390x.s

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,20 @@ TEXT runtime·raiseproc(SB),NOSPLIT|NOFRAME,$0
163163
SYSCALL
164164
RET
165165

166+
TEXT ·getpid(SB),NOSPLIT|NOFRAME,$0-8
167+
MOVW $SYS_getpid, R1
168+
SYSCALL
169+
MOVD R2, ret+0(FP)
170+
RET
171+
172+
TEXT ·tgkill(SB),NOSPLIT|NOFRAME,$0-24
173+
MOVD tgid+0(FP), R2
174+
MOVD tid+8(FP), R3
175+
MOVD sig+16(FP), R4
176+
MOVW $SYS_tgkill, R1
177+
SYSCALL
178+
RET
179+
166180
TEXT runtime·setitimer(SB),NOSPLIT|NOFRAME,$0-24
167181
MOVW mode+0(FP), R2
168182
MOVD new+8(FP), R3

0 commit comments

Comments
 (0)