mirror of
https://github.com/golang/go
synced 2024-11-07 15:46:23 -07:00
runtime: ignore GNU/Linux sigaction errors for signals 32 and 33
This avoids problems when running under QEMU. It seems that at least some QEMU versions turn the sigaction implementation into a call to the C library sigaction function. The C library function will reject attempts to set the signal handler for signals 32 and 33. Ignore errors in that case. Change-Id: Id443a9a32f6fb0ceef5c59a398e7ede30bf71646 Reviewed-on: https://go-review.googlesource.com/125955 Run-TryBot: Ian Lance Taylor <iant@golang.org> Reviewed-by: Heschi Kreinick <heschi@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
5f5402b723
commit
c0e5485bd5
@ -415,9 +415,18 @@ func (c *sigctxt) fixsigcode(sig uint32) {
|
||||
//go:nosplit
|
||||
func sysSigaction(sig uint32, new, old *sigactiont) {
|
||||
if rt_sigaction(uintptr(sig), new, old, unsafe.Sizeof(sigactiont{}.sa_mask)) != 0 {
|
||||
// Workaround for bug in Qemu user mode emulation. (qemu
|
||||
// rejects rt_sigaction of signal 64, SIGRTMAX).
|
||||
if sig != 64 {
|
||||
// Workaround for bugs in QEMU user mode emulation.
|
||||
//
|
||||
// QEMU turns calls to the sigaction system call into
|
||||
// calls to the C library sigaction call; the C
|
||||
// library call rejects attempts to call sigaction for
|
||||
// SIGCANCEL (32) or SIGSETXID (33).
|
||||
//
|
||||
// QEMU rejects calling sigaction on SIGRTMAX (64).
|
||||
//
|
||||
// Just ignore the error in these case. There isn't
|
||||
// anything we can do about it anyhow.
|
||||
if sig != 32 && sig != 33 && sig != 64 {
|
||||
// Use system stack to avoid split stack overflow on ppc64/ppc64le.
|
||||
systemstack(func() {
|
||||
throw("sigaction failed")
|
||||
|
Loading…
Reference in New Issue
Block a user