summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lld/ELF/Driver.cpp3
-rw-r--r--lld/test/ELF/Inputs/shlib-undefined-ref.s4
-rw-r--r--lld/test/ELF/shlib-undefined-shared.s15
3 files changed, 21 insertions, 1 deletions
diff --git a/lld/ELF/Driver.cpp b/lld/ELF/Driver.cpp
index cc76fea2ad5..b159fe63eb1 100644
--- a/lld/ELF/Driver.cpp
+++ b/lld/ELF/Driver.cpp
@@ -1043,7 +1043,8 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &Args) {
return;
// Handle undefined symbols in DSOs.
- Symtab->scanShlibUndefined<ELFT>();
+ if (!Config->Shared)
+ Symtab->scanShlibUndefined<ELFT>();
// Handle the -exclude-libs option.
if (Args.hasArg(OPT_exclude_libs))
diff --git a/lld/test/ELF/Inputs/shlib-undefined-ref.s b/lld/test/ELF/Inputs/shlib-undefined-ref.s
new file mode 100644
index 00000000000..cfb7c60ebc0
--- /dev/null
+++ b/lld/test/ELF/Inputs/shlib-undefined-ref.s
@@ -0,0 +1,4 @@
+.globl f
+f:
+ call should_not_be_exported@PLT
+ ret
diff --git a/lld/test/ELF/shlib-undefined-shared.s b/lld/test/ELF/shlib-undefined-shared.s
new file mode 100644
index 00000000000..6d60d01bfab
--- /dev/null
+++ b/lld/test/ELF/shlib-undefined-shared.s
@@ -0,0 +1,15 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-linux-gnu -o %t1.o %S/Inputs/shlib-undefined-ref.s
+# RUN: ld.lld -shared -o %t1.so %t1.o
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64-linux-gnu -o %t2.o %s
+# RUN: echo "{ local: *; };" > %t.script
+# RUN: ld.lld -shared -version-script %t.script -o %t2.so %t2.o %t1.so
+# RUN: llvm-nm -g %t2.so | FileCheck -allow-empty %s
+
+# CHECK-NOT: should_not_be_exported
+
+.globl should_not_be_exported
+should_not_be_exported:
+ ret
OpenPOWER on IntegriCloud