[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