aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2019-11-07 13:50:31 -0800
committerTom Stellard <tstellar@redhat.com>2019-12-03 14:35:46 -0800
commit64bdd8bc9fbff893fc435c46b307c63f5a592d30 (patch)
tree58eccb24780ebf1548b18f4686b3bf9cd5ee29e8
parent52ac91476dcffc5ecb3a6ff0e63b27f8a13edd4a (diff)
downloadllvm-64bdd8bc9fbff893fc435c46b307c63f5a592d30.zip
llvm-64bdd8bc9fbff893fc435c46b307c63f5a592d30.tar.gz
llvm-64bdd8bc9fbff893fc435c46b307c63f5a592d30.tar.bz2
[COFF] Don't error if the only inputs are from /wholearchive:
Fixes PR43744 Differential Revision: https://reviews.llvm.org/D69968 (cherry picked from commit ce0f3ee5e4dc2eed5390b57d4a1e37c8bf17a995)
-rw-r--r--lld/COFF/Driver.cpp8
-rw-r--r--lld/test/COFF/entry-inference.test5
-rw-r--r--lld/test/COFF/out.test5
-rw-r--r--lld/test/COFF/wholearchive.s4
4 files changed, 17 insertions, 5 deletions
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index eb3aff1..15d6fb5 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -1138,7 +1138,7 @@ void LinkerDriver::link(ArrayRef<const char *> argsArr) {
}
}
- if (!args.hasArg(OPT_INPUT)) {
+ if (!args.hasArg(OPT_INPUT, OPT_wholearchive_file)) {
if (args.hasArg(OPT_deffile))
config->noEntry = true;
else
@@ -1626,7 +1626,7 @@ void LinkerDriver::link(ArrayRef<const char *> argsArr) {
}
// Handle generation of import library from a def file.
- if (!args.hasArg(OPT_INPUT)) {
+ if (!args.hasArg(OPT_INPUT, OPT_wholearchive_file)) {
fixupExports();
createImportLibrary(/*asLib=*/true);
return;
@@ -1672,8 +1672,8 @@ void LinkerDriver::link(ArrayRef<const char *> argsArr) {
// Set default image name if neither /out or /def set it.
if (config->outputFile.empty()) {
- config->outputFile =
- getOutputPath((*args.filtered(OPT_INPUT).begin())->getValue());
+ config->outputFile = getOutputPath(
+ (*args.filtered(OPT_INPUT, OPT_wholearchive_file).begin())->getValue());
}
// Fail early if an output file is not writable.
diff --git a/lld/test/COFF/entry-inference.test b/lld/test/COFF/entry-inference.test
index b58a23a..606cbd0 100644
--- a/lld/test/COFF/entry-inference.test
+++ b/lld/test/COFF/entry-inference.test
@@ -4,6 +4,11 @@
# RUN: not lld-link /nodefaultlib /out:%t.exe %t.obj > %t.log 2>&1
# RUN: FileCheck -check-prefix=MAIN %s < %t.log
+# Entry inference should work through /wholearchive:, they are also inputs.
+# RUN: lld-link /lib %t.obj /out:%t.lib
+# RUN: not lld-link /nodefaultlib /out:%t.exe /wholearchive:%t.lib > %t.log 2>&1
+# RUN: FileCheck -check-prefix=MAIN %s < %t.log
+
# RUN: sed s/ENTRYNAME/wmain/ %s | yaml2obj > %t.obj
# RUN: not lld-link /out:%t.exe %t.obj > %t.log 2>&1
# RUN: FileCheck -check-prefix=WMAIN %s < %t.log
diff --git a/lld/test/COFF/out.test b/lld/test/COFF/out.test
index a7b5614..6d7667e 100644
--- a/lld/test/COFF/out.test
+++ b/lld/test/COFF/out.test
@@ -4,14 +4,17 @@
# RUN: cp %t.obj %T/out/out1.obj
# RUN: cp %t.obj %T/out/tmp/out2
# RUN: cp %t.obj %T/out/tmp/out3.xyz
+# RUN: lld-link /lib %t.obj /out:%T/out/out4.lib
-# RUN: rm -f out1.exe out2.exe out3.exe out3.dll
+# RUN: rm -f out1.exe out2.exe out3.exe out3.dll out4.exe
# RUN: lld-link /entry:main %T/out/out1.obj
# RUN: lld-link /entry:main %T/out/tmp/out2
# RUN: lld-link /dll /entry:main %T/out/tmp/out3.xyz
+# RUN: lld-link /entry:main -wholearchive:%T/out/out4.lib
# RUN: llvm-readobj out1.exe | FileCheck %s
# RUN: llvm-readobj out2.exe | FileCheck %s
# RUN: llvm-readobj out3.dll | FileCheck %s
+# RUN: llvm-readobj out4.exe | FileCheck %s
CHECK: File:
diff --git a/lld/test/COFF/wholearchive.s b/lld/test/COFF/wholearchive.s
index cb19d4d..3592f7e 100644
--- a/lld/test/COFF/wholearchive.s
+++ b/lld/test/COFF/wholearchive.s
@@ -14,6 +14,10 @@
# RUN: lld-link -dll -out:%t.dll -entry:main %t.main.obj %t.archive.lib -wholearchive:%t.archive.lib -implib:%t.lib
# RUN: llvm-readobj %t.lib | FileCheck %s -check-prefix CHECK-IMPLIB
+# PR43744: Test no inputs except a whole archive.
+# RUN: lld-link -dll -out:%t.dll -noentry -wholearchive:%t.archive.lib -implib:%t.lib
+# RUN: llvm-readobj %t.lib | FileCheck %s -check-prefix CHECK-IMPLIB
+
# RUN: mkdir -p %t.dir
# RUN: cp %t.archive.lib %t.dir/foo.lib
# RUN: lld-link -dll -out:%t.dll -entry:main -libpath:%t.dir %t.main.obj %t.dir/./foo.lib -wholearchive:foo.lib -implib:%t.lib