Index: lld/trunk/ELF/SymbolTable.h =================================================================== --- lld/trunk/ELF/SymbolTable.h +++ lld/trunk/ELF/SymbolTable.h @@ -99,12 +99,6 @@ 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 @@ // but a bit inefficient. // FIXME: Experiment with passing in a custom hashing or sorting the symbols // once symbol resolution is finished. - llvm::DenseMap Symtab; + llvm::DenseMap Symtab; std::vector SymVector; // Comdat groups define "link once" sections. If two comdat groups have the Index: lld/trunk/ELF/SymbolTable.cpp =================================================================== --- lld/trunk/ELF/SymbolTable.cpp +++ lld/trunk/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