• Austin Clements's avatar
    runtime: use entry stack map at function entry · 0fd427fd
    Austin Clements authored
    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/109349Reviewed-by: 's avatarRick Hudson <rlh@golang.org>
    0fd427fd
mgcmark.go 41.9 KB