[lldb] Trust the arange accelerator tables in dSYMs

When ingesting aranges from a dSYM, always trust the contents of the
accelerator table since it always comes from dsymutil.

According to Instruments, skipping the decoding of all CU DIEs to get at
the DW_AT_ranges attribute removes ~3.5 seconds from setting a
breakpoint by file/line when debugging clang with a dSYM. Interestingly
on the wall clock the speedup is less noticeable, but still present.

rdar://problem/56057688

Differential Revision: https://reviews.llvm.org/D68655
This commit is contained in:
Jonas Devlieghere 2023-01-09 14:33:39 -08:00
parent b1b9f1789e
commit 8b259fe573
No known key found for this signature in database
GPG Key ID: 49CC0BD90FDEED4D

View File

@ -53,13 +53,20 @@ const DWARFDebugAranges &DWARFDebugInfo::GetCompileUnitAranges() {
}
// Manually build arange data for everything that wasn't in .debug_aranges.
const size_t num_units = GetNumUnits();
for (size_t idx = 0; idx < num_units; ++idx) {
DWARFUnit *cu = GetUnitAtIndex(idx);
// Skip this step for dSYMs as we can trust dsymutil to have emitted complete
// aranges.
const bool is_dsym =
m_dwarf.GetObjectFile() &&
m_dwarf.GetObjectFile()->GetType() == ObjectFile::eTypeDebugInfo;
if (!is_dsym) {
const size_t num_units = GetNumUnits();
for (size_t idx = 0; idx < num_units; ++idx) {
DWARFUnit *cu = GetUnitAtIndex(idx);
dw_offset_t offset = cu->GetOffset();
if (cus_with_data.find(offset) == cus_with_data.end())
cu->BuildAddressRangeTable(m_cu_aranges_up.get());
dw_offset_t offset = cu->GetOffset();
if (cus_with_data.find(offset) == cus_with_data.end())
cu->BuildAddressRangeTable(m_cu_aranges_up.get());
}
}
const bool minimize = true;