[PATCH] D121006: Speedup dsymutil when working with big project.
C-凡 via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Mar 7 00:26:33 PST 2022
C-_-fan updated this revision to Diff 413359.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D121006/new/
https://reviews.llvm.org/D121006
Files:
llvm/tools/dsymutil/MachODebugMapParser.cpp
Index: llvm/tools/dsymutil/MachODebugMapParser.cpp
===================================================================
--- llvm/tools/dsymutil/MachODebugMapParser.cpp
+++ llvm/tools/dsymutil/MachODebugMapParser.cpp
@@ -9,6 +9,7 @@
#include "BinaryHolder.h"
#include "DebugMap.h"
#include "MachOUtils.h"
+#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/Optional.h"
#include "llvm/Object/MachO.h"
#include "llvm/Support/Path.h"
@@ -51,6 +52,11 @@
BinaryHolder BinHolder;
/// Map of the binary symbol addresses.
StringMap<uint64_t> MainBinarySymbolAddresses;
+
+ /// Binary symbol addresses to names map, to speedup
+ /// `getMainBinarySymbolNames`;
+ SmallDenseMap<uint64_t, SmallVector<StringRef>> MainBinaryAddresses2NamesMap;
+
StringRef MainBinaryStrings;
/// The constructed DebugMap.
std::unique_ptr<DebugMap> Result;
@@ -74,7 +80,7 @@
sys::TimePoint<std::chrono::seconds> Timestamp);
void resetParserState();
uint64_t getMainBinarySymbolAddress(StringRef Name);
- std::vector<StringRef> getMainBinarySymbolNames(uint64_t Value);
+ SmallVector<StringRef>& getMainBinarySymbolNames(uint64_t Value);
void loadMainBinarySymbols(const MachOObjectFile &MainBinary);
void loadCurrentObjectFileSymbols(const object::MachOObjectFile &Obj);
void handleStabSymbolTableEntry(uint32_t StringIndex, uint8_t Type,
@@ -531,14 +537,9 @@
}
/// Get all symbol names in the main binary for the given value.
-std::vector<StringRef>
+SmallVector<StringRef>&
MachODebugMapParser::getMainBinarySymbolNames(uint64_t Value) {
- std::vector<StringRef> Names;
- for (const auto &Entry : MainBinarySymbolAddresses) {
- if (Entry.second == Value)
- Names.push_back(Entry.first());
- }
- return Names;
+ return MainBinaryAddresses2NamesMap[Value];
}
/// Load the interesting main binary symbols' addresses into
@@ -547,6 +548,8 @@
const MachOObjectFile &MainBinary) {
section_iterator Section = MainBinary.section_end();
MainBinarySymbolAddresses.clear();
+ MainBinaryAddresses2NamesMap.clear();
+
for (const auto &Sym : MainBinary.symbols()) {
Expected<SymbolRef::Type> TypeOrErr = Sym.getType();
if (!TypeOrErr) {
@@ -588,10 +591,14 @@
if (Name.size() == 0 || Name[0] == '\0')
continue;
// Override only if the new key is global.
- if (Extern)
+ if (Extern) {
MainBinarySymbolAddresses[Name] = Addr;
- else
- MainBinarySymbolAddresses.try_emplace(Name, Addr);
+ getMainBinarySymbolNames(Addr).push_back(Name);
+ } else {
+ if (MainBinarySymbolAddresses.try_emplace(Name, Addr).second) {
+ getMainBinarySymbolNames(Addr).push_back(Name);
+ }
+ }
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D121006.413359.patch
Type: text/x-patch
Size: 2719 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220307/e4956895/attachment.bin>
More information about the llvm-commits
mailing list