[lld] r217356 - [ELF] Undefined symbols should be allowed when building dynamic libraries

Shankar Easwaran shankarke at gmail.com
Sun Sep 7 20:11:50 PDT 2014


Author: shankare
Date: Sun Sep  7 22:11:50 2014
New Revision: 217356

URL: http://llvm.org/viewvc/llvm-project?rev=217356&view=rev
Log:
[ELF] Undefined symbols should be allowed when building dynamic libraries

When dynamic libraries are built, undefined symbols should always be allowed and
the linker should not exit with an error.

Modified:
    lld/trunk/lib/Driver/GnuLdDriver.cpp
    lld/trunk/test/elf/dynamic-undef.test

Modified: lld/trunk/lib/Driver/GnuLdDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/GnuLdDriver.cpp?rev=217356&r1=217355&r2=217356&view=diff
==============================================================================
--- lld/trunk/lib/Driver/GnuLdDriver.cpp (original)
+++ lld/trunk/lib/Driver/GnuLdDriver.cpp Sun Sep  7 22:11:50 2014
@@ -326,6 +326,8 @@ bool GnuLdDriver::parse(int argc, const
       ctx->setOutputELFType(llvm::ELF::ET_DYN);
       ctx->setAllowShlibUndefines(true);
       ctx->setUseShlibUndefines(false);
+      ctx->setPrintRemainingUndefines(false);
+      ctx->setAllowRemainingUndefines(true);
       break;
     }
   }

Modified: lld/trunk/test/elf/dynamic-undef.test
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/elf/dynamic-undef.test?rev=217356&r1=217355&r2=217356&view=diff
==============================================================================
--- lld/trunk/test/elf/dynamic-undef.test (original)
+++ lld/trunk/test/elf/dynamic-undef.test Sun Sep  7 22:11:50 2014
@@ -10,20 +10,24 @@ RUN: FileCheck -check-prefix=EXEC %s < %
 # This test will pass because of --allow-shlib-undefined
 RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
 RUN:   %p/Inputs/shared.so-x86-64 -o %t -e main --allow-shlib-undefined
+# Building shared libraries should not fail when there is a undefined symbol.
 # Test creation of shared library, this should pass because we are using
 # shared option and by default, dynamic library wouldn't create undefined atoms
 # from the input shared library
 RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
-RUN:   %p/Inputs/shared.so-x86-64 -o %t -e main -shared
+RUN:   %p/Inputs/shared.so-x86-64 -o %t.usenoundefines -e main -shared
+RUN: llvm-readobj -symbols %t.usenoundefines | FileCheck %s -check-prefix=SHLIB-NOUNDEF
 # Test creation of shared library, this should fail because we are using
 # shared option setting the options to use the shared library undefines to
 # create undefined atoms from the input shared library
-RUN: not lld -flavor gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
-RUN:   %p/Inputs/shared.so-x86-64 -o %t -e main -shared \
+RUN: lld -flavor gnu -target x86_64-linux %p/Inputs/tls.x86-64 \
+RUN:   %p/Inputs/shared.so-x86-64 -o %t.useundefines -e main -shared \
 RUN: --use-shlib-undefines --no-allow-shlib-undefined  2> %t2
-RUN: FileCheck -check-prefix=SHLIB %s < %t2
+RUN: llvm-readobj -symbols %t.useundefines | FileCheck -check-prefix=SHLIB-UNDEF-SYMBOLS %s
 
 EXEC: Undefined symbol: {{[-_A-Za-z0-9.\\/:]+}}shared.so-x86-64: puts
 SHLIB: Undefined symbol: {{[-_A-Za-z0-9.\\/:]+}}shared.so-x86-64: puts
 EXEC-NOT: Undefined symbol: {{[-_A-Za-z0-9.\\/:]+}}shared.so-x86-64: weakfoo
 SHLIB-NOT: Undefined symbol: {{[-_A-Za-z0-9.\\/:]+}}shared.so-x86-64: weakfoo
+SHLIB-NOUNDEF-NOT: Name: puts
+SHLIB-UNDEF-SYMBOLS: Name: puts





More information about the llvm-commits mailing list