cmd/link: more efficient encoding of DWARF line number information
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: Ian Lance Taylor <iant@golang.org> Run-TryBot: Ian Lance Taylor <iant@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Showing
Please register or sign in to comment