summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/SymbolTable.cpp6
-rw-r--r--lld/test/elf2/archive.s5
2 files changed, 10 insertions, 1 deletions
diff --git a/lld/ELF/SymbolTable.cpp b/lld/ELF/SymbolTable.cpp
index 25ba584d45b..088bf5bca71 100644
--- a/lld/ELF/SymbolTable.cpp
+++ b/lld/ELF/SymbolTable.cpp
@@ -222,6 +222,12 @@ template <class ELFT> void SymbolTable::resolve(SymbolBody *New) {
if (Lazy *L = dyn_cast<Lazy>(Existing)) {
if (New->isUndefined()) {
+ if (New->isWeak()) {
+ // See the explanation in SymbolTable::addLazy
+ L->setUsedInRegularObj();
+ L->setWeak();
+ return;
+ }
addMemberFile(L);
return;
}
diff --git a/lld/test/elf2/archive.s b/lld/test/elf2/archive.s
index da78f7aa37c..1ea0908628c 100644
--- a/lld/test/elf2/archive.s
+++ b/lld/test/elf2/archive.s
@@ -30,4 +30,7 @@
# RUN: lld -flavor gnu2 %tar %t -o %tout
# RUN: llvm-nm %tout | FileCheck --check-prefix=AR-FIRST %s
-# AR-FIRST: T _start
+# AR-FIRST: T _start
+# AR-FIRST-NEXT: w bar
+# AR-FIRST-NEXT: T end
+# AR-FIRST-NEXT: w foo
OpenPOWER on IntegriCloud