var sig … const sigIdle … const sigReceiving … const sigSending … // sigsend delivers a signal from sighandler to the internal signal delivery queue. // It reports whether the signal was sent. If not, the caller typically crashes the program. // It runs from the signal handler, so it's limited in what it can do. func sigsend(s uint32) bool { … } // Called to receive the next queued signal. // Must only be called from a single goroutine at a time. // //go:linkname signal_recv os/signal.signal_recv func signal_recv() uint32 { … } // signalWaitUntilIdle waits until the signal delivery mechanism is idle. // This is used to ensure that we do not drop a signal notification due // to a race between disabling a signal and receiving a signal. // This assumes that signal delivery has already been disabled for // the signal(s) in question, and here we are just waiting to make sure // that all the signals have been delivered to the user channels // by the os/signal package. // //go:linkname signalWaitUntilIdle os/signal.signalWaitUntilIdle func signalWaitUntilIdle() { … } // Must only be called from a single goroutine at a time. // //go:linkname signal_enable os/signal.signal_enable func signal_enable(s uint32) { … } // Must only be called from a single goroutine at a time. // //go:linkname signal_disable os/signal.signal_disable func signal_disable(s uint32) { … } // Must only be called from a single goroutine at a time. // //go:linkname signal_ignore os/signal.signal_ignore func signal_ignore(s uint32) { … } // sigInitIgnored marks the signal as already ignored. This is called at // program start by initsig. In a shared library initsig is called by // libpreinit, so the runtime may not be initialized yet. // //go:nosplit func sigInitIgnored(s uint32) { … } // Checked by signal handlers. // //go:linkname signal_ignored os/signal.signal_ignored func signal_ignored(s uint32) bool { … }