]> Cypherpunks repositories - gostls13.git/commit
runtime: use entry stack map at function entry
authorAustin Clements <austin@google.com>
Wed, 25 Apr 2018 20:53:04 +0000 (16:53 -0400)
committerAustin Clements <austin@google.com>
Sun, 29 Apr 2018 00:03:04 +0000 (00:03 +0000)
commit0fd427fda70d635a526efc8cf40251718e5a45bf
tree20658392a3c324f27070274a9499e82697b35f4b
parent3c65bb5b90e0ea367775d4c51966260b1e7c4d25
runtime: use entry stack map at function entry

Currently, when the runtime looks up the stack map for a frame, it
uses frame.continpc - 1 unless continpc is the function entry PC, in
which case it uses frame.continpc. As a result, if continpc is the
function entry point (which happens for deferred frames), it will
actually look up the stack map *following* the first instruction.

I think, though I am not positive, that this is always okay today
because the first instruction of a function can never change the stack
map. It's usually not a CALL, so it doesn't have PCDATA. Or, if it is
a CALL, it has to have the entry stack map.

But we're about to start emitting stack maps at every instruction that
changes them, which means the first instruction can have PCDATA
(notably, in leaf functions that don't have a prologue).

To prepare for this, tweak how the runtime looks up stack map indexes
so that if continpc is the function entry point, it directly uses the
entry stack map.

For #24543.

Change-Id: I85aa818041cd26aff416f7b1fba186e9c8ca6568
Reviewed-on: https://go-review.googlesource.com/109349
Reviewed-by: Rick Hudson <rlh@golang.org>
src/runtime/heapdump.go
src/runtime/mbitmap.go
src/runtime/mgcmark.go
src/runtime/stack.go