[lld] r317956 - Don't produce a duplicated __wrap_foo if there is no __real_foo.

Rafael Espindola via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 10 16:53:52 PST 2017


Author: rafael
Date: Fri Nov 10 16:53:52 2017
New Revision: 317956

URL: http://llvm.org/viewvc/llvm-project?rev=317956&view=rev
Log:
Don't produce a duplicated __wrap_foo if there is no __real_foo.

This fixes a regression from r317426.

Modified:
    lld/trunk/ELF/SymbolTable.cpp
    lld/trunk/test/ELF/wrap-no-real.s

Modified: lld/trunk/ELF/SymbolTable.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/SymbolTable.cpp?rev=317956&r1=317955&r2=317956&view=diff
==============================================================================
--- lld/trunk/ELF/SymbolTable.cpp (original)
+++ lld/trunk/ELF/SymbolTable.cpp Fri Nov 10 16:53:52 2017
@@ -196,11 +196,11 @@ void SymbolTable::applySymbolWrap() {
     W.Sym->copyFrom(W.Wrap);
     W.Sym->Binding = W.SymBinding;
 
-    if (Real) {
-      // We now have two copies of __wrap_sym. Drop one.
-      W.Wrap->IsUsedInRegularObj = false;
+    // We now have two copies of __wrap_sym. Drop one.
+    W.Wrap->IsUsedInRegularObj = false;
+
+    if (Real)
       SymVector.push_back(Real);
-    }
   }
 }
 

Modified: lld/trunk/test/ELF/wrap-no-real.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/wrap-no-real.s?rev=317956&r1=317955&r2=317956&view=diff
==============================================================================
--- lld/trunk/test/ELF/wrap-no-real.s (original)
+++ lld/trunk/test/ELF/wrap-no-real.s Fri Nov 10 16:53:52 2017
@@ -16,13 +16,59 @@
 // CHECK-NEXT: movl $0x11000, %edx
 
 // RUN: llvm-readobj -t %t | FileCheck -check-prefix=SYM %s
-// SYM-NOT:  Name: __real_foo
-// SYM:      Name: foo
-// SYM-NEXT: Value: 0x11000
-// SYM-NOT:  Name: __real_foo
-// SYM:      Name: __wrap_foo
-// SYM-NEXT: Value: 0x11010
-// SYM-NOT:  Name: __real_foo
+
+// Test the full symbol table. It is verbose, but lld at times
+// produced duplicated symbols which are hard to test otherwise.
+
+// SYM:       Symbols [
+// SYM-NEXT:    Symbol {
+// SYM-NEXT:     Name:  (0)
+// SYM-NEXT:     Value:
+// SYM-NEXT:     Size:
+// SYM-NEXT:     Binding:
+// SYM-NEXT:     Type
+// SYM-NEXT:     Other:
+// SYM-NEXT:     Section:
+// SYM-NEXT:   }
+// SYM-NEXT:   Symbol {
+// SYM-NEXT:     Name: _DYNAMIC
+// SYM-NEXT:     Value:
+// SYM-NEXT:     Size:
+// SYM-NEXT:     Binding:
+// SYM-NEXT:     Type:
+// SYM-NEXT:     Other [
+// SYM-NEXT:       STV_HIDDEN
+// SYM-NEXT:     ]
+// SYM-NEXT:     Section: .dynamic
+// SYM-NEXT:   }
+// SYM-NEXT:   Symbol {
+// SYM-NEXT:     Name: foo
+// SYM-NEXT:     Value: 0x11000
+// SYM-NEXT:     Size:
+// SYM-NEXT:     Binding:
+// SYM-NEXT:     Type:
+// SYM-NEXT:     Other:
+// SYM-NEXT:     Section:
+// SYM-NEXT:   }
+// SYM-NEXT:   Symbol {
+// SYM-NEXT:     Name: _start
+// SYM-NEXT:     Value:
+// SYM-NEXT:     Size:
+// SYM-NEXT:     Binding:
+// SYM-NEXT:     Type
+// SYM-NEXT:     Other:
+// SYM-NEXT:     Section:
+// SYM-NEXT:   }
+// SYM-NEXT:   Symbol {
+// SYM-NEXT:     Name: __wrap_foo
+// SYM-NEXT:     Value: 0x11010
+// SYM-NEXT:     Size:
+// SYM-NEXT:     Binding:
+// SYM-NEXT:     Type:
+// SYM-NEXT:     Other:
+// SYM-NEXT:     Section:
+// SYM-NEXT:   }
+// SYM-NEXT: ]
 
 .global _start
 _start:




More information about the llvm-commits mailing list