diff options
Diffstat (limited to 'llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp')
-rw-r--r-- | llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp b/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp index f2a837d4cf2..b110480a2c8 100644 --- a/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp +++ b/llvm/tools/llvm-dwarfdump/llvm-dwarfdump.cpp @@ -336,6 +336,15 @@ static bool lookup(DWARFContext &DICtx, uint64_t Address, raw_ostream &OS) { bool collectStatsForObjectFile(ObjectFile &Obj, DWARFContext &DICtx, Twine Filename, raw_ostream &OS); +template <typename AccelTable> +static Optional<uint64_t> getDIEOffset(const AccelTable &Accel, + StringRef Name) { + for (const auto &Entry : Accel.equal_range(Name)) + if (Optional<uint64_t> Off = Entry.getDIEOffset()) + return *Off; + return None; +} + static bool dumpObjectFile(ObjectFile &Obj, DWARFContext &DICtx, Twine Filename, raw_ostream &OS) { logAllUnhandledErrors(DICtx.loadRegisterInfo(Obj), errs(), @@ -363,21 +372,14 @@ static bool dumpObjectFile(ObjectFile &Obj, DWARFContext &DICtx, Twine Filename, if (!Find.empty()) { DumpOffsets[DIDT_ID_DebugInfo] = [&]() -> llvm::Optional<uint64_t> { for (auto Name : Find) { - auto find = [&](const AppleAcceleratorTable &Accel) - -> llvm::Optional<uint64_t> { - for (auto Entry : Accel.equal_range(Name)) - for (auto Atom : Entry) - if (auto Offset = Atom.getAsSectionOffset()) - return Offset; - return None; - }; - if (auto Offset = find(DICtx.getAppleNames())) + if (auto Offset = getDIEOffset(DICtx.getAppleNames(), Name)) + return DumpOffsets[DIDT_ID_DebugInfo] = *Offset; + if (auto Offset = getDIEOffset(DICtx.getAppleTypes(), Name)) return DumpOffsets[DIDT_ID_DebugInfo] = *Offset; - if (auto Offset = find(DICtx.getAppleTypes())) + if (auto Offset = getDIEOffset(DICtx.getAppleNamespaces(), Name)) return DumpOffsets[DIDT_ID_DebugInfo] = *Offset; - if (auto Offset = find(DICtx.getAppleNamespaces())) + if (auto Offset = getDIEOffset(DICtx.getDebugNames(), Name)) return DumpOffsets[DIDT_ID_DebugInfo] = *Offset; - // TODO: Add .debug_names support } return None; }(); |