Why do not demangle at link time?
Dmitry Antipov <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
For a huge C++ binaries, it's quite typical to have a bottleneck in demangling while
loading symbols; I've seen >30% of time spent in d_xxx and friends, for example:
12.19% gdb gdb [.] d_print_comp_inner
10.11% gdb gdb [.] cp_find_first_component_aux
6.21% gdb gdb [.] minimal_symbol_reader::install
5.11% gdb gdb [.] htab_hash_string
4.00% gdb gdb [.] d_print_comp
3.56% gdb gdb [.] d_count_templates_scopes
2.66% gdb libc-2.25.so [.] __strcmp_sse2_unaligned
2.58% gdb libc-2.25.so [.] _int_malloc
1.86% gdb gdb [.] cp_search_name_hash
1.69% gdb libc-2.25.so [.] strlen
1.65% gdb gdb [.] d_name
1.52% gdb gdb [.] cplus_demangle_type
1.52% gdb gdb [.] compare_minimal_symbols
1.51% gdb gdb [.] htab_find_slot_with_hash
1.31% gdb gdb [.] d_make_comp
(observed on Chrome binary with .gdb_index embedded at link time). OK, .gdb_index
was designed to load symbols faster, and both gold and lld can emit it when linking;
so why do not (optionally) offload all demangling to linkers and extend .gdb_index
to add a kind of mapping from mangled to demangled symbol names?
Dmitry