From f9da871f6bf0f62dbe4cf406e8192f69e6972938 Mon Sep 17 00:00:00 2001 From: Josh Ferrell Date: Wed, 29 May 2024 12:13:14 -0400 Subject: Improve load performance of Mach-Os with relocations and many symbols --- view/macho/machoview.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/view/macho/machoview.cpp b/view/macho/machoview.cpp index 5f3aa041..c01acadd 100644 --- a/view/macho/machoview.cpp +++ b/view/macho/machoview.cpp @@ -2031,13 +2031,25 @@ bool MachoView::InitializeHeader(MachOHeader& header, bool isMainHeader, uint64_ if (relocationHandler->GetRelocationInfo(this, m_arch, infoList)) { + unordered_map>> symbolCache; for (auto& reloc: infoList) { if (reloc.symbolIndex >= m_symbols.size()) continue; // retrieve first symbol that is not a symbol relocation - auto symbols = GetSymbolsByName(m_symbols[reloc.symbolIndex]); + vector> symbols; + auto symName = m_symbols[reloc.symbolIndex]; + if (auto itr = symbolCache.find(symName); itr != symbolCache.end()) + { + symbols = itr->second; + } + else + { + symbols = GetSymbolsByName(symName); + symbolCache[symName] = symbols; + } + for (const auto& symbol : symbols) { if (symbol->GetAddress() == reloc.address) -- cgit v1.3.1