Support DW_AT_high_pc DWARF4 constant form
Fri Apr 27 12:17:00 GMT 2012
The DWARF spec says (since version 4) that DW_AT_high_pc can be
represented by a constant form.
If the value of the DW_AT_high_pc is of class address, it is the
relocated address of the first location past the last
instruction associated with the entity; if it is of class
constant, the value is an unsigned integer offset which when
added to the low PC gives the address of the first location past
the last instruction associated with the entity.
I have a patch for gcc to encode DW_AT_high_pc this way (which saves a
lot of relocations) and jakub has a patch for dwz to encode
DW_AT_high_pc in the smallest possible constant form, which can save ~1%
on the size of debuginfo.
Here are three patches to make binutils handle this.
The first is for bfd dwarf2.c dwarf reader. Without this some testcases
fail when using a gcc that outputs this new form.
The second is for gas dwarf2dbg.c to output the new form for DWARF
version 4+. Though this isn't actually used in practice, since almost
everything still uses DWARF version 2, except for VMS in tc-ia64.h.
The patch does include two fixes for the ranges and line table output
which should not use the wrong version code. I did test that all
testcases do pass when explicitly setting DWARF2_VERSION to 4 now.
The last is for gold --gdb-index support. It includes a new testcase
that will fail when using a gcc that outputs the new form.
Patches in separate emails:
[PATCH 1/3] bfd: DW_AT_high_pc can be relative to DW_AT_low_pc.
[PATCH 2/3] gas: Make dwarf2dbg.c versions specific and add
[PATCH 3/3] gold: Handle DW_AT_high_pc as offset from DW_AT_low_pc
More information about the Binutils