Skip to content

[lldb][DWARF] Remove obsolete calls to Supports_DW_AT_APPLE_objc_complete_type and DW_AT_decl_file_attributes_are_invalid #120226

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Dec 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -1712,8 +1712,7 @@ DWARFASTParserClang::ParseStructureLikeDIE(const SymbolContext &sc,

if ((attrs.class_language == eLanguageTypeObjC ||
attrs.class_language == eLanguageTypeObjC_plus_plus) &&
!attrs.is_complete_objc_class &&
die.Supports_DW_AT_APPLE_objc_complete_type()) {
!attrs.is_complete_objc_class) {
// We have a valid eSymbolTypeObjCClass class symbol whose name
// matches the current objective C class that we are trying to find
// and this DIE isn't the complete definition (we checked
Expand Down
4 changes: 0 additions & 4 deletions lldb/source/Plugins/SymbolFile/DWARF/DWARFBaseDIE.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,10 +107,6 @@ bool DWARFBaseDIE::HasChildren() const {
return m_die && m_die->HasChildren();
}

bool DWARFBaseDIE::Supports_DW_AT_APPLE_objc_complete_type() const {
return IsValid() && GetDWARF()->Supports_DW_AT_APPLE_objc_complete_type(m_cu);
}

DWARFAttributes DWARFBaseDIE::GetAttributes(Recurse recurse) const {
if (IsValid())
return m_die->GetAttributes(m_cu, recurse);
Expand Down
4 changes: 0 additions & 4 deletions lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -736,10 +736,6 @@ bool DWARFUnit::LinkToSkeletonUnit(DWARFUnit &skeleton_unit) {
return false; // Already linked to a different unit.
}

bool DWARFUnit::Supports_DW_AT_APPLE_objc_complete_type() { return true; }

bool DWARFUnit::DW_AT_decl_file_attributes_are_invalid() { return false; }

bool DWARFUnit::Supports_unnamed_objc_bitfields() {
if (GetProducer() == eProducerClang)
return GetProducerVersion() >= llvm::VersionTuple(425, 0, 13);
Expand Down
4 changes: 0 additions & 4 deletions lldb/source/Plugins/SymbolFile/DWARF/DWARFUnit.h
Original file line number Diff line number Diff line change
Expand Up @@ -172,10 +172,6 @@ class DWARFUnit : public UserID {

bool LinkToSkeletonUnit(DWARFUnit &skeleton_unit);

bool Supports_DW_AT_APPLE_objc_complete_type();

bool DW_AT_decl_file_attributes_are_invalid();

bool Supports_unnamed_objc_bitfields();

SymbolFileDWARF &GetSymbolFileDWARF() const { return m_dwarf; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -271,11 +271,6 @@ void DebugNamesDWARFIndex::GetCompleteObjCClass(
// Report invalid
continue;
}
DWARFUnit *cu = die.GetCU();
if (!cu->Supports_DW_AT_APPLE_objc_complete_type()) {
incomplete_types.push_back(die);
continue;
}

if (die.GetAttributeValueAsUnsigned(DW_AT_APPLE_objc_complete_type, 0)) {
// If we find the complete version we're done.
Expand Down
37 changes: 2 additions & 35 deletions lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -472,8 +472,7 @@ SymbolFileDWARF::SymbolFileDWARF(ObjectFileSP objfile_sp,
: SymbolFileCommon(std::move(objfile_sp)), m_debug_map_module_wp(),
m_debug_map_symfile(nullptr),
m_context(m_objfile_sp->GetModule()->GetSectionList(), dwo_section_list),
m_fetched_external_modules(false),
m_supports_DW_AT_APPLE_objc_complete_type(eLazyBoolCalculate) {}
m_fetched_external_modules(false) {}

SymbolFileDWARF::~SymbolFileDWARF() = default;

Expand Down Expand Up @@ -2920,37 +2919,6 @@ Symbol *SymbolFileDWARF::GetObjCClassSymbol(ConstString objc_class_name) {
return objc_class_symbol;
}

// Some compilers don't emit the DW_AT_APPLE_objc_complete_type attribute. If
// they don't then we can end up looking through all class types for a complete
// type and never find the full definition. We need to know if this attribute
// is supported, so we determine this here and cache th result. We also need to
// worry about the debug map
// DWARF file
// if we are doing darwin DWARF in .o file debugging.
bool SymbolFileDWARF::Supports_DW_AT_APPLE_objc_complete_type(DWARFUnit *cu) {
if (m_supports_DW_AT_APPLE_objc_complete_type == eLazyBoolCalculate) {
m_supports_DW_AT_APPLE_objc_complete_type = eLazyBoolNo;
if (cu && cu->Supports_DW_AT_APPLE_objc_complete_type())
m_supports_DW_AT_APPLE_objc_complete_type = eLazyBoolYes;
else {
DWARFDebugInfo &debug_info = DebugInfo();
const uint32_t num_compile_units = GetNumCompileUnits();
for (uint32_t cu_idx = 0; cu_idx < num_compile_units; ++cu_idx) {
DWARFUnit *dwarf_cu = debug_info.GetUnitAtIndex(cu_idx);
if (dwarf_cu != cu &&
dwarf_cu->Supports_DW_AT_APPLE_objc_complete_type()) {
m_supports_DW_AT_APPLE_objc_complete_type = eLazyBoolYes;
break;
}
}
}
if (m_supports_DW_AT_APPLE_objc_complete_type == eLazyBoolNo &&
GetDebugMapSymfile())
return m_debug_map_symfile->Supports_DW_AT_APPLE_objc_complete_type(this);
}
return m_supports_DW_AT_APPLE_objc_complete_type == eLazyBoolYes;
}

// This function can be used when a DIE is found that is a forward declaration
// DIE and we want to try and find a type that has the complete definition.
TypeSP SymbolFileDWARF::FindCompleteObjCDefinitionTypeForDIE(
Expand All @@ -2968,8 +2936,7 @@ TypeSP SymbolFileDWARF::FindCompleteObjCDefinitionTypeForDIE(
if (type_die == die || !IsStructOrClassTag(type_die.Tag()))
return true;

if (must_be_implementation &&
type_die.Supports_DW_AT_APPLE_objc_complete_type()) {
if (must_be_implementation) {
const bool try_resolving_type = type_die.GetAttributeValueAsUnsigned(
DW_AT_APPLE_objc_complete_type, 0);
if (!try_resolving_type)
Expand Down
3 changes: 0 additions & 3 deletions lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h
Original file line number Diff line number Diff line change
Expand Up @@ -223,8 +223,6 @@ class SymbolFileDWARF : public SymbolFileCommon {
virtual void GetObjCMethods(ConstString class_name,
llvm::function_ref<bool(DWARFDIE die)> callback);

bool Supports_DW_AT_APPLE_objc_complete_type(DWARFUnit *cu);

DebugMacrosSP ParseDebugMacros(lldb::offset_t *offset);

static DWARFDIE GetParentSymbolContextDIE(const DWARFDIE &die);
Expand Down Expand Up @@ -524,7 +522,6 @@ class SymbolFileDWARF : public SymbolFileCommon {
ExternalTypeModuleMap m_external_type_modules;
std::unique_ptr<DWARFIndex> m_index;
bool m_fetched_external_modules : 1;
LazyBool m_supports_DW_AT_APPLE_objc_complete_type;

typedef std::set<DIERef> DIERefSet;
typedef llvm::StringMap<DIERefSet> NameToOffsetMap;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,9 +248,8 @@ SymbolFile *SymbolFileDWARFDebugMap::CreateInstance(ObjectFileSP objfile_sp) {
}

SymbolFileDWARFDebugMap::SymbolFileDWARFDebugMap(ObjectFileSP objfile_sp)
: SymbolFileCommon(std::move(objfile_sp)), m_flags(), m_compile_unit_infos(),
m_func_indexes(), m_glob_indexes(),
m_supports_DW_AT_APPLE_objc_complete_type(eLazyBoolCalculate) {}
: SymbolFileCommon(std::move(objfile_sp)), m_flags(),
m_compile_unit_infos(), m_func_indexes(), m_glob_indexes() {}

SymbolFileDWARFDebugMap::~SymbolFileDWARFDebugMap() = default;

Expand Down Expand Up @@ -1157,22 +1156,6 @@ DWARFDIE SymbolFileDWARFDebugMap::FindDefinitionDIE(const DWARFDIE &die) {
return result;
}

bool SymbolFileDWARFDebugMap::Supports_DW_AT_APPLE_objc_complete_type(
SymbolFileDWARF *skip_dwarf_oso) {
if (m_supports_DW_AT_APPLE_objc_complete_type == eLazyBoolCalculate) {
m_supports_DW_AT_APPLE_objc_complete_type = eLazyBoolNo;
ForEachSymbolFile([&](SymbolFileDWARF *oso_dwarf) {
if (skip_dwarf_oso != oso_dwarf &&
oso_dwarf->Supports_DW_AT_APPLE_objc_complete_type(nullptr)) {
m_supports_DW_AT_APPLE_objc_complete_type = eLazyBoolYes;
return IterationAction::Stop;
}
return IterationAction::Continue;
});
}
return m_supports_DW_AT_APPLE_objc_complete_type == eLazyBoolYes;
}

TypeSP SymbolFileDWARFDebugMap::FindCompleteObjCDefinitionTypeForDIE(
const DWARFDIE &die, ConstString type_name,
bool must_be_implementation) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -279,8 +279,6 @@ class SymbolFileDWARFDebugMap : public SymbolFileCommon {

DWARFDIE FindDefinitionDIE(const DWARFDIE &die);

bool Supports_DW_AT_APPLE_objc_complete_type(SymbolFileDWARF *skip_dwarf_oso);

lldb::TypeSP FindCompleteObjCDefinitionTypeForDIE(
const DWARFDIE &die, ConstString type_name, bool must_be_implementation);

Expand Down Expand Up @@ -331,7 +329,6 @@ class SymbolFileDWARFDebugMap : public SymbolFileCommon {
llvm::DenseMap<lldb::opaque_compiler_type_t, DIERef>
m_forward_decl_compiler_type_to_die;
UniqueDWARFASTTypeMap m_unique_ast_type_map;
LazyBool m_supports_DW_AT_APPLE_objc_complete_type;
DebugMap m_debug_map;

// When an object file from the debug map gets parsed in
Expand Down
Loading