[lld] r189793 - A weak reference to a symbol that is only weakly referenced in

Joerg Sonnenberger joerg at bec.de
Tue Sep 3 05:06:33 PDT 2013


Author: joerg
Date: Tue Sep  3 07:06:33 2013
New Revision: 189793

URL: http://llvm.org/viewvc/llvm-project?rev=189793&view=rev
Log:
A weak reference to a symbol that is only weakly referenced in
dependencies should remain weak, not get promoted to undef or dropped.

Added:
    lld/trunk/test/elf/Inputs/libweaksym.so   (with props)
    lld/trunk/test/elf/Inputs/weaksym.o   (with props)
    lld/trunk/test/elf/weaksym.test
Modified:
    lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h

Modified: lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h?rev=189793&r1=189792&r2=189793&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h (original)
+++ lld/trunk/lib/ReaderWriter/ELF/DynamicFile.h Tue Sep  3 07:06:33 2013
@@ -57,7 +57,9 @@ public:
       if (i->st_shndx == llvm::ELF::SHN_ABS)
         continue;
 
-      if (useShlibUndefines && (i->st_shndx == llvm::ELF::SHN_UNDEF)) {
+      if (i->st_shndx == llvm::ELF::SHN_UNDEF) {
+        if (!useShlibUndefines)
+          continue;
         // Create an undefined atom.
         if (!name->empty()) {
           auto *newAtom =

Added: lld/trunk/test/elf/Inputs/libweaksym.so
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Inputs/libweaksym.so?rev=189793&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lld/trunk/test/elf/Inputs/libweaksym.so
------------------------------------------------------------------------------
    svn:executable = *

Propchange: lld/trunk/test/elf/Inputs/libweaksym.so
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lld/trunk/test/elf/Inputs/weaksym.o
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/Inputs/weaksym.o?rev=189793&view=auto
==============================================================================
Binary file - no diff available.

Propchange: lld/trunk/test/elf/Inputs/weaksym.o
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: lld/trunk/test/elf/weaksym.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/weaksym.test?rev=189793&view=auto
==============================================================================
--- lld/trunk/test/elf/weaksym.test (added)
+++ lld/trunk/test/elf/weaksym.test Tue Sep  3 07:06:33 2013
@@ -0,0 +1,7 @@
+# Tests that a weak reference remains a weak reference,
+# even if a shared library defines the symbol weak as well.
+
+RUN: lld -flavor gnu  -target x86_64 -shared %p/Inputs/weaksym.o -L%p/Inputs -lweaksym -o %t1
+RUN: llvm-nm -n %t1 | FileCheck -check-prefix CHECKSYMS %s
+
+CHECKSYMS: w weaksym





More information about the llvm-commits mailing list