• Austin Clements's avatar
    runtime: scan stacks conservatively at async safe points · d16ec137
    Austin Clements authored
    This adds support for scanning the stack when a goroutine is stopped
    at an async safe point. This is not yet lit up because asyncPreempt is
    not yet injected, but prepares us for that.
    
    This works by conservatively scanning the registers dumped in the
    frame of asyncPreempt and its parent frame, which was stopped at an
    asynchronous safe point.
    
    Conservative scanning works by only marking words that are pointers to
    valid, allocated heap objects. One complication is pointers to stack
    objects. In this case, we can't determine if the stack object is still
    "allocated" or if it was freed by an earlier GC. Hence, we need to
    propagate the conservative-ness of scanning stack objects: if all
    pointers found to a stack object were found via conservative scanning,
    then the stack object itself needs to be scanned conservatively, since
    its pointers may point to dead objects.
    
    For #10958, #24543.
    
    Change-Id: I7ff84b058c37cde3de8a982da07002eaba126fd6
    Reviewed-on: https://go-review.googlesource.com/c/go/+/201761
    Run-TryBot: Austin Clements <austin@google.com>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarCherry Zhang <cherryyz@google.com>
    d16ec137
funcid.go 2.91 KB