• Austin Clements's avatar
    cmd/6g, liblink, runtime: support saving base pointers · 3c0fee10
    Austin Clements authored
    This adds a "framepointer" GOEXPERIMENT that that makes the amd64
    toolchain maintain base pointer chains in the same way that gcc
    -fno-omit-frame-pointer does.  Go doesn't use these saved base
    pointers, but this does enable external tools like Linux perf and
    VTune to unwind Go stacks when collecting system-wide profiles.
    
    This requires support in the compilers to not clobber BP, support in
    liblink for generating the BP-saving function prologue and unwinding
    epilogue, and support in the runtime to save BPs across preemption, to
    skip saved BPs during stack unwinding and, and to adjust saved BPs
    during stack moving.
    
    As with other GOEXPERIMENTs, everything from the toolchain to the
    runtime must be compiled with this experiment enabled.  To do this,
    run make.bash (or all.bash) with GOEXPERIMENT=framepointer.
    
    Change-Id: I4024853beefb9539949e5ca381adfdd9cfada544
    Reviewed-on: https://go-review.googlesource.com/2992Reviewed-by: 's avatarRuss Cox <rsc@golang.org>
    3c0fee10
nosplit.go 8.66 KB