mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-10-08 11:44:05 +00:00
[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:
parent
b1b9f1789e
commit
8b259fe573
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user