[Lldb-commits] [lldb] e47f40a - [lldb][DWARF] Use actual DWARF format when computing header size (#173600)
via lldb-commits
lldb-commits at lists.llvm.org
Mon Jan 5 02:31:00 PST 2026
Author: Hemang Gadhavi
Date: 2026-01-05T16:00:56+05:30
New Revision: e47f40ace603d2f13ce0e985a8980d966d60427a
URL: https://github.com/llvm/llvm-project/commit/e47f40ace603d2f13ce0e985a8980d966d60427a
DIFF: https://github.com/llvm/llvm-project/commit/e47f40ace603d2f13ce0e985a8980d966d60427a.diff
LOG: [lldb][DWARF] Use actual DWARF format when computing header size (#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.
Added:
Modified:
lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
Removed:
################################################################################
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(
More information about the lldb-commits
mailing list