[llvm-dev] DebugInfo proposal: Emit an explicit empty address range on CUs with no code addresses

David Blaikie via llvm-dev llvm-dev at lists.llvm.org
Wed Nov 28 09:40:32 PST 2018


So I've been looking at a particular performance problem with LLVM's
symbolizer due to the use of ThinLTO, split DWARF, and split DWARF inlining
info.

This combination has a couple of problems:

1) it means multiple CUs in a single DWO, which isn't well
defined/specified, and best avoided - so I'm working on fixing that here
(won't fix split DWARF+Full LTO) because we already don't use cross-CU
references in the split units (because there's no supported way to express
that in DWARF), so we clone/move any DIEs (like subprograms) referenced
cross-CU into the CU that references them (eg: cross-CU inlining places the
abstract subprogram definition for the inlined subroutine into the CU that
has the inlining - rather than cross-CU referencing into the other CU)) -
and in ThinLTO the only reason other units exist is to cross-CU
optimize/inline, no code for imported CUs is ever emitted (except where
it's been inlined) - so a ThinLTO compile has one primary unit, and some
other units it inlines from - so those other units never emit anything in
the split unit, just a few DIEs in the skeleton unit if you're using split
DWARF inlining (or no unit at all if you aren't using that feature) - so
I'm working on making it so those units are non-split (rather than having a
degenerate/empty split unit)

2) symbolizer performance is hurt because whenever it sees a unit without
ranges at the unit DIE, it assumes the producer just skipped those - and
goes searching through the implementation DIEs (which may mean going over
to the .dwo, or loading a whole .dwp) to see where their addresses are.

It's this second step that's a bit painfully unnecessary, especially for a
large DWP on a remote filesystem, etc.

So, anyone have opinions on whether we should

a) decide that a unit without ranges covers no ranges - and don't do the
search

b) emit zero-length ranges on any unit that has no code ranges (low/high pc
zero? Could pick anything, but that seems the most obvious)

Thanks,
- Dave
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20181128/ef4fe67c/attachment.html>


More information about the llvm-dev mailing list