diff options
author | Sam Clegg <sbc@chromium.org> | 2018-08-02 20:39:19 +0000 |
---|---|---|
committer | Sam Clegg <sbc@chromium.org> | 2018-08-02 20:39:19 +0000 |
commit | 4c2cbfe68d4090411b87b0b5daa14ce08c8cc9ea (patch) | |
tree | b312c84b5cb97593424334c5cf299e3bf69c3994 | |
parent | 2425338bacc233566363ae37f97551e31f34ca3f (diff) | |
download | bcm5719-llvm-4c2cbfe68d4090411b87b0b5daa14ce08c8cc9ea.tar.gz bcm5719-llvm-4c2cbfe68d4090411b87b0b5daa14ce08c8cc9ea.zip |
Set IsUsedInRegularObj in a consistent manor between COFF, ELF and wasm. NFC
Differential Revision: https://reviews.llvm.org/D49147
llvm-svn: 338767
-rw-r--r-- | lld/COFF/SymbolTable.cpp | 46 | ||||
-rw-r--r-- | lld/COFF/SymbolTable.h | 2 | ||||
-rw-r--r-- | lld/wasm/SymbolTable.cpp | 61 | ||||
-rw-r--r-- | lld/wasm/SymbolTable.h | 2 |
4 files changed, 47 insertions, 64 deletions
diff --git a/lld/COFF/SymbolTable.cpp b/lld/COFF/SymbolTable.cpp index b286d865caa..62188b5f7e9 100644 --- a/lld/COFF/SymbolTable.cpp +++ b/lld/COFF/SymbolTable.cpp @@ -206,23 +206,25 @@ void SymbolTable::reportRemainingUndefines() { } } -std::pair<Symbol *, bool> SymbolTable::insert(StringRef Name) { +std::pair<Symbol *, bool> SymbolTable::insert(StringRef Name, InputFile *File) { + bool Inserted = false; Symbol *&Sym = SymMap[CachedHashStringRef(Name)]; - if (Sym) - return {Sym, false}; - Sym = reinterpret_cast<Symbol *>(make<SymbolUnion>()); - Sym->IsUsedInRegularObj = false; - Sym->PendingArchiveLoad = false; - return {Sym, true}; + if (!Sym) { + Sym = reinterpret_cast<Symbol *>(make<SymbolUnion>()); + Sym->IsUsedInRegularObj = false; + Sym->PendingArchiveLoad = false; + Inserted = true; + } + if (!File || !isa<BitcodeFile>(File)) + Sym->IsUsedInRegularObj = true; + return {Sym, Inserted}; } Symbol *SymbolTable::addUndefined(StringRef Name, InputFile *F, bool IsWeakAlias) { Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(Name); - if (!F || !isa<BitcodeFile>(F)) - S->IsUsedInRegularObj = true; + std::tie(S, WasInserted) = insert(Name, F); if (WasInserted || (isa<Lazy>(S) && IsWeakAlias)) { replaceSymbol<Undefined>(S, Name); return S; @@ -240,7 +242,7 @@ void SymbolTable::addLazy(ArchiveFile *F, const Archive::Symbol Sym) { StringRef Name = Sym.getName(); Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(Name); + std::tie(S, WasInserted) = insert(Name, nullptr); if (WasInserted) { replaceSymbol<Lazy>(S, F, Sym); return; @@ -260,7 +262,7 @@ void SymbolTable::reportDuplicate(Symbol *Existing, InputFile *NewFile) { Symbol *SymbolTable::addAbsolute(StringRef N, COFFSymbolRef Sym) { Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(N); + std::tie(S, WasInserted) = insert(N, nullptr); S->IsUsedInRegularObj = true; if (WasInserted || isa<Undefined>(S) || isa<Lazy>(S)) replaceSymbol<DefinedAbsolute>(S, N, Sym); @@ -272,7 +274,7 @@ Symbol *SymbolTable::addAbsolute(StringRef N, COFFSymbolRef Sym) { Symbol *SymbolTable::addAbsolute(StringRef N, uint64_t VA) { Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(N); + std::tie(S, WasInserted) = insert(N, nullptr); S->IsUsedInRegularObj = true; if (WasInserted || isa<Undefined>(S) || isa<Lazy>(S)) replaceSymbol<DefinedAbsolute>(S, N, VA); @@ -284,7 +286,7 @@ Symbol *SymbolTable::addAbsolute(StringRef N, uint64_t VA) { Symbol *SymbolTable::addSynthetic(StringRef N, Chunk *C) { Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(N); + std::tie(S, WasInserted) = insert(N, nullptr); S->IsUsedInRegularObj = true; if (WasInserted || isa<Undefined>(S) || isa<Lazy>(S)) replaceSymbol<DefinedSynthetic>(S, N, C); @@ -298,9 +300,7 @@ Symbol *SymbolTable::addRegular(InputFile *F, StringRef N, SectionChunk *C) { Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(N); - if (!isa<BitcodeFile>(F)) - S->IsUsedInRegularObj = true; + std::tie(S, WasInserted) = insert(N, F); if (WasInserted || !isa<DefinedRegular>(S)) replaceSymbol<DefinedRegular>(S, F, N, /*IsCOMDAT*/ false, /*IsExternal*/ true, Sym, C); @@ -314,9 +314,7 @@ SymbolTable::addComdat(InputFile *F, StringRef N, const coff_symbol_generic *Sym) { Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(N); - if (!isa<BitcodeFile>(F)) - S->IsUsedInRegularObj = true; + std::tie(S, WasInserted) = insert(N, F); if (WasInserted || !isa<DefinedRegular>(S)) { replaceSymbol<DefinedRegular>(S, F, N, /*IsCOMDAT*/ true, /*IsExternal*/ true, Sym, nullptr); @@ -331,9 +329,7 @@ Symbol *SymbolTable::addCommon(InputFile *F, StringRef N, uint64_t Size, const coff_symbol_generic *Sym, CommonChunk *C) { Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(N); - if (!isa<BitcodeFile>(F)) - S->IsUsedInRegularObj = true; + std::tie(S, WasInserted) = insert(N, F); if (WasInserted || !isa<DefinedCOFF>(S)) replaceSymbol<DefinedCommon>(S, F, N, Size, Sym, C); else if (auto *DC = dyn_cast<DefinedCommon>(S)) @@ -345,7 +341,7 @@ Symbol *SymbolTable::addCommon(InputFile *F, StringRef N, uint64_t Size, Symbol *SymbolTable::addImportData(StringRef N, ImportFile *F) { Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(N); + std::tie(S, WasInserted) = insert(N, nullptr); S->IsUsedInRegularObj = true; if (WasInserted || isa<Undefined>(S) || isa<Lazy>(S)) { replaceSymbol<DefinedImportData>(S, N, F); @@ -360,7 +356,7 @@ Symbol *SymbolTable::addImportThunk(StringRef Name, DefinedImportData *ID, uint16_t Machine) { Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(Name); + std::tie(S, WasInserted) = insert(Name, nullptr); S->IsUsedInRegularObj = true; if (WasInserted || isa<Undefined>(S) || isa<Lazy>(S)) { replaceSymbol<DefinedImportThunk>(S, Name, ID, Machine); diff --git a/lld/COFF/SymbolTable.h b/lld/COFF/SymbolTable.h index 30cb1a5410c..2258257e7d7 100644 --- a/lld/COFF/SymbolTable.h +++ b/lld/COFF/SymbolTable.h @@ -108,7 +108,7 @@ public: } private: - std::pair<Symbol *, bool> insert(StringRef Name); + std::pair<Symbol *, bool> insert(StringRef Name, InputFile *F); StringRef findByPrefix(StringRef Prefix); llvm::DenseMap<llvm::CachedHashStringRef, Symbol *> SymMap; diff --git a/lld/wasm/SymbolTable.cpp b/lld/wasm/SymbolTable.cpp index e1ba2376973..13a3c6fdddb 100644 --- a/lld/wasm/SymbolTable.cpp +++ b/lld/wasm/SymbolTable.cpp @@ -88,14 +88,18 @@ Symbol *SymbolTable::find(StringRef Name) { return SymMap.lookup(CachedHashStringRef(Name)); } -std::pair<Symbol *, bool> SymbolTable::insert(StringRef Name) { +std::pair<Symbol *, bool> SymbolTable::insert(StringRef Name, InputFile *File) { + bool Inserted = false; Symbol *&Sym = SymMap[CachedHashStringRef(Name)]; - if (Sym) - return {Sym, false}; - Sym = reinterpret_cast<Symbol *>(make<SymbolUnion>()); - Sym->IsUsedInRegularObj = false; - SymVector.emplace_back(Sym); - return {Sym, true}; + if (!Sym) { + Sym = reinterpret_cast<Symbol *>(make<SymbolUnion>()); + Sym->IsUsedInRegularObj = false; + SymVector.emplace_back(Sym); + Inserted = true; + } + if (!File || File->kind() == InputFile::ObjectKind) + Sym->IsUsedInRegularObj = true; + return {Sym, Inserted}; } static void reportTypeError(const Symbol *Existing, const InputFile *File, @@ -158,15 +162,15 @@ DefinedFunction *SymbolTable::addSyntheticFunction(StringRef Name, LLVM_DEBUG(dbgs() << "addSyntheticFunction: " << Name << "\n"); assert(!find(Name)); SyntheticFunctions.emplace_back(Function); - return replaceSymbol<DefinedFunction>(insert(Name).first, Name, Flags, - nullptr, Function); + return replaceSymbol<DefinedFunction>(insert(Name, nullptr).first, Name, + Flags, nullptr, Function); } DefinedData *SymbolTable::addSyntheticDataSymbol(StringRef Name, uint32_t Flags) { LLVM_DEBUG(dbgs() << "addSyntheticDataSymbol: " << Name << "\n"); assert(!find(Name)); - return replaceSymbol<DefinedData>(insert(Name).first, Name, Flags); + return replaceSymbol<DefinedData>(insert(Name, nullptr).first, Name, Flags); } DefinedGlobal *SymbolTable::addSyntheticGlobal(StringRef Name, uint32_t Flags, @@ -175,8 +179,8 @@ DefinedGlobal *SymbolTable::addSyntheticGlobal(StringRef Name, uint32_t Flags, << "\n"); assert(!find(Name)); SyntheticGlobals.emplace_back(Global); - return replaceSymbol<DefinedGlobal>(insert(Name).first, Name, Flags, nullptr, - Global); + return replaceSymbol<DefinedGlobal>(insert(Name, nullptr).first, Name, Flags, + nullptr, Global); } static bool shouldReplace(const Symbol *Existing, InputFile *NewFile, @@ -213,10 +217,7 @@ Symbol *SymbolTable::addDefinedFunction(StringRef Name, uint32_t Flags, LLVM_DEBUG(dbgs() << "addDefinedFunction: " << Name << "\n"); Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(Name); - - if (!File || File->kind() == InputFile::ObjectKind) - S->IsUsedInRegularObj = true; + std::tie(S, WasInserted) = insert(Name, File); if (WasInserted || S->isLazy()) { replaceSymbol<DefinedFunction>(S, Name, Flags, File, Function); @@ -238,10 +239,7 @@ Symbol *SymbolTable::addDefinedData(StringRef Name, uint32_t Flags, << "\n"); Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(Name); - - if (!File || File->kind() == InputFile::ObjectKind) - S->IsUsedInRegularObj = true; + std::tie(S, WasInserted) = insert(Name, File); if (WasInserted || S->isLazy()) { replaceSymbol<DefinedData>(S, Name, Flags, File, Segment, Address, Size); @@ -258,12 +256,10 @@ Symbol *SymbolTable::addDefinedData(StringRef Name, uint32_t Flags, Symbol *SymbolTable::addDefinedGlobal(StringRef Name, uint32_t Flags, InputFile *File, InputGlobal *Global) { LLVM_DEBUG(dbgs() << "addDefinedGlobal:" << Name << "\n"); + Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(Name); - - if (!File || File->kind() == InputFile::ObjectKind) - S->IsUsedInRegularObj = true; + std::tie(S, WasInserted) = insert(Name, File); if (WasInserted || S->isLazy()) { replaceSymbol<DefinedGlobal>(S, Name, Flags, File, Global); @@ -284,10 +280,7 @@ Symbol *SymbolTable::addUndefinedFunction(StringRef Name, uint32_t Flags, Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(Name); - - if (!File || File->kind() == InputFile::ObjectKind) - S->IsUsedInRegularObj = true; + std::tie(S, WasInserted) = insert(Name, File); if (WasInserted) replaceSymbol<UndefinedFunction>(S, Name, Flags, File, Sig); @@ -305,10 +298,7 @@ Symbol *SymbolTable::addUndefinedData(StringRef Name, uint32_t Flags, Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(Name); - - if (!File || File->kind() == InputFile::ObjectKind) - S->IsUsedInRegularObj = true; + std::tie(S, WasInserted) = insert(Name, File); if (WasInserted) replaceSymbol<UndefinedData>(S, Name, Flags, File); @@ -326,10 +316,7 @@ Symbol *SymbolTable::addUndefinedGlobal(StringRef Name, uint32_t Flags, Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(Name); - - if (!File || File->kind() == InputFile::ObjectKind) - S->IsUsedInRegularObj = true; + std::tie(S, WasInserted) = insert(Name, File); if (WasInserted) replaceSymbol<UndefinedGlobal>(S, Name, Flags, File, Type); @@ -346,7 +333,7 @@ void SymbolTable::addLazy(ArchiveFile *File, const Archive::Symbol *Sym) { Symbol *S; bool WasInserted; - std::tie(S, WasInserted) = insert(Name); + std::tie(S, WasInserted) = insert(Name, nullptr); if (WasInserted) { replaceSymbol<LazySymbol>(S, Name, File, *Sym); diff --git a/lld/wasm/SymbolTable.h b/lld/wasm/SymbolTable.h index 26242e6cddd..de4b716974e 100644 --- a/lld/wasm/SymbolTable.h +++ b/lld/wasm/SymbolTable.h @@ -77,7 +77,7 @@ public: InputFunction *Function); private: - std::pair<Symbol *, bool> insert(StringRef Name); + std::pair<Symbol *, bool> insert(StringRef Name, InputFile *File); llvm::DenseMap<llvm::CachedHashStringRef, Symbol *> SymMap; std::vector<Symbol *> SymVector; |