This is the mail archive of the elfutils-devel@sourceware.org mailing list for the elfutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] libdw: Handle split Dwarf Dies in dwarf_die_addr_die.


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)


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]