libdw: Handle split Dwarf Dies in dwarf_die_addr_die.
authorMark Wielaard <mark@klomp.org>
Tue, 29 May 2018 21:49:21 +0000 (23:49 +0200)
committerMark Wielaard <mark@klomp.org>
Thu, 31 May 2018 15:03:19 +0000 (17:03 +0200)
commit7d6fe0a39f6ae5c516ffd63558e12b24297bf982
tree30469e6da3f107797bb69a1d0a480eafc4ba50fd
parentb37feac1a8ceebb0748cb28d219aa8387d0885dd
libdw: Handle split Dwarf Dies in dwarf_die_addr_die.

dwarf_die_addr_die can be used to turn an Dwarf_Die addr back into a
full Dwarf_Die, just given the original Dwarf debug handle. This now
also works for Dwarf_Dies which originated from a split Dwarf. Whenever
a split Dwarf_CU is found the Dwarf it originated from is registered
with the Dwarf that the skeleton Dwarf_CU came from. All registered
split Dwarfs are then searched by dwarf_die_addr_die if the addr didn't
match the main Dwarf or the alt Dwarf.

One limitation in this implementation is that only DIEs that come from
the main .debug_info in the .dwo are supported. Theoretically there could
also be DIEs in an .debug_type or from other/multiple (comdat) sections.

New tests are added for dwarf-4, dwarf-5, split-dwarf-4, split-dwarf-5
and version 4 and 5 dwo files.

Signed-off-by: Mark Wielaard <mark@klomp.org>
libdw/ChangeLog
libdw/dwarf_cuoffset.c
libdw/dwarf_die_addr_die.c
libdw/dwarf_end.c
libdw/libdwP.h
libdw/libdw_find_split_unit.c
libdw/libdw_findcu.c
tests/ChangeLog
tests/dwarf-die-addr-die.c
tests/run-dwarf-die-addr-die.sh