]> Cypherpunks repositories - gostls13.git/commit
runtime: force segv for nil defer function to be in deferreturn()
authorDan Scales <danscales@google.com>
Wed, 11 Dec 2019 01:27:26 +0000 (17:27 -0800)
committerDan Scales <danscales@google.com>
Thu, 12 Dec 2019 19:23:45 +0000 (19:23 +0000)
commit22d28a24c8b0d99f2ad6da5fe680fa3cfa216651
treedf2e0b19717a826ae2d30bc981b5e7674870e368
parent100bf440b9a69c6dce8daeebed038d607c963b8f
runtime: force segv for nil defer function to be in deferreturn()

If the defer function pointer is nil, force the seg fault to happen in deferreturn
rather than in jmpdefer. jmpdefer is used fairly infrequently now because most
functions have open-coded defers.

The open-coded defer implementation calls gentraceback() with a callback when
looking for the first open-coded defer frame. gentraceback() throws an error if it
is called with a callback on an LR architecture and jmpdefer is on the stack,
because the stack trace can be incorrect in that case - see issue #8153. So, we
want to make sure that we don't have a seg fault in jmpdefer.

Fixes #36050

Change-Id: Ie25e6f015d8eb170b40248dedeb26a37b7f9b38d
Reviewed-on: https://go-review.googlesource.com/c/go/+/210978
Reviewed-by: Keith Randall <khr@golang.org>
Run-TryBot: Dan Scales <danscales@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
src/runtime/callers_test.go
src/runtime/panic.go