• David Chase's avatar
    cmd/link: process is_stmt data into dwarf line tables · dead03b7
    David Chase authored
    To improve debugging, instructions should be annotated with
    DWARF is_stmt.  The DWARF default before was is_stmt=1, and
    to remove "jumpy" stepping the optimizer was tagging
    instructions with a no-position position, which interferes
    with the accuracy of profiling information.  This allows
    that to be corrected, and also allows more "jumpy" positions
    to be annotated with is_stmt=0 (these changes were not made
    for 1.10 because of worries about further messing up
    profiling).
    
    The is_stmt values are placed in a pc-encoded table and
    passed through a symbol derived from the name of the
    function and processed in the linker alongside its
    processing of each function's pc/line tables.
    
    The only change in binary size is in the .debug_line tables
    measured with "objdump -h --section=.debug_line go1.test"
    For go1.test, these are 2614 bytes larger,
    or 0.72% of the size of .debug_line,
    or 0.025% of the file size.
    
    This will increase in proportion to how much the is_stmt
    flag is used (toggled).
    
    Change-Id: Ic1f1aeccff44591ad0494d29e1a0202a3c506a7a
    Reviewed-on: https://go-review.googlesource.com/93664
    Run-TryBot: David Chase <drchase@google.com>
    Reviewed-by: 's avatarHeschi Kreinick <heschi@google.com>
    dead03b7
symkind.go 2.54 KB