• Ian Lance Taylor's avatar
    runtime: get traceback from VDSO code · 419c0645
    Ian Lance Taylor authored
    Currently if a profiling signal arrives while executing within a VDSO
    the profiler will report _ExternalCode, which is needlessly confusing
    for a pure Go program. Change the VDSO calling code to record the
    caller's PC/SP, so that we can do a traceback from that point. If that
    fails for some reason, report _VDSO rather than _ExternalCode, which
    should at least point in the right direction.
    
    This adds some instructions to the code that calls the VDSO, but the
    slowdown is reasonably negligible:
    
    name                                  old time/op  new time/op  delta
    ClockVDSOAndFallbackPaths/vDSO-8      40.5ns ± 2%  41.3ns ± 1%  +1.85%  (p=0.002 n=10+10)
    ClockVDSOAndFallbackPaths/Fallback-8  41.9ns ± 1%  43.5ns ± 1%  +3.84%  (p=0.000 n=9+9)
    TimeNow-8                             41.5ns ± 3%  41.5ns ± 2%    ~     (p=0.723 n=10+10)
    
    Fixes #24142
    
    Change-Id: Iacd935db3c4c782150b3809aaa675a71799b1c9c
    Reviewed-on: https://go-review.googlesource.com/97315
    Run-TryBot: Ian Lance Taylor <iant@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: 's avatarAustin Clements <austin@google.com>
    419c0645
vdso_linux.go 7.55 KB