[PATCH] D86110: [WIP][DebugInfo] Lazily parse debug_loclist offsets

David Blaikie via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 17 14:34:42 PDT 2020


dblaikie created this revision.
dblaikie added a reviewer: labath.
Herald added subscribers: llvm-commits, lldb-commits, hiraditya, aprantl.
Herald added projects: LLDB, LLVM.
dblaikie requested review of this revision.
Herald added a subscriber: JDevlieghere.

Parsing DWARFv5 debug_loclist offsets when a CU is parsed is weighing
down memory usage of symbolizers that don't need to parse this data at
all. There's not much benefit to caching these anyway - since they are
O(1) lookup and reading once you know where the offset list starts (and
can do bounds checking with the offset list size too).

In general, I think it might be time to start paying down some of the
technical debt of loc/loclist/range/rnglist parsing to try to unify it a
bit more.

eg:

- Currently DWARFUnit has: RangeSection, RangeSectionBase, LocSection, LocSectionBase, LocTable, RngListTable, LoclistTableHeader (be nice if these were all wrapped up in two variables - one for loclists, one for rnglists)

- rnglists and loclists are handled differently (see: LoclistTableHeader, but no RnglistTableHeader)

- maybe all these types could be less stateful - lazily parse what they need to, even reparsing rather than caching because it doesn't seem too expensive, for instance. (though admittedly so long as it's constantcost/overead per compilatiton that's probably adequate)

- Maybe implementing and using a DWARFDataExtractor that can be sub-ranged (so we could slice it up to just the single contribution) - though maybe that's not so useful because loc/ranges need to refer to it by absolute, not contribution-relative mechanisms


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D86110

Files:
  lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
  lldb/test/Shell/SymbolFile/DWARF/DW_AT_loclists_base.s
  llvm/include/llvm/DebugInfo/DWARF/DWARFDebugLoc.h
  llvm/include/llvm/DebugInfo/DWARF/DWARFListTable.h
  llvm/include/llvm/DebugInfo/DWARF/DWARFUnit.h
  llvm/lib/DebugInfo/DWARF/DWARFContext.cpp
  llvm/lib/DebugInfo/DWARF/DWARFListTable.cpp
  llvm/lib/DebugInfo/DWARF/DWARFUnit.cpp

-------------- next part --------------
A non-text attachment was scrubbed...
Name: D86110.286150.patch
Type: text/x-patch
Size: 10455 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200817/247b0f02/attachment.bin>


More information about the llvm-commits mailing list