ELF: Remove SymbolTable::SymIndex class.

The Traced flag is unnecessary because we only need to set the index
to -1 to mark a symbol for tracing.

Differential Revision: https://reviews.llvm.org/D39672

llvm-svn: 317450
This commit is contained in:
Peter Collingbourne 2017-11-06 04:58:04 +00:00
parent b472aa0268
commit 38082ac62d
2 changed files with 12 additions and 19 deletions

View File

@ -145,7 +145,7 @@ Defined *SymbolTable::addAbsolute(StringRef Name, uint8_t Visibility,
// 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 @@ std::pair<Symbol *, bool> SymbolTable::insert(StringRef Name) {
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 @@ std::pair<Symbol *, bool> SymbolTable::insert(StringRef Name) {
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 @@ Symbol *SymbolTable::find(StringRef Name) {
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>

View File

@ -99,12 +99,6 @@ private:
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
@ -112,7 +106,7 @@ private:
// 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