[lld] r325316 - Fix an issue that weak bit is dropped when there's a lazy object symbol.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Thu Feb 15 20:27:46 PST 2018


Author: ruiu
Date: Thu Feb 15 20:27:46 2018
New Revision: 325316

URL: http://llvm.org/viewvc/llvm-project?rev=325316&view=rev
Log:
Fix an issue that weak bit is dropped when there's a lazy object symbol.

Previously, we accidentally dropped STB_WEAK bit from an undefined symbol
if there is a lazy object symbol with the same name. That caused a
compatibility issue with GNU gold.

Added:
    lld/trunk/test/ELF/weak-undef-lib.s
Modified:
    lld/trunk/ELF/SymbolTable.cpp

Modified: lld/trunk/ELF/SymbolTable.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.cpp?rev=325316&r1=325315&r2=325316&view=diff
==============================================================================
--- lld/trunk/ELF/SymbolTable.cpp (original)
+++ lld/trunk/ELF/SymbolTable.cpp Thu Feb 15 20:27:46 2018
@@ -568,9 +568,12 @@ void SymbolTable::addLazyObject(StringRe
     return;
 
   // See comment for addLazyArchive above.
-  if (S->isWeak())
+  if (S->isWeak()) {
     replaceSymbol<LazyObject>(S, Obj, Name, S->Type);
-  else if (InputFile *F = Obj.fetch())
+    S->Binding = STB_WEAK;
+    return;
+  }
+  if (InputFile *F = Obj.fetch())
     addFile<ELFT>(F);
 }
 

Added: lld/trunk/test/ELF/weak-undef-lib.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/weak-undef-lib.s?rev=325316&view=auto
==============================================================================
--- lld/trunk/test/ELF/weak-undef-lib.s (added)
+++ lld/trunk/test/ELF/weak-undef-lib.s Thu Feb 15 20:27:46 2018
@@ -0,0 +1,19 @@
+# REQUIRES: x86
+# RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t1.o
+# RUN: echo -e '.globl foo\nfoo: ret' | \
+# RUN:   llvm-mc -filetype=obj -triple=x86_64-pc-linux - -o %t2.o
+
+# RUN: ld.lld -shared -o %t.so %t1.o --start-lib %t2.o
+# RUN: llvm-readobj -dyn-symbols %t.so | FileCheck %s
+
+# CHECK:      Name: foo
+# CHECK-NEXT: Value: 0x0
+# CHECK-NEXT: Size: 0
+# CHECK-NEXT: Binding: Weak
+# CHECK-NEXT: Type: None
+# CHECK-NEXT: Other: 0
+# CHECK-NEXT: Section: Undefined
+
+.weak foo
+.data
+.quad foo




More information about the llvm-commits mailing list