[PATCH] D39672: ELF: Remove SymbolTable::SymIndex class.
Peter Collingbourne via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Nov 5 20:40:59 PST 2017
pcc created this revision.
Herald added subscribers: arichardson, emaste.
The Traced flag is unnecessary because we only need to set the index
to -1 to mark a symbol for tracing.
https://reviews.llvm.org/D39672
Files:
lld/ELF/SymbolTable.cpp
lld/ELF/SymbolTable.h
Index: lld/ELF/SymbolTable.h
===================================================================
--- lld/ELF/SymbolTable.h
+++ lld/ELF/SymbolTable.h
@@ -99,20 +99,14 @@
StringRef VersionName);
void assignWildcardVersion(SymbolVersion Ver, uint16_t VersionId);
- struct SymIndex {
- SymIndex(int Idx, bool Traced) : Idx(Idx), Traced(Traced) {}
- int Idx : 31;
- unsigned Traced : 1;
- };
-
// The order the global symbols are in is not defined. We can use an arbitrary
// order, but it has to be reproducible. That is true even when cross linking.
// The default hashing of StringRef produces different results on 32 and 64
// bit systems so we use a map to a vector. That is arbitrary, deterministic
// but a bit inefficient.
// FIXME: Experiment with passing in a custom hashing or sorting the symbols
// once symbol resolution is finished.
- llvm::DenseMap<llvm::CachedHashStringRef, SymIndex> Symtab;
+ llvm::DenseMap<llvm::CachedHashStringRef, int> Symtab;
std::vector<Symbol *> SymVector;
// Comdat groups define "link once" sections. If two comdat groups have the
Index: lld/ELF/SymbolTable.cpp
===================================================================
--- lld/ELF/SymbolTable.cpp
+++ lld/ELF/SymbolTable.cpp
@@ -145,7 +145,7 @@
// Set a flag for --trace-symbol so that we can print out a log message
// if a new symbol with the same name is inserted into the symbol table.
void SymbolTable::trace(StringRef Name) {
- Symtab.insert({CachedHashStringRef(Name), {-1, true}});
+ Symtab.insert({CachedHashStringRef(Name), -1});
}
// Rename SYM as __wrap_SYM. The original symbol is preserved as __real_SYM.
@@ -224,14 +224,14 @@
if (Pos != StringRef::npos && Pos + 1 < Name.size() && Name[Pos + 1] == '@')
Name = Name.take_front(Pos);
- auto P = Symtab.insert(
- {CachedHashStringRef(Name), SymIndex((int)SymVector.size(), false)});
- SymIndex &V = P.first->second;
+ auto P = Symtab.insert({CachedHashStringRef(Name), (int)SymVector.size()});
+ int &SymIndex = P.first->second;
bool IsNew = P.second;
+ bool Traced = false;
- if (V.Idx == -1) {
- IsNew = true;
- V = SymIndex((int)SymVector.size(), true);
+ if (SymIndex == -1) {
+ SymIndex = SymVector.size();
+ IsNew = Traced = true;
}
Symbol *Sym;
@@ -243,11 +243,11 @@
Sym->IsUsedInRegularObj = false;
Sym->ExportDynamic = false;
Sym->CanInline = true;
- Sym->Traced = V.Traced;
+ Sym->Traced = Traced;
Sym->VersionId = Config->DefaultSymbolVersion;
SymVector.push_back(Sym);
} else {
- Sym = SymVector[V.Idx];
+ Sym = SymVector[SymIndex];
}
return {Sym, IsNew};
}
@@ -530,10 +530,9 @@
auto It = Symtab.find(CachedHashStringRef(Name));
if (It == Symtab.end())
return nullptr;
- SymIndex V = It->second;
- if (V.Idx == -1)
+ if (It->second == -1)
return nullptr;
- return SymVector[V.Idx];
+ return SymVector[It->second];
}
template <class ELFT>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D39672.121679.patch
Type: text/x-patch
Size: 3014 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20171106/3f53b3bf/attachment.bin>
More information about the llvm-commits
mailing list