Add a variant of DWARFDie::find() and DWARFDie::findRecursively() that takes a llvm::ArrayRef<dwarf::Attribute>.
This allows us efficiently look for more than one attribute, something that is quite common in DWARF consumption.
Differential Revision: https://reviews.llvm.org/D28704
llvm-svn: 291967
diff --git a/llvm/tools/dsymutil/DwarfLinker.cpp b/llvm/tools/dsymutil/DwarfLinker.cpp
index 8b1a2d1..a4033ce 100644
--- a/llvm/tools/dsymutil/DwarfLinker.cpp
+++ b/llvm/tools/dsymutil/DwarfLinker.cpp
@@ -3184,10 +3184,8 @@
static uint64_t getDwoId(const DWARFDie &CUDie,
const DWARFUnit &Unit) {
- auto DwoId = dwarf::toUnsigned(CUDie.find(dwarf::DW_AT_dwo_id));
- if (DwoId)
- return *DwoId;
- DwoId = dwarf::toUnsigned(CUDie.find(dwarf::DW_AT_GNU_dwo_id));
+ auto DwoId = dwarf::toUnsigned(CUDie.find({dwarf::DW_AT_dwo_id,
+ dwarf::DW_AT_GNU_dwo_id}));
if (DwoId)
return *DwoId;
return 0;
@@ -3196,9 +3194,9 @@
bool DwarfLinker::registerModuleReference(
const DWARFDie &CUDie, const DWARFUnit &Unit,
DebugMap &ModuleMap, unsigned Indent) {
- std::string PCMfile = dwarf::toString(CUDie.find(dwarf::DW_AT_dwo_name), "");
- if (PCMfile.empty())
- PCMfile = dwarf::toString(CUDie.find(dwarf::DW_AT_GNU_dwo_name), "");
+ std::string PCMfile =
+ dwarf::toString(CUDie.find({dwarf::DW_AT_dwo_name,
+ dwarf::DW_AT_GNU_dwo_name}), "");
if (PCMfile.empty())
return false;