From cceb92a0754f9c59a82d9fa9c5312826eb94a642 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Tue, 30 Aug 2016 20:53:26 +0000 Subject: [PATCH] Pass Binding instead of IsWeak to addBitcode. We were computing the binding on both the caller and callee. llvm-svn: 280156 --- lld/ELF/InputFiles.cpp | 5 ++--- lld/ELF/SymbolTable.cpp | 5 ++--- lld/ELF/SymbolTable.h | 4 ++-- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/lld/ELF/InputFiles.cpp b/lld/ELF/InputFiles.cpp index 012746496ef7..e0fd5f475b61 100644 --- a/lld/ELF/InputFiles.cpp +++ b/lld/ELF/InputFiles.cpp @@ -635,8 +635,7 @@ Symbol *BitcodeFile::createSymbol(const DenseSet &KeptComdats, StringRef NameRef = Saver.save(StringRef(Name)); uint32_t Flags = Sym.getFlags(); - bool IsWeak = Flags & BasicSymbolRef::SF_Weak; - uint32_t Binding = IsWeak ? STB_WEAK : STB_GLOBAL; + uint32_t Binding = (Flags & BasicSymbolRef::SF_Weak) ? STB_WEAK : STB_GLOBAL; uint8_t Type = STT_NOTYPE; bool CanOmitFromDynSym = false; @@ -681,7 +680,7 @@ Symbol *BitcodeFile::createSymbol(const DenseSet &KeptComdats, Binding, Visibility, STT_OBJECT, HasUnnamedAddr, this); } - return Symtab::X->addBitcode(NameRef, IsWeak, Visibility, Type, + return Symtab::X->addBitcode(NameRef, Binding, Visibility, Type, CanOmitFromDynSym, HasUnnamedAddr, this); } diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp index 49c31ad11945..e701d928c117 100644 --- a/lld/ELF/SymbolTable.cpp +++ b/lld/ELF/SymbolTable.cpp @@ -460,7 +460,7 @@ void SymbolTable::addShared(SharedFile *F, StringRef Name, } template -Symbol *SymbolTable::addBitcode(StringRef Name, bool IsWeak, +Symbol *SymbolTable::addBitcode(StringRef Name, uint8_t Binding, uint8_t StOther, uint8_t Type, bool CanOmitFromDynSym, bool HasUnnamedAddr, BitcodeFile *F) { @@ -469,8 +469,7 @@ Symbol *SymbolTable::addBitcode(StringRef Name, bool IsWeak, std::tie(S, WasInserted) = insert(Name, Type, StOther & 3, CanOmitFromDynSym, HasUnnamedAddr, /*IsUsedInRegularObj*/ false, F); - int Cmp = compareDefinedNonCommon(S, WasInserted, - IsWeak ? STB_WEAK : STB_GLOBAL); + int Cmp = compareDefinedNonCommon(S, WasInserted, Binding); if (Cmp > 0) replaceBody(S, Name, StOther, Type, F); else if (Cmp == 0) diff --git a/lld/ELF/SymbolTable.h b/lld/ELF/SymbolTable.h index 0af04a7ef4bb..e4911b379ccf 100644 --- a/lld/ELF/SymbolTable.h +++ b/lld/ELF/SymbolTable.h @@ -72,8 +72,8 @@ public: void addLazyArchive(ArchiveFile *F, const llvm::object::Archive::Symbol S); void addLazyObject(StringRef Name, LazyObjectFile &Obj); - Symbol *addBitcode(StringRef Name, bool IsWeak, uint8_t StOther, uint8_t Type, - bool CanOmitFromDynSym, bool HasUnnamedAddr, + Symbol *addBitcode(StringRef Name, uint8_t Binding, uint8_t StOther, + uint8_t Type, bool CanOmitFromDynSym, bool HasUnnamedAddr, BitcodeFile *File); Symbol *addCommon(StringRef N, uint64_t Size, uint64_t Alignment,