summaryrefslogtreecommitdiff
path: root/ELF/SymbolTable.cpp
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2017-05-03 20:26:46 +0000
committerDimitry Andric <dim@FreeBSD.org>2017-05-03 20:26:46 +0000
commitd803cda42997f42649910309ac18170d2d6f2214 (patch)
tree7bb26c9b927f1a3a4ee50d7773cc29fa7a4eb188 /ELF/SymbolTable.cpp
parent274c9ff5404582ff22769d9599ab10ed216ceec3 (diff)
Notes
Diffstat (limited to 'ELF/SymbolTable.cpp')
-rw-r--r--ELF/SymbolTable.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/ELF/SymbolTable.cpp b/ELF/SymbolTable.cpp
index 541fc1bf6479d..30f1c3653f504 100644
--- a/ELF/SymbolTable.cpp
+++ b/ELF/SymbolTable.cpp
@@ -279,9 +279,10 @@ Symbol *SymbolTable<ELFT>::addUndefined(StringRef Name, bool IsLocal,
return S;
}
if (Binding != STB_WEAK) {
- if (S->body()->isShared() || S->body()->isLazy())
+ SymbolBody *B = S->body();
+ if (B->isShared() || B->isLazy() || B->isUndefined())
S->Binding = Binding;
- if (auto *SS = dyn_cast<SharedSymbol>(S->body()))
+ if (auto *SS = dyn_cast<SharedSymbol>(B))
cast<SharedFile<ELFT>>(SS->File)->IsUsed = true;
}
if (auto *L = dyn_cast<Lazy>(S->body())) {