https://github.com/HemangGadhavi created https://github.com/llvm/llvm-project/pull/173600
The list table header size was always computed assuming `DWARF32`, even when parsing `DWARF64` units. This results in an incorrect header size for DWARF64 and can cause mis-parsing of list tables. Fix this by using the `DWARF` format from the form parameters instead of always assuming `DWARF32` when computing the `DWARF` header size. >From d6f9072013976104dd18de2095b80918f0df985e Mon Sep 17 00:00:00 2001 From: Hemang Gadhavi <[email protected]> Date: Fri, 26 Dec 2025 00:53:50 -0600 Subject: [PATCH] [lldb][DWARF] Use actual DWARF format when computing header size --- lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp index b78e6ce807bca..429cc7a4a611a 100644 --- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp +++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp @@ -134,12 +134,14 @@ void DWARFUnit::ExtractUnitDIEIfNeeded() { else if (dwo_symbol_file->GetDWARFContext() .getOrLoadRngListsData() .GetByteSize() > 0) - dwo_cu->SetRangesBase(llvm::DWARFListTableHeader::getHeaderSize(DWARF32)); + dwo_cu->SetRangesBase( + llvm::DWARFListTableHeader::getHeaderSize(GetFormParams().Format)); if (GetVersion() >= 5 && dwo_symbol_file->GetDWARFContext().getOrLoadLocListsData().GetByteSize() > 0) - dwo_cu->SetLoclistsBase(llvm::DWARFListTableHeader::getHeaderSize(DWARF32)); + dwo_cu->SetLoclistsBase( + llvm::DWARFListTableHeader::getHeaderSize(GetFormParams().Format)); dwo_cu->SetBaseAddress(GetBaseAddress()); @@ -521,7 +523,8 @@ void DWARFUnit::SetLoclistsBase(dw_addr_t loclists_base) { } m_loclists_base = loclists_base; - uint64_t header_size = llvm::DWARFListTableHeader::getHeaderSize(DWARF32); + uint64_t header_size = + llvm::DWARFListTableHeader::getHeaderSize(GetFormParams().Format); if (loclists_base < header_size) return; @@ -591,7 +594,8 @@ DWARFUnit::GetRnglistTable() { m_rnglist_table_done = true; if (auto table_or_error = ParseListTableHeader<llvm::DWARFDebugRnglistTable>( - GetRnglistData().GetAsLLVMDWARF(), m_ranges_base, DWARF32)) + GetRnglistData().GetAsLLVMDWARF(), m_ranges_base, + GetFormParams().Format)) m_rnglist_table = std::move(table_or_error.get()); else GetSymbolFileDWARF().GetObjectFile()->GetModule()->ReportError( _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
