[lld] r249417 - Never fetch members for weak undefined symbols.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 6 08:18:51 PDT 2015


Author: rafael
Date: Tue Oct  6 10:18:50 2015
New Revision: 249417

URL: http://llvm.org/viewvc/llvm-project?rev=249417&view=rev
Log:
Never fetch members for weak undefined symbols.

We were still fetching them when the archive was seen first.

We should experiment with just letting lazy symbols get to compare, it
might be cleaner for ELF.

Modified:
    lld/trunk/ELF/SymbolTable.cpp
    lld/trunk/test/elf2/archive.s

Modified: lld/trunk/ELF/SymbolTable.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.cpp?rev=249417&r1=249416&r2=249417&view=diff
==============================================================================
--- lld/trunk/ELF/SymbolTable.cpp (original)
+++ lld/trunk/ELF/SymbolTable.cpp Tue Oct  6 10:18:50 2015
@@ -222,6 +222,12 @@ template <class ELFT> void SymbolTable::
 
   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;
     }

Modified: lld/trunk/test/elf2/archive.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf2/archive.s?rev=249417&r1=249416&r2=249417&view=diff
==============================================================================
--- lld/trunk/test/elf2/archive.s (original)
+++ lld/trunk/test/elf2/archive.s Tue Oct  6 10:18:50 2015
@@ -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




More information about the llvm-commits mailing list