mirror of https://github.com/golang/go.git
runtime: minor simplifications to signal code
Change setsig, setsigstack, getsig, raise, raiseproc to take uint32 for signal number parameter, as that is the type mostly used for signal numbers. Same for dieFromSignal, sigInstallGoHandler, raisebadsignal. Remove setsig restart parameter, as it is always either true or irrelevant. Don't check the handler in setsigstack, as the only caller does that anyhow. Don't bother to convert the handler from sigtramp to sighandler in getsig, as it will never be called when the handler is sigtramp or sighandler. Don't check the return value from rt_sigaction in the GNU/Linux version of setsigstack; no other setsigstack checks it, and it never fails. Change-Id: I6bbd677e048a77eddf974dd3d017bc3c560fbd48 Reviewed-on: https://go-review.googlesource.com/29953 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
594cddd625
commit
eb268cb321
|
|
@ -252,14 +252,10 @@ func sigtramp()
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsig(i int32, fn uintptr, restart bool) {
|
||||
func setsig(i uint32, fn uintptr) {
|
||||
var sa sigactiont
|
||||
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK
|
||||
if restart {
|
||||
sa.sa_flags |= _SA_RESTART
|
||||
}
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK | _SA_RESTART
|
||||
sa.sa_mask = sigset_all
|
||||
if fn == funcPC(sighandler) {
|
||||
fn = funcPC(sigtramp)
|
||||
|
|
@ -270,11 +266,10 @@ func setsig(i int32, fn uintptr, restart bool) {
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsigstack(i int32) {
|
||||
func setsigstack(i uint32) {
|
||||
var sa sigactiont
|
||||
sigaction(i, nil, &sa)
|
||||
handler := *((*uintptr)(unsafe.Pointer(&sa._funcptr)))
|
||||
if handler == 0 || handler == _SIG_DFL || handler == _SIG_IGN || sa.sa_flags&_SA_ONSTACK != 0 {
|
||||
if sa.sa_flags&_SA_ONSTACK != 0 {
|
||||
return
|
||||
}
|
||||
sa.sa_flags |= _SA_ONSTACK
|
||||
|
|
@ -283,12 +278,9 @@ func setsigstack(i int32) {
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func getsig(i int32) uintptr {
|
||||
func getsig(i uint32) uintptr {
|
||||
var sa sigactiont
|
||||
sigaction(i, nil, &sa)
|
||||
if *((*uintptr)(unsafe.Pointer(&sa._funcptr))) == funcPC(sigtramp) {
|
||||
return funcPC(sighandler)
|
||||
}
|
||||
return *((*uintptr)(unsafe.Pointer(&sa._funcptr)))
|
||||
}
|
||||
|
||||
|
|
@ -465,11 +457,11 @@ func pthread_create(thread *pthread, attr *pthreadattr, fn uintptr, arg unsafe.P
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func raise(sig int32) /* int32 */ {
|
||||
func raise(sig uint32) /* int32 */ {
|
||||
sysvicall1(&libc_raise, uintptr(sig))
|
||||
}
|
||||
|
||||
func raiseproc(sig int32) /* int32 */ {
|
||||
func raiseproc(sig uint32) /* int32 */ {
|
||||
pid := sysvicall0(&libc_getpid)
|
||||
sysvicall2(&libc_kill, pid, uintptr(sig))
|
||||
}
|
||||
|
|
@ -505,7 +497,7 @@ func setitimer(which int32, value *itimerval, ovalue *itimerval) /* int32 */ {
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func sigaction(sig int32, act *sigactiont, oact *sigactiont) /* int32 */ {
|
||||
func sigaction(sig uint32, act *sigactiont, oact *sigactiont) /* int32 */ {
|
||||
sysvicall3(&libc_sigaction, uintptr(sig), uintptr(unsafe.Pointer(act)), uintptr(unsafe.Pointer(oact)))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -488,8 +488,8 @@ func sigtramp(fn uintptr, infostyle, sig uint32, info *siginfo, ctx unsafe.Point
|
|||
//go:noescape
|
||||
func setitimer(mode int32, new, old *itimerval)
|
||||
|
||||
func raise(sig int32)
|
||||
func raiseproc(sig int32)
|
||||
func raise(sig uint32)
|
||||
func raiseproc(sig uint32)
|
||||
|
||||
//extern SigTabTT runtime·sigtab[];
|
||||
|
||||
|
|
@ -499,25 +499,22 @@ var sigset_all = ^sigset(0)
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsig(i int32, fn uintptr, restart bool) {
|
||||
func setsig(i uint32, fn uintptr) {
|
||||
var sa sigactiont
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK
|
||||
if restart {
|
||||
sa.sa_flags |= _SA_RESTART
|
||||
}
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK | _SA_RESTART
|
||||
sa.sa_mask = ^uint32(0)
|
||||
sa.sa_tramp = unsafe.Pointer(funcPC(sigtramp)) // runtime·sigtramp's job is to call into real handler
|
||||
*(*uintptr)(unsafe.Pointer(&sa.__sigaction_u)) = fn
|
||||
sigaction(uint32(i), &sa, nil)
|
||||
sigaction(i, &sa, nil)
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsigstack(i int32) {
|
||||
func setsigstack(i uint32) {
|
||||
var osa usigactiont
|
||||
sigaction(uint32(i), nil, &osa)
|
||||
sigaction(i, nil, &osa)
|
||||
handler := *(*uintptr)(unsafe.Pointer(&osa.__sigaction_u))
|
||||
if handler == 0 || handler == _SIG_DFL || handler == _SIG_IGN || osa.sa_flags&_SA_ONSTACK != 0 {
|
||||
if osa.sa_flags&_SA_ONSTACK != 0 {
|
||||
return
|
||||
}
|
||||
var sa sigactiont
|
||||
|
|
@ -525,14 +522,14 @@ func setsigstack(i int32) {
|
|||
sa.sa_tramp = unsafe.Pointer(funcPC(sigtramp))
|
||||
sa.sa_mask = osa.sa_mask
|
||||
sa.sa_flags = osa.sa_flags | _SA_ONSTACK
|
||||
sigaction(uint32(i), &sa, nil)
|
||||
sigaction(i, &sa, nil)
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func getsig(i int32) uintptr {
|
||||
func getsig(i uint32) uintptr {
|
||||
var sa usigactiont
|
||||
sigaction(uint32(i), nil, &sa)
|
||||
sigaction(i, nil, &sa)
|
||||
return *(*uintptr)(unsafe.Pointer(&sa.__sigaction_u))
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ func lwp_create(param *lwpparams) int32
|
|||
func sigaltstack(new, old *stackt)
|
||||
|
||||
//go:noescape
|
||||
func sigaction(sig int32, new, old *sigactiont)
|
||||
func sigaction(sig uint32, new, old *sigactiont)
|
||||
|
||||
//go:noescape
|
||||
func sigprocmask(how int32, new, old *sigset)
|
||||
|
|
@ -39,8 +39,8 @@ func sysctl(mib *uint32, miblen uint32, out *byte, size *uintptr, dst *byte, nds
|
|||
//go:noescape
|
||||
func getrlimit(kind int32, limit unsafe.Pointer) int32
|
||||
|
||||
func raise(sig int32)
|
||||
func raiseproc(sig int32)
|
||||
func raise(sig uint32)
|
||||
func raiseproc(sig uint32)
|
||||
|
||||
//go:noescape
|
||||
func sys_umtx_sleep(addr *uint32, val, timeout int32) int32
|
||||
|
|
@ -234,12 +234,9 @@ type sigactiont struct {
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsig(i int32, fn uintptr, restart bool) {
|
||||
func setsig(i uint32, fn uintptr) {
|
||||
var sa sigactiont
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK
|
||||
if restart {
|
||||
sa.sa_flags |= _SA_RESTART
|
||||
}
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK | _SA_RESTART
|
||||
sa.sa_mask = sigset_all
|
||||
if fn == funcPC(sighandler) {
|
||||
fn = funcPC(sigtramp)
|
||||
|
|
@ -250,18 +247,15 @@ func setsig(i int32, fn uintptr, restart bool) {
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsigstack(i int32) {
|
||||
func setsigstack(i uint32) {
|
||||
throw("setsigstack")
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func getsig(i int32) uintptr {
|
||||
func getsig(i uint32) uintptr {
|
||||
var sa sigactiont
|
||||
sigaction(i, nil, &sa)
|
||||
if sa.sa_sigaction == funcPC(sigtramp) {
|
||||
return funcPC(sighandler)
|
||||
}
|
||||
return sa.sa_sigaction
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ func thr_new(param *thrparam, size int32)
|
|||
func sigaltstack(new, old *stackt)
|
||||
|
||||
//go:noescape
|
||||
func sigaction(sig int32, new, old *sigactiont)
|
||||
func sigaction(sig uint32, new, old *sigactiont)
|
||||
|
||||
//go:noescape
|
||||
func sigprocmask(how int32, new, old *sigset)
|
||||
|
|
@ -31,8 +31,8 @@ func sysctl(mib *uint32, miblen uint32, out *byte, size *uintptr, dst *byte, nds
|
|||
|
||||
//go:noescape
|
||||
func getrlimit(kind int32, limit unsafe.Pointer) int32
|
||||
func raise(sig int32)
|
||||
func raiseproc(sig int32)
|
||||
func raise(sig uint32)
|
||||
func raiseproc(sig uint32)
|
||||
|
||||
//go:noescape
|
||||
func sys_umtx_op(addr *uint32, mode int32, val uint32, ptr2, ts *timespec) int32
|
||||
|
|
@ -224,12 +224,9 @@ type sigactiont struct {
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsig(i int32, fn uintptr, restart bool) {
|
||||
func setsig(i uint32, fn uintptr) {
|
||||
var sa sigactiont
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK
|
||||
if restart {
|
||||
sa.sa_flags |= _SA_RESTART
|
||||
}
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK | _SA_RESTART
|
||||
sa.sa_mask = sigset_all
|
||||
if fn == funcPC(sighandler) {
|
||||
fn = funcPC(sigtramp)
|
||||
|
|
@ -240,18 +237,15 @@ func setsig(i int32, fn uintptr, restart bool) {
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsigstack(i int32) {
|
||||
func setsigstack(i uint32) {
|
||||
throw("setsigstack")
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func getsig(i int32) uintptr {
|
||||
func getsig(i uint32) uintptr {
|
||||
var sa sigactiont
|
||||
sigaction(i, nil, &sa)
|
||||
if sa.sa_handler == funcPC(sigtramp) {
|
||||
return funcPC(sighandler)
|
||||
}
|
||||
return sa.sa_handler
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -329,8 +329,8 @@ func sigprocmask(how int32, new, old *sigset) {
|
|||
|
||||
//go:noescape
|
||||
func getrlimit(kind int32, limit unsafe.Pointer) int32
|
||||
func raise(sig int32)
|
||||
func raiseproc(sig int32)
|
||||
func raise(sig uint32)
|
||||
func raiseproc(sig uint32)
|
||||
|
||||
//go:noescape
|
||||
func sched_getaffinity(pid, len uintptr, buf *uintptr) int32
|
||||
|
|
@ -338,12 +338,9 @@ func osyield()
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsig(i int32, fn uintptr, restart bool) {
|
||||
func setsig(i uint32, fn uintptr) {
|
||||
var sa sigactiont
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK | _SA_RESTORER
|
||||
if restart {
|
||||
sa.sa_flags |= _SA_RESTART
|
||||
}
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK | _SA_RESTORER | _SA_RESTART
|
||||
sigfillset(&sa.sa_mask)
|
||||
// Although Linux manpage says "sa_restorer element is obsolete and
|
||||
// should not be used". x86_64 kernel requires it. Only use it on
|
||||
|
|
@ -364,30 +361,23 @@ func setsig(i int32, fn uintptr, restart bool) {
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsigstack(i int32) {
|
||||
func setsigstack(i uint32) {
|
||||
var sa sigactiont
|
||||
if rt_sigaction(uintptr(i), nil, &sa, unsafe.Sizeof(sa.sa_mask)) != 0 {
|
||||
throw("rt_sigaction failure")
|
||||
}
|
||||
if sa.sa_handler == 0 || sa.sa_handler == _SIG_DFL || sa.sa_handler == _SIG_IGN || sa.sa_flags&_SA_ONSTACK != 0 {
|
||||
rt_sigaction(uintptr(i), nil, &sa, unsafe.Sizeof(sa.sa_mask))
|
||||
if sa.sa_flags&_SA_ONSTACK != 0 {
|
||||
return
|
||||
}
|
||||
sa.sa_flags |= _SA_ONSTACK
|
||||
if rt_sigaction(uintptr(i), &sa, nil, unsafe.Sizeof(sa.sa_mask)) != 0 {
|
||||
throw("rt_sigaction failure")
|
||||
}
|
||||
rt_sigaction(uintptr(i), &sa, nil, unsafe.Sizeof(sa.sa_mask))
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func getsig(i int32) uintptr {
|
||||
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")
|
||||
}
|
||||
if sa.sa_handler == funcPC(sigtramp) || sa.sa_handler == funcPC(cgoSigtramp) {
|
||||
return funcPC(sighandler)
|
||||
}
|
||||
return sa.sa_handler
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ func os_sigpipe() {
|
|||
throw("too many writes on closed pipe")
|
||||
}
|
||||
|
||||
func dieFromSignal(sig int32) {
|
||||
func dieFromSignal(sig uint32) {
|
||||
exit(2)
|
||||
}
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ func sigpanic() {
|
|||
panicmem()
|
||||
}
|
||||
|
||||
func raiseproc(sig int32) {
|
||||
func raiseproc(sig uint32) {
|
||||
}
|
||||
|
||||
// Stubs so tests can link correctly. These should never be called.
|
||||
|
|
@ -254,7 +254,7 @@ func badsignalgo(sig uintptr) {
|
|||
if !sigsend(uint32(sig)) {
|
||||
// A foreign thread received the signal sig, and the
|
||||
// Go code does not want to handle it.
|
||||
raisebadsignal(int32(sig))
|
||||
raisebadsignal(uint32(sig))
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -267,7 +267,7 @@ func badsignal2() {
|
|||
|
||||
var badsignal1 = []byte("runtime: signal received on thread not created by Go.\n")
|
||||
|
||||
func raisebadsignal(sig int32) {
|
||||
func raisebadsignal(sig uint32) {
|
||||
badsignal2()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ type mOS struct {
|
|||
func setitimer(mode int32, new, old *itimerval)
|
||||
|
||||
//go:noescape
|
||||
func sigaction(sig int32, new, old *sigactiont)
|
||||
func sigaction(sig uint32, new, old *sigactiont)
|
||||
|
||||
//go:noescape
|
||||
func sigaltstack(new, old *stackt)
|
||||
|
|
@ -45,8 +45,8 @@ func sysctl(mib *uint32, miblen uint32, out *byte, size *uintptr, dst *byte, nds
|
|||
|
||||
func lwp_tramp()
|
||||
|
||||
func raise(sig int32)
|
||||
func raiseproc(sig int32)
|
||||
func raise(sig uint32)
|
||||
func raiseproc(sig uint32)
|
||||
|
||||
//go:noescape
|
||||
func getcontext(ctxt unsafe.Pointer)
|
||||
|
|
@ -262,12 +262,9 @@ type sigactiont struct {
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsig(i int32, fn uintptr, restart bool) {
|
||||
func setsig(i uint32, fn uintptr) {
|
||||
var sa sigactiont
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK
|
||||
if restart {
|
||||
sa.sa_flags |= _SA_RESTART
|
||||
}
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK | _SA_RESTART
|
||||
sa.sa_mask = sigset_all
|
||||
if fn == funcPC(sighandler) {
|
||||
fn = funcPC(sigtramp)
|
||||
|
|
@ -278,18 +275,15 @@ func setsig(i int32, fn uintptr, restart bool) {
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsigstack(i int32) {
|
||||
func setsigstack(i uint32) {
|
||||
throw("setsigstack")
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func getsig(i int32) uintptr {
|
||||
func getsig(i uint32) uintptr {
|
||||
var sa sigactiont
|
||||
sigaction(i, nil, &sa)
|
||||
if sa.sa_sigaction == funcPC(sigtramp) {
|
||||
return funcPC(sighandler)
|
||||
}
|
||||
return sa.sa_sigaction
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ type mOS struct {
|
|||
func setitimer(mode int32, new, old *itimerval)
|
||||
|
||||
//go:noescape
|
||||
func sigaction(sig int32, new, old *sigactiont)
|
||||
func sigaction(sig uint32, new, old *sigactiont)
|
||||
|
||||
//go:noescape
|
||||
func sigaltstack(new, old *stackt)
|
||||
|
|
@ -41,8 +41,8 @@ func sigprocmask(how int32, new, old *sigset) {
|
|||
//go:noescape
|
||||
func sysctl(mib *uint32, miblen uint32, out *byte, size *uintptr, dst *byte, ndst uintptr) int32
|
||||
|
||||
func raise(sig int32)
|
||||
func raiseproc(sig int32)
|
||||
func raise(sig uint32)
|
||||
func raiseproc(sig uint32)
|
||||
|
||||
//go:noescape
|
||||
func tfork(param *tforkt, psize uintptr, mm *m, gg *g, fn uintptr) int32
|
||||
|
|
@ -240,12 +240,9 @@ type sigactiont struct {
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsig(i int32, fn uintptr, restart bool) {
|
||||
func setsig(i uint32, fn uintptr) {
|
||||
var sa sigactiont
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK
|
||||
if restart {
|
||||
sa.sa_flags |= _SA_RESTART
|
||||
}
|
||||
sa.sa_flags = _SA_SIGINFO | _SA_ONSTACK | _SA_RESTART
|
||||
sa.sa_mask = uint32(sigset_all)
|
||||
if fn == funcPC(sighandler) {
|
||||
fn = funcPC(sigtramp)
|
||||
|
|
@ -256,18 +253,15 @@ func setsig(i int32, fn uintptr, restart bool) {
|
|||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func setsigstack(i int32) {
|
||||
func setsigstack(i uint32) {
|
||||
throw("setsigstack")
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func getsig(i int32) uintptr {
|
||||
func getsig(i uint32) uintptr {
|
||||
var sa sigactiont
|
||||
sigaction(i, nil, &sa)
|
||||
if sa.sa_sigaction == funcPC(sigtramp) {
|
||||
return funcPC(sighandler)
|
||||
}
|
||||
return sa.sa_sigaction
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -467,7 +467,7 @@ func badsignal2() {
|
|||
exits(&_badsignal[0])
|
||||
}
|
||||
|
||||
func raisebadsignal(sig int32) {
|
||||
func raisebadsignal(sig uint32) {
|
||||
badsignal2()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ func sighandler(sig uint32, info *siginfo, ctxt unsafe.Pointer, gp *g) {
|
|||
}
|
||||
|
||||
if flags&_SigKill != 0 {
|
||||
dieFromSignal(int32(sig))
|
||||
dieFromSignal(sig)
|
||||
}
|
||||
|
||||
if flags&_SigThrow == 0 {
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ func initsig(preinit bool) {
|
|||
return
|
||||
}
|
||||
|
||||
for i := int32(0); i < _NSIG; i++ {
|
||||
for i := uint32(0); i < _NSIG; i++ {
|
||||
t := &sigtable[i]
|
||||
if t.flags == 0 || t.flags&_SigDefault != 0 {
|
||||
continue
|
||||
|
|
@ -88,13 +88,13 @@ func initsig(preinit bool) {
|
|||
}
|
||||
|
||||
t.flags |= _SigHandling
|
||||
setsig(i, funcPC(sighandler), true)
|
||||
setsig(i, funcPC(sighandler))
|
||||
}
|
||||
}
|
||||
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func sigInstallGoHandler(sig int32) bool {
|
||||
func sigInstallGoHandler(sig uint32) bool {
|
||||
// For some signals, we respect an inherited SIG_IGN handler
|
||||
// rather than insist on installing our own default handler.
|
||||
// Even these signals can be fetched using the os/signal package.
|
||||
|
|
@ -131,8 +131,8 @@ func sigenable(sig uint32) {
|
|||
<-maskUpdatedChan
|
||||
if t.flags&_SigHandling == 0 {
|
||||
t.flags |= _SigHandling
|
||||
fwdSig[sig] = getsig(int32(sig))
|
||||
setsig(int32(sig), funcPC(sighandler), true)
|
||||
fwdSig[sig] = getsig(sig)
|
||||
setsig(sig, funcPC(sighandler))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -151,9 +151,9 @@ func sigdisable(sig uint32) {
|
|||
// If initsig does not install a signal handler for a
|
||||
// signal, then to go back to the state before Notify
|
||||
// we should remove the one we installed.
|
||||
if !sigInstallGoHandler(int32(sig)) {
|
||||
if !sigInstallGoHandler(sig) {
|
||||
t.flags &^= _SigHandling
|
||||
setsig(int32(sig), fwdSig[sig], true)
|
||||
setsig(sig, fwdSig[sig])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -166,7 +166,7 @@ func sigignore(sig uint32) {
|
|||
t := &sigtable[sig]
|
||||
if t.flags&_SigNotify != 0 {
|
||||
t.flags &^= _SigHandling
|
||||
setsig(int32(sig), _SIG_IGN, true)
|
||||
setsig(sig, _SIG_IGN)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -295,8 +295,8 @@ func sigpanic() {
|
|||
// This is only called with fatal signals expected to kill the process.
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func dieFromSignal(sig int32) {
|
||||
setsig(sig, _SIG_DFL, false)
|
||||
func dieFromSignal(sig uint32) {
|
||||
setsig(sig, _SIG_DFL)
|
||||
unblocksig(sig)
|
||||
raise(sig)
|
||||
|
||||
|
|
@ -316,7 +316,7 @@ func dieFromSignal(sig int32) {
|
|||
// raisebadsignal is called when a signal is received on a non-Go
|
||||
// thread, and the Go program does not want to handle it (that is, the
|
||||
// program has not called os/signal.Notify for the signal).
|
||||
func raisebadsignal(sig int32, c *sigctxt) {
|
||||
func raisebadsignal(sig uint32, c *sigctxt) {
|
||||
if sig == _SIGPROF {
|
||||
// Ignore profiling signals that arrive on non-Go threads.
|
||||
return
|
||||
|
|
@ -338,7 +338,7 @@ func raisebadsignal(sig int32, c *sigctxt) {
|
|||
// it. That means that we don't have to worry about blocking it
|
||||
// again.
|
||||
unblocksig(sig)
|
||||
setsig(sig, handler, false)
|
||||
setsig(sig, handler)
|
||||
|
||||
// If we're linked into a non-Go program we want to try to
|
||||
// avoid modifying the original context in which the signal
|
||||
|
|
@ -359,7 +359,7 @@ func raisebadsignal(sig int32, c *sigctxt) {
|
|||
// We may receive another instance of the signal before we
|
||||
// restore the Go handler, but that is not so bad: we know
|
||||
// that the Go program has been ignoring the signal.
|
||||
setsig(sig, funcPC(sighandler), true)
|
||||
setsig(sig, funcPC(sighandler))
|
||||
}
|
||||
|
||||
func crash() {
|
||||
|
|
@ -448,7 +448,7 @@ func badsignalgo(sig uintptr, c *sigctxt) {
|
|||
if !sigsend(uint32(sig)) {
|
||||
// A foreign thread received the signal sig, and the
|
||||
// Go code does not want to handle it.
|
||||
raisebadsignal(int32(sig), c)
|
||||
raisebadsignal(uint32(sig), c)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -473,7 +473,7 @@ func sigfwdgo(sig uint32, info *siginfo, ctx unsafe.Pointer) bool {
|
|||
// at program startup, but the Go runtime has not yet
|
||||
// been initialized.
|
||||
if fwdFn == _SIG_DFL {
|
||||
dieFromSignal(int32(sig))
|
||||
dieFromSignal(sig)
|
||||
} else {
|
||||
sigfwd(fwdFn, sig, info, ctx)
|
||||
}
|
||||
|
|
@ -552,7 +552,7 @@ func sigblock() {
|
|||
// signal handler, on the signal stack, with no g available.
|
||||
//go:nosplit
|
||||
//go:nowritebarrierrec
|
||||
func unblocksig(sig int32) {
|
||||
func unblocksig(sig uint32) {
|
||||
var set sigset
|
||||
sigaddset(&set, int(sig))
|
||||
sigprocmask(_SIG_UNBLOCK, &set, nil)
|
||||
|
|
|
|||
|
|
@ -205,7 +205,7 @@ func sigignore(sig uint32) {
|
|||
|
||||
func badsignal2()
|
||||
|
||||
func raisebadsignal(sig int32) {
|
||||
func raisebadsignal(sig uint32) {
|
||||
badsignal2()
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue