]> Cypherpunks repositories - gostls13.git/commit
runtime: ignore sigaction error on Linux if it is for SIGRTMAX
authorAlberto Donizetti <alb.donizetti@gmail.com>
Thu, 3 May 2018 08:13:31 +0000 (10:13 +0200)
committerAlberto Donizetti <alb.donizetti@gmail.com>
Fri, 4 May 2018 18:46:33 +0000 (18:46 +0000)
commit2aef675000e71daeef77c0fb3379bcd142e48959
tree328c999569ece96bd418c236f434515f8326512b
parenteed79f46c2791357a118e3f9f6be461b866e7f83
runtime: ignore sigaction error on Linux if it is for SIGRTMAX

The Go runtime registers a handler for every signal. This prevents Go
binaries from working on QEMU in user-emulation mode, since the hacky
way QEMU implements signals on Linux assumes that no-one uses signal
64 (SIGRTMAX).

In the past, we had a workaround in the runtime to prevent crashes on
start-up when running on QEMU:

  golang.org/cl/124900043
  golang.org/cl/16853

but it went lost during the 1.11 dev cycle. More precisely, the test
for SIGRTMAX was dropped in CL 18150 when we stopped testing the
result of sigaction in the Linux implementation of setsig. That change
was made to avoid a stack split overflow because code started calling
setsig from nosplit functions. Then in CL 99077 we started testing the
result of sigaction again, this time using systemstack to avoid to
stack split overflow. When this test was added back, we did not bring
back the test of SIGRTMAX.

As a result, Go1.10 binaries work on QEMU, while 1.11 binaries
immediately crash on startup.

This change restores the QEMU workaround.

Updates #24656

Change-Id: I46380b1e1b4bf47db7bc7b3d313f00c4e4c11ea3
Reviewed-on: https://go-review.googlesource.com/111176
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/runtime/os_linux.go