This is the mail archive of the
mailing list for the elfutils project.
Re: [PATCH] libdw: Add new dwarf_get_units function to iterate over all units.
- From: Mark Wielaard <mark at klomp dot org>
- To: elfutils-devel at sourceware dot org
- Date: Wed, 21 Feb 2018 17:15:22 +0100
- Subject: Re: [PATCH] libdw: Add new dwarf_get_units function to iterate over all units.
- Authentication-results: sourceware.org; auth=none
- References: <firstname.lastname@example.org>
On Tue, 2018-01-30 at 13:34 +0100, Mark Wielaard wrote:
> The dwarf_nextcu and dwarf_next_unit functions provide information to
> construct the offset to construct the associated CU DIE using dwarf_offdie
> or dwarf_offdie_types. This requires the user to know beforehand where
> to DIE data is stored (in the .debug_info or .debug_types section).
> For type units one also needs to use the type offset to create the actual
> type DIE. In DWARF5 DIEs can come from even more data locations. And there
> are also skeleton units which require the user to find the associated
> split compile unit DIE (which would come from a different file).
> The new dwarf_get_units function simplifies iterating over the units in
> a DWARF file. It doesn't require the user to know where the DIE data is
> stored, it will automagically iterate over all know data sources (sections)
> returning the Dwarf_CU and the associated Dwarf_Die if requested. If the
> user requests to know the associated "subdie" it will also be resolved.
> This implementation returns the correct subdie for type units. A future
> version will also handle skeleton units and return the associated skeleton
> DIE and split unit DIE.
> readelf has been adapted to use the new iterator and print the new DWARF5
> unit header information (which it gets through dwarf_cu_die). The new
> interface hides which section exactly to iterate on (by design). readelf
> works around that by "cheating". It sets up a Dwarf_CU so that it gets
> the data from the right section, using the (normally) internal data
I pushed this to master.