aboutsummaryrefslogtreecommitdiff
path: root/COFF/Driver.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'COFF/Driver.cpp')
-rw-r--r--COFF/Driver.cpp21
1 files changed, 14 insertions, 7 deletions
diff --git a/COFF/Driver.cpp b/COFF/Driver.cpp
index 27b1c48ce3e5..71a9c679d19f 100644
--- a/COFF/Driver.cpp
+++ b/COFF/Driver.cpp
@@ -429,7 +429,7 @@ static std::string getImplibPath() {
return Out.str();
}
-std::vector<COFFShortExport> createCOFFShortExportFromConfig() {
+static void createImportLibrary() {
std::vector<COFFShortExport> Exports;
for (Export &E1 : Config->Exports) {
COFFShortExport E2;
@@ -443,11 +443,7 @@ std::vector<COFFShortExport> createCOFFShortExportFromConfig() {
E2.Constant = E1.Constant;
Exports.push_back(E2);
}
- return Exports;
-}
-static void createImportLibrary() {
- std::vector<COFFShortExport> Exports = createCOFFShortExportFromConfig();
std::string DLLName = sys::path::filename(Config->OutputFile);
std::string Path = getImplibPath();
writeImportLibrary(DLLName, Path, Exports, Config->Machine);
@@ -707,8 +703,12 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {
}
}
- if (!Args.hasArgNoClaim(OPT_INPUT))
- fatal("no input files");
+ if (!Args.hasArgNoClaim(OPT_INPUT)) {
+ if (Args.hasArgNoClaim(OPT_deffile))
+ Config->NoEntry = true;
+ else
+ fatal("no input files");
+ }
// Construct search path list.
SearchPaths.push_back("");
@@ -990,6 +990,13 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {
parseModuleDefs(Arg->getValue());
}
+ // Handle generation of import library from a def file.
+ if (!Args.hasArgNoClaim(OPT_INPUT)) {
+ fixupExports();
+ createImportLibrary();
+ exit(0);
+ }
+
// Handle /delayload
for (auto *Arg : Args.filtered(OPT_delayload)) {
Config->DelayLoads.insert(StringRef(Arg->getValue()).lower());