diff options
| author | Alan Donovan <adonovan@google.com> | 2013-02-14 23:37:14 -0500 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2013-02-14 23:37:14 -0500 |
| commit | e49f94560346696fe326f307ba24f1be951d2a6d (patch) | |
| tree | c6d6691cc8d84f5bd1994eda3381a5e1d4ab3e28 /src/pkg/runtime/thread_linux.c | |
| parent | c5b4292eb3dd41766a9ea0e89f630c5ec783bf42 (diff) | |
| download | go-e49f94560346696fe326f307ba24f1be951d2a6d.tar.xz | |
runtime: expand error for signal received on non-Go thread.
We call runtime.findnull dynamically to avoid exceeding the
static nosplit stack limit check. (Thanks minux!)
Fixes #4048.
R=rsc, minux.ma, ality
CC=golang-dev
https://golang.org/cl/7232066
Diffstat (limited to 'src/pkg/runtime/thread_linux.c')
| -rw-r--r-- | src/pkg/runtime/thread_linux.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/pkg/runtime/thread_linux.c b/src/pkg/runtime/thread_linux.c index dc8cad57a9..778b9078b9 100644 --- a/src/pkg/runtime/thread_linux.c +++ b/src/pkg/runtime/thread_linux.c @@ -256,7 +256,7 @@ runtime·badcallback(void) runtime·write(2, badcallback, sizeof badcallback - 1); } -static int8 badsignal[] = "runtime: signal received on thread not created by Go.\n"; +static int8 badsignal[] = "runtime: signal received on thread not created by Go: "; // This runs on a foreign stack, without an m or a g. No stack split. #pragma textflag 7 @@ -267,5 +267,11 @@ runtime·badsignal(int32 sig) return; // Ignore SIGPROFs intended for a non-Go thread. } runtime·write(2, badsignal, sizeof badsignal - 1); + if (0 <= sig && sig < NSIG) { + // Call runtime·findnull dynamically to circumvent static stack size check. + static int32 (*findnull)(byte*) = runtime·findnull; + runtime·write(2, runtime·sigtab[sig].name, findnull((byte*)runtime·sigtab[sig].name)); + } + runtime·write(2, "\n", 1); runtime·exit(1); } |
