On Mon, 28 Sep 2020 12:42:33 +0200, Jakub Jelinek wrote:
On Mon, Sep 28, 2020 at 12:31:59PM +0200, Mark Wielaard wrote:
> Finally I am interested in your proposal to implement a different way
> to reduce the size of DIE trees by eliminating "unused" DIEs. It is
> hard to predict what effect that would have without seeing an
> implementation (in theory GCC with LTO would not actually generate
> debuginfo for unused functions). But I think that can be done separate
> from your proposal and combined with other size reduction techniques.
And note that GCC already does implement
-feliminate-unused-debug-{symbols,types} which are enabled by default and
are (at least in my eyes) sometimes too aggressive, so by eliminating even further
DIEs the debug experience might be even worse.
git clone
git://git.jankratochvil.net/massrebuild
./dwarfredundant
lldb-debuginfo-11.0.0-0.2.rc3.fc34.x86_64/usr/lib/debug/usr/lib64/liblldb.so.11.0.0-11.0.0-0.2.rc3.fc34.x86_64.debug
For example:
saved=27:
0x0193b058: DW_TAG_subprogram [47] *
DW_AT_abstract_origin [DW_FORM_ref_addr] (0x000000000515d936
"_ZN12lldb_private17StoppointLocationD2Ev")
DW_AT_low_pc [DW_FORM_addr] (0x0000000000000000)
DW_AT_high_pc [DW_FORM_udata] (1)
DW_AT_frame_base [DW_FORM_exprloc] (DW_OP_call_frame_cfa)
DW_AT_GNU_all_call_sites [DW_FORM_flag_present] (true)
DW_AT_sibling [DW_FORM_ref_udata] (cu + 0x1da4f => {0x0193b073})
0x0193b06b: DW_TAG_formal_parameter [55]
DW_AT_abstract_origin [DW_FORM_ref_addr] (0x000000000515d941)
DW_AT_location [DW_FORM_exprloc] (DW_OP_reg5 RDI)
0x0193b072: NULL
This DIE describes only a concrete function instance at address 0x0.
No function can exist on address 0x0 on x86_64, that is
a discarded/deduplicated function:
[Dwarf-Discuss] DWARF for linker GC'd code
http://lists.dwarfstd.org/pipermail/dwarf-discuss-dwarfstd.org/2020-July/...
I do not see what any DWARF consumer could find out from such a DIE.
And there are many such DIEs, something a bit less than 28% of what DWZ saves
(28% is incl. removal of DW_UT_type declarations).
Jan