[Lldb-commits] [lldb] 3e023d8 - [lldb] Remove DWARFDebugInfo DIERef footguns (#92894)
via lldb-commits
lldb-commits at lists.llvm.org
Wed May 29 22:49:03 PDT 2024
Author: Pavel Labath
Date: 2024-05-30T07:48:59+02:00
New Revision: 3e023d87d8e9a7bcf0a2feb2cee9b9ca47643a7e
URL: https://github.com/llvm/llvm-project/commit/3e023d87d8e9a7bcf0a2feb2cee9b9ca47643a7e
DIFF: https://github.com/llvm/llvm-project/commit/3e023d87d8e9a7bcf0a2feb2cee9b9ca47643a7e.diff
LOG: [lldb] Remove DWARFDebugInfo DIERef footguns (#92894)
DWARFDebugInfo doesn't know how to resolve the "file_index" component of
a DIERef. This patch removes GetUnit (in favor of existing
GetUnitContainingDIEOffset) and changes GetDIE to take only the
components it actually uses.
Added:
Modified:
lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.h
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp
Removed:
################################################################################
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp
index d28da728728e5..c37cc91e08ed1 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.cpp
@@ -222,10 +222,6 @@ DWARFUnit *DWARFDebugInfo::GetUnitAtOffset(DIERef::Section section,
return result;
}
-DWARFUnit *DWARFDebugInfo::GetUnit(const DIERef &die_ref) {
- return GetUnitContainingDIEOffset(die_ref.section(), die_ref.die_offset());
-}
-
DWARFUnit *
DWARFDebugInfo::GetUnitContainingDIEOffset(DIERef::Section section,
dw_offset_t die_offset) {
@@ -253,9 +249,8 @@ bool DWARFDebugInfo::ContainsTypeUnits() {
//
// Get the DIE (Debug Information Entry) with the specified offset.
DWARFDIE
-DWARFDebugInfo::GetDIE(const DIERef &die_ref) {
- DWARFUnit *cu = GetUnit(die_ref);
- if (cu)
- return cu->GetNonSkeletonUnit().GetDIE(die_ref.die_offset());
+DWARFDebugInfo::GetDIE(DIERef::Section section, dw_offset_t die_offset) {
+ if (DWARFUnit *cu = GetUnitContainingDIEOffset(section, die_offset))
+ return cu->GetNonSkeletonUnit().GetDIE(die_offset);
return DWARFDIE(); // Not found
}
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.h b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.h
index 456ebd908ccb2..4706b55d38ea9 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.h
+++ b/lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugInfo.h
@@ -38,11 +38,10 @@ class DWARFDebugInfo {
uint32_t *idx_ptr = nullptr);
DWARFUnit *GetUnitContainingDIEOffset(DIERef::Section section,
dw_offset_t die_offset);
- DWARFUnit *GetUnit(const DIERef &die_ref);
DWARFUnit *GetSkeletonUnit(DWARFUnit *dwo_unit);
DWARFTypeUnit *GetTypeUnitForHash(uint64_t hash);
bool ContainsTypeUnits();
- DWARFDIE GetDIE(const DIERef &die_ref);
+ DWARFDIE GetDIE(DIERef::Section section, dw_offset_t die_offset);
enum {
eDumpFlag_Verbose = (1 << 0), // Verbose dumping
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index bc489e5b8ad46..661e4a78a0215 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -1761,7 +1761,8 @@ SymbolFileDWARF::GetDIE(const DIERef &die_ref) {
if (SymbolFileDWARFDebugMap *debug_map = GetDebugMapSymfile()) {
symbol_file = debug_map->GetSymbolFileByOSOIndex(*file_index); // OSO case
if (symbol_file)
- return symbol_file->DebugInfo().GetDIE(die_ref);
+ return symbol_file->DebugInfo().GetDIE(die_ref.section(),
+ die_ref.die_offset());
return DWARFDIE();
}
@@ -1778,7 +1779,7 @@ SymbolFileDWARF::GetDIE(const DIERef &die_ref) {
if (symbol_file)
return symbol_file->GetDIE(die_ref);
- return DebugInfo().GetDIE(die_ref);
+ return DebugInfo().GetDIE(die_ref.section(), die_ref.die_offset());
}
/// Return the DW_AT_(GNU_)dwo_id.
@@ -3786,7 +3787,7 @@ SymbolFileDWARF::FindBlockContainingSpecification(
// Give the concrete function die specified by "func_die_offset", find the
// concrete block whose DW_AT_specification or DW_AT_abstract_origin points
// to "spec_block_die_offset"
- return FindBlockContainingSpecification(DebugInfo().GetDIE(func_die_ref),
+ return FindBlockContainingSpecification(GetDIE(func_die_ref),
spec_block_die_offset);
}
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp
index 8fd369c65f86b..e4db39cabf6fe 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDwo.cpp
@@ -145,7 +145,7 @@ SymbolFileDWARFDwo::GetTypeSystemForLanguage(LanguageType language) {
DWARFDIE
SymbolFileDWARFDwo::GetDIE(const DIERef &die_ref) {
if (die_ref.file_index() == GetFileIndex())
- return DebugInfo().GetDIE(die_ref);
+ return DebugInfo().GetDIE(die_ref.section(), die_ref.die_offset());
return GetBaseSymbolFile().GetDIE(die_ref);
}
More information about the lldb-commits
mailing list