From c2f28de732749425ea29b5efa982c407964f8560 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Tue, 6 Mar 2018 20:47:38 -0800 Subject: runtime: change from rt_sigaction to sigaction This normalizes the Linux code to act like other targets. The size argument to the rt_sigaction system call is pushed to a single function, sysSigaction. This is intended as a simplification step for CL 93875 for #14327. Change-Id: I594788e235f0da20e16e8a028e27ac8c883907c4 Reviewed-on: https://go-review.googlesource.com/99077 Run-TryBot: Ian Lance Taylor TryBot-Result: Gobot Gobot Reviewed-by: Austin Clements --- src/runtime/os_linux.go | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src/runtime/os_linux.go') diff --git a/src/runtime/os_linux.go b/src/runtime/os_linux.go index d8c1592a1d..779f7403ec 100644 --- a/src/runtime/os_linux.go +++ b/src/runtime/os_linux.go @@ -378,28 +378,26 @@ func setsig(i uint32, fn uintptr) { } } sa.sa_handler = fn - rt_sigaction(uintptr(i), &sa, nil, unsafe.Sizeof(sa.sa_mask)) + sigaction(i, &sa, nil) } //go:nosplit //go:nowritebarrierrec func setsigstack(i uint32) { var sa sigactiont - rt_sigaction(uintptr(i), nil, &sa, unsafe.Sizeof(sa.sa_mask)) + sigaction(i, nil, &sa) if sa.sa_flags&_SA_ONSTACK != 0 { return } sa.sa_flags |= _SA_ONSTACK - rt_sigaction(uintptr(i), &sa, nil, unsafe.Sizeof(sa.sa_mask)) + sigaction(i, &sa, nil) } //go:nosplit //go:nowritebarrierrec func getsig(i uint32) uintptr { var sa sigactiont - if rt_sigaction(uintptr(i), nil, &sa, unsafe.Sizeof(sa.sa_mask)) != 0 { - throw("rt_sigaction read failure") - } + sigaction(i, nil, &sa) return sa.sa_handler } @@ -411,3 +409,15 @@ func setSignalstackSP(s *stackt, sp uintptr) { func (c *sigctxt) fixsigcode(sig uint32) { } + +// sysSigaction calls the rt_sigaction system call. +//go:nosplit +func sysSigaction(sig uint32, new, old *sigactiont) { + if rt_sigaction(uintptr(sig), new, old, unsafe.Sizeof(sigactiont{}.sa_mask)) != 0 { + throw("sigaction failed") + } +} + +// rt_sigaction is implemented in assembly. +//go:noescape +func rt_sigaction(sig uintptr, new, old *sigactiont, size uintptr) int32 -- cgit v1.3-5-g9baa