• John Dethridge's avatar
    cmd/link: more efficient encoding of DWARF line number information · 8f65379f
    John Dethridge authored
    The (pc, line) deltas in the line number information are currently encoded
    either with a special opcode, or with a triplet of DW_LNS_advance_pc,
    DW_LNS_advance_line, and DW_LNS_copy instructions.  Instead of DW_LNS_copy,
    this change always uses a special opcode, which can make DW_LNS_advance_pc or
    DW_LNS_advance_line unnecessary, or make their operands take fewer bytes.  It
    chooses the special opcode so that the encoding of the remaining deltas is as
    small as possible.
    
    Use DW_LNS_const_add_pc or DW_LNS_fixed_advance_pc instead of DW_LNS_advance_pc
    for deltas where they save a byte.
    
    Update LINE_BASE and LINE_RANGE constants to optimal values for this strategy.
    
    This reduces line number information by about 35% and total size by about 2%
    for a typical binary.
    
    Change-Id: Ia61d6bf19c95c1d34ba63c67ed32b376beda225f
    Reviewed-on: https://go-review.googlesource.com/30577Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
    Run-TryBot: Ian Lance Taylor <iant@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    8f65379f
dwarf.go 48.2 KB