This is the mail archive of the
elfutils-devel@sourceware.org
mailing list for the elfutils project.
Re: [PATCH] libdw: Handle split Dwarf Dies in dwarf_die_addr_die.
- From: Mark Wielaard <mark at klomp dot org>
- To: elfutils-devel at sourceware dot org
- Date: Wed, 30 May 2018 00:11:10 +0200
- Subject: Re: [PATCH] libdw: Handle split Dwarf Dies in dwarf_die_addr_die.
- References: <1527631066-31956-1-git-send-email-mark@klomp.org>
On Tue, 2018-05-29 at 23:57 +0200, Mark Wielaard wrote:
> 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.
And clearly I hadn't done a make distcheck because then I would have
known that valgrind would warn about leaking the new search tree.
Simple fix:
diff --git a/libdw/dwarf_end.c b/libdw/dwarf_end.c
index 23a50a0..29795c1 100644
--- a/libdw/dwarf_end.c
+++ b/libdw/dwarf_end.c
@@ -91,6 +91,9 @@ dwarf_end (Dwarf *dwarf)
/* Search tree for decoded .debug_lines units. */
tdestroy (dwarf->files_lines, noop_free);
+ /* And the split Dwarf. */
+ tdestroy (dwarf->split_tree, noop_free);
+
struct libdw_memblock *memp = dwarf->mem_tail;
/* The first block is allocated together with the Dwarf object. */
while (memp->prev != NULL)