xref: /llvm-project-15.0.7/lld/COFF/Driver.cpp (revision 52431f39)
1 //===- Driver.cpp ---------------------------------------------------------===//
2 //
3 //                             The LLVM Linker
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #include "Driver.h"
11 #include "Config.h"
12 #include "ICF.h"
13 #include "InputFiles.h"
14 #include "MarkLive.h"
15 #include "MinGW.h"
16 #include "SymbolTable.h"
17 #include "Symbols.h"
18 #include "Writer.h"
19 #include "lld/Common/Args.h"
20 #include "lld/Common/Driver.h"
21 #include "lld/Common/ErrorHandler.h"
22 #include "lld/Common/Memory.h"
23 #include "lld/Common/Timer.h"
24 #include "lld/Common/Version.h"
25 #include "llvm/ADT/Optional.h"
26 #include "llvm/ADT/StringSwitch.h"
27 #include "llvm/BinaryFormat/Magic.h"
28 #include "llvm/Object/ArchiveWriter.h"
29 #include "llvm/Object/COFFImportFile.h"
30 #include "llvm/Object/COFFModuleDefinition.h"
31 #include "llvm/Option/Arg.h"
32 #include "llvm/Option/ArgList.h"
33 #include "llvm/Option/Option.h"
34 #include "llvm/Support/Debug.h"
35 #include "llvm/Support/Path.h"
36 #include "llvm/Support/Process.h"
37 #include "llvm/Support/TarWriter.h"
38 #include "llvm/Support/TargetSelect.h"
39 #include "llvm/Support/raw_ostream.h"
40 #include "llvm/ToolDrivers/llvm-lib/LibDriver.h"
41 #include <algorithm>
42 #include <future>
43 #include <memory>
44 
45 using namespace llvm;
46 using namespace llvm::object;
47 using namespace llvm::COFF;
48 using llvm::sys::Process;
49 
50 namespace lld {
51 namespace coff {
52 
53 static Timer InputFileTimer("Input File Reading", Timer::root());
54 
55 Configuration *Config;
56 LinkerDriver *Driver;
57 
58 bool link(ArrayRef<const char *> Args, bool CanExitEarly, raw_ostream &Diag) {
59   errorHandler().LogName = Args[0];
60   errorHandler().ErrorOS = &Diag;
61   errorHandler().ColorDiagnostics = Diag.has_colors();
62   errorHandler().ErrorLimitExceededMsg =
63       "too many errors emitted, stopping now"
64       " (use /errorlimit:0 to see all errors)";
65   errorHandler().ExitEarly = CanExitEarly;
66   Config = make<Configuration>();
67   Config->Argv = {Args.begin(), Args.end()};
68 
69   Symtab = make<SymbolTable>();
70 
71   Driver = make<LinkerDriver>();
72   Driver->link(Args);
73 
74   // Call exit() if we can to avoid calling destructors.
75   if (CanExitEarly)
76     exitLld(errorCount() ? 1 : 0);
77 
78   freeArena();
79   return !errorCount();
80 }
81 
82 // Drop directory components and replace extension with ".exe" or ".dll".
83 static std::string getOutputPath(StringRef Path) {
84   auto P = Path.find_last_of("\\/");
85   StringRef S = (P == StringRef::npos) ? Path : Path.substr(P + 1);
86   const char* E = Config->DLL ? ".dll" : ".exe";
87   return (S.substr(0, S.rfind('.')) + E).str();
88 }
89 
90 // ErrorOr is not default constructible, so it cannot be used as the type
91 // parameter of a future.
92 // FIXME: We could open the file in createFutureForFile and avoid needing to
93 // return an error here, but for the moment that would cost us a file descriptor
94 // (a limited resource on Windows) for the duration that the future is pending.
95 typedef std::pair<std::unique_ptr<MemoryBuffer>, std::error_code> MBErrPair;
96 
97 // Create a std::future that opens and maps a file using the best strategy for
98 // the host platform.
99 static std::future<MBErrPair> createFutureForFile(std::string Path) {
100 #if _WIN32
101   // On Windows, file I/O is relatively slow so it is best to do this
102   // asynchronously.
103   auto Strategy = std::launch::async;
104 #else
105   auto Strategy = std::launch::deferred;
106 #endif
107   return std::async(Strategy, [=]() {
108     auto MBOrErr = MemoryBuffer::getFile(Path,
109                                          /*FileSize*/ -1,
110                                          /*RequiresNullTerminator*/ false);
111     if (!MBOrErr)
112       return MBErrPair{nullptr, MBOrErr.getError()};
113     return MBErrPair{std::move(*MBOrErr), std::error_code()};
114   });
115 }
116 
117 MemoryBufferRef LinkerDriver::takeBuffer(std::unique_ptr<MemoryBuffer> MB) {
118   MemoryBufferRef MBRef = *MB;
119   make<std::unique_ptr<MemoryBuffer>>(std::move(MB)); // take ownership
120 
121   if (Driver->Tar)
122     Driver->Tar->append(relativeToRoot(MBRef.getBufferIdentifier()),
123                         MBRef.getBuffer());
124   return MBRef;
125 }
126 
127 void LinkerDriver::addBuffer(std::unique_ptr<MemoryBuffer> MB,
128                              bool WholeArchive) {
129   StringRef Filename = MB->getBufferIdentifier();
130 
131   MemoryBufferRef MBRef = takeBuffer(std::move(MB));
132   FilePaths.push_back(Filename);
133 
134   // File type is detected by contents, not by file extension.
135   switch (identify_magic(MBRef.getBuffer())) {
136   case file_magic::windows_resource:
137     Resources.push_back(MBRef);
138     break;
139   case file_magic::archive:
140     if (WholeArchive) {
141       std::unique_ptr<Archive> File =
142           CHECK(Archive::create(MBRef), Filename + ": failed to parse archive");
143 
144       for (MemoryBufferRef M : getArchiveMembers(File.get()))
145         addArchiveBuffer(M, "<whole-archive>", Filename);
146       return;
147     }
148     Symtab->addFile(make<ArchiveFile>(MBRef));
149     break;
150   case file_magic::bitcode:
151     Symtab->addFile(make<BitcodeFile>(MBRef));
152     break;
153   case file_magic::coff_object:
154   case file_magic::coff_import_library:
155     Symtab->addFile(make<ObjFile>(MBRef));
156     break;
157   case file_magic::coff_cl_gl_object:
158     error(Filename + ": is not a native COFF file. Recompile without /GL");
159     break;
160   case file_magic::pecoff_executable:
161     if (Filename.endswith_lower(".dll")) {
162       error(Filename + ": bad file type. Did you specify a DLL instead of an "
163                        "import library?");
164       break;
165     }
166     LLVM_FALLTHROUGH;
167   default:
168     error(MBRef.getBufferIdentifier() + ": unknown file type");
169     break;
170   }
171 }
172 
173 void LinkerDriver::enqueuePath(StringRef Path, bool WholeArchive) {
174   auto Future =
175       std::make_shared<std::future<MBErrPair>>(createFutureForFile(Path));
176   std::string PathStr = Path;
177   enqueueTask([=]() {
178     auto MBOrErr = Future->get();
179     if (MBOrErr.second)
180       error("could not open " + PathStr + ": " + MBOrErr.second.message());
181     else
182       Driver->addBuffer(std::move(MBOrErr.first), WholeArchive);
183   });
184 }
185 
186 void LinkerDriver::addArchiveBuffer(MemoryBufferRef MB, StringRef SymName,
187                                     StringRef ParentName) {
188   file_magic Magic = identify_magic(MB.getBuffer());
189   if (Magic == file_magic::coff_import_library) {
190     Symtab->addFile(make<ImportFile>(MB));
191     return;
192   }
193 
194   InputFile *Obj;
195   if (Magic == file_magic::coff_object) {
196     Obj = make<ObjFile>(MB);
197   } else if (Magic == file_magic::bitcode) {
198     Obj = make<BitcodeFile>(MB);
199   } else {
200     error("unknown file type: " + MB.getBufferIdentifier());
201     return;
202   }
203 
204   Obj->ParentName = ParentName;
205   Symtab->addFile(Obj);
206   log("Loaded " + toString(Obj) + " for " + SymName);
207 }
208 
209 void LinkerDriver::enqueueArchiveMember(const Archive::Child &C,
210                                         StringRef SymName,
211                                         StringRef ParentName) {
212   if (!C.getParent()->isThin()) {
213     MemoryBufferRef MB = CHECK(
214         C.getMemoryBufferRef(),
215         "could not get the buffer for the member defining symbol " + SymName);
216     enqueueTask([=]() { Driver->addArchiveBuffer(MB, SymName, ParentName); });
217     return;
218   }
219 
220   auto Future = std::make_shared<std::future<MBErrPair>>(createFutureForFile(
221       CHECK(C.getFullName(),
222             "could not get the filename for the member defining symbol " +
223                 SymName)));
224   enqueueTask([=]() {
225     auto MBOrErr = Future->get();
226     if (MBOrErr.second)
227       fatal("could not get the buffer for the member defining " + SymName +
228             ": " + MBOrErr.second.message());
229     Driver->addArchiveBuffer(takeBuffer(std::move(MBOrErr.first)), SymName,
230                              ParentName);
231   });
232 }
233 
234 static bool isDecorated(StringRef Sym) {
235   return Sym.startswith("@") || Sym.contains("@@") || Sym.startswith("?") ||
236          (!Config->MinGW && Sym.contains('@'));
237 }
238 
239 // Parses .drectve section contents and returns a list of files
240 // specified by /defaultlib.
241 void LinkerDriver::parseDirectives(StringRef S) {
242   ArgParser Parser;
243   // .drectve is always tokenized using Windows shell rules.
244   // /EXPORT: option can appear too many times, processing in fastpath.
245   opt::InputArgList Args;
246   std::vector<StringRef> Exports;
247   std::tie(Args, Exports) = Parser.parseDirectives(S);
248 
249   for (StringRef E : Exports) {
250     // If a common header file contains dllexported function
251     // declarations, many object files may end up with having the
252     // same /EXPORT options. In order to save cost of parsing them,
253     // we dedup them first.
254     if (!DirectivesExports.insert(E).second)
255       continue;
256 
257     Export Exp = parseExport(E);
258     if (Config->Machine == I386 && Config->MinGW) {
259       if (!isDecorated(Exp.Name))
260         Exp.Name = Saver.save("_" + Exp.Name);
261       if (!Exp.ExtName.empty() && !isDecorated(Exp.ExtName))
262         Exp.ExtName = Saver.save("_" + Exp.ExtName);
263     }
264     Exp.Directives = true;
265     Config->Exports.push_back(Exp);
266   }
267 
268   for (auto *Arg : Args) {
269     switch (Arg->getOption().getUnaliasedOption().getID()) {
270     case OPT_aligncomm:
271       parseAligncomm(Arg->getValue());
272       break;
273     case OPT_alternatename:
274       parseAlternateName(Arg->getValue());
275       break;
276     case OPT_defaultlib:
277       if (Optional<StringRef> Path = findLib(Arg->getValue()))
278         enqueuePath(*Path, false);
279       break;
280     case OPT_entry:
281       Config->Entry = addUndefined(mangle(Arg->getValue()));
282       break;
283     case OPT_failifmismatch:
284       checkFailIfMismatch(Arg->getValue());
285       break;
286     case OPT_incl:
287       addUndefined(Arg->getValue());
288       break;
289     case OPT_merge:
290       parseMerge(Arg->getValue());
291       break;
292     case OPT_nodefaultlib:
293       Config->NoDefaultLibs.insert(doFindLib(Arg->getValue()));
294       break;
295     case OPT_section:
296       parseSection(Arg->getValue());
297       break;
298     case OPT_subsystem:
299       parseSubsystem(Arg->getValue(), &Config->Subsystem,
300                      &Config->MajorOSVersion, &Config->MinorOSVersion);
301       break;
302     case OPT_editandcontinue:
303     case OPT_fastfail:
304     case OPT_guardsym:
305     case OPT_natvis:
306     case OPT_throwingnew:
307       break;
308     default:
309       error(Arg->getSpelling() + " is not allowed in .drectve");
310     }
311   }
312 }
313 
314 // Find file from search paths. You can omit ".obj", this function takes
315 // care of that. Note that the returned path is not guaranteed to exist.
316 StringRef LinkerDriver::doFindFile(StringRef Filename) {
317   bool HasPathSep = (Filename.find_first_of("/\\") != StringRef::npos);
318   if (HasPathSep)
319     return Filename;
320   bool HasExt = Filename.contains('.');
321   for (StringRef Dir : SearchPaths) {
322     SmallString<128> Path = Dir;
323     sys::path::append(Path, Filename);
324     if (sys::fs::exists(Path.str()))
325       return Saver.save(Path.str());
326     if (!HasExt) {
327       Path.append(".obj");
328       if (sys::fs::exists(Path.str()))
329         return Saver.save(Path.str());
330     }
331   }
332   return Filename;
333 }
334 
335 static Optional<sys::fs::UniqueID> getUniqueID(StringRef Path) {
336   sys::fs::UniqueID Ret;
337   if (sys::fs::getUniqueID(Path, Ret))
338     return None;
339   return Ret;
340 }
341 
342 // Resolves a file path. This never returns the same path
343 // (in that case, it returns None).
344 Optional<StringRef> LinkerDriver::findFile(StringRef Filename) {
345   StringRef Path = doFindFile(Filename);
346 
347   if (Optional<sys::fs::UniqueID> ID = getUniqueID(Path)) {
348     bool Seen = !VisitedFiles.insert(*ID).second;
349     if (Seen)
350       return None;
351   }
352 
353   if (Path.endswith_lower(".lib"))
354     VisitedLibs.insert(sys::path::filename(Path));
355   return Path;
356 }
357 
358 // Find library file from search path.
359 StringRef LinkerDriver::doFindLib(StringRef Filename) {
360   // Add ".lib" to Filename if that has no file extension.
361   bool HasExt = Filename.contains('.');
362   if (!HasExt)
363     Filename = Saver.save(Filename + ".lib");
364   return doFindFile(Filename);
365 }
366 
367 // Resolves a library path. /nodefaultlib options are taken into
368 // consideration. This never returns the same path (in that case,
369 // it returns None).
370 Optional<StringRef> LinkerDriver::findLib(StringRef Filename) {
371   if (Config->NoDefaultLibAll)
372     return None;
373   if (!VisitedLibs.insert(Filename.lower()).second)
374     return None;
375 
376   StringRef Path = doFindLib(Filename);
377   if (Config->NoDefaultLibs.count(Path))
378     return None;
379 
380   if (Optional<sys::fs::UniqueID> ID = getUniqueID(Path))
381     if (!VisitedFiles.insert(*ID).second)
382       return None;
383   return Path;
384 }
385 
386 // Parses LIB environment which contains a list of search paths.
387 void LinkerDriver::addLibSearchPaths() {
388   Optional<std::string> EnvOpt = Process::GetEnv("LIB");
389   if (!EnvOpt.hasValue())
390     return;
391   StringRef Env = Saver.save(*EnvOpt);
392   while (!Env.empty()) {
393     StringRef Path;
394     std::tie(Path, Env) = Env.split(';');
395     SearchPaths.push_back(Path);
396   }
397 }
398 
399 Symbol *LinkerDriver::addUndefined(StringRef Name) {
400   Symbol *B = Symtab->addUndefined(Name);
401   if (!B->IsGCRoot) {
402     B->IsGCRoot = true;
403     Config->GCRoot.push_back(B);
404   }
405   return B;
406 }
407 
408 // Symbol names are mangled by appending "_" prefix on x86.
409 StringRef LinkerDriver::mangle(StringRef Sym) {
410   assert(Config->Machine != IMAGE_FILE_MACHINE_UNKNOWN);
411   if (Config->Machine == I386)
412     return Saver.save("_" + Sym);
413   return Sym;
414 }
415 
416 // Windows specific -- find default entry point name.
417 //
418 // There are four different entry point functions for Windows executables,
419 // each of which corresponds to a user-defined "main" function. This function
420 // infers an entry point from a user-defined "main" function.
421 StringRef LinkerDriver::findDefaultEntry() {
422   // As a special case, if /nodefaultlib is given, we directly look for an
423   // entry point. This is because, if no default library is linked, users
424   // need to define an entry point instead of a "main".
425   if (Config->NoDefaultLibAll) {
426     for (StringRef S : {"mainCRTStartup", "wmainCRTStartup",
427                         "WinMainCRTStartup", "wWinMainCRTStartup"}) {
428       StringRef Entry = Symtab->findMangle(S);
429       if (!Entry.empty() && !isa<Undefined>(Symtab->find(Entry)))
430         return mangle(S);
431     }
432     return "";
433   }
434 
435   // User-defined main functions and their corresponding entry points.
436   static const char *Entries[][2] = {
437       {"main", "mainCRTStartup"},
438       {"wmain", "wmainCRTStartup"},
439       {"WinMain", "WinMainCRTStartup"},
440       {"wWinMain", "wWinMainCRTStartup"},
441   };
442   for (auto E : Entries) {
443     StringRef Entry = Symtab->findMangle(mangle(E[0]));
444     if (!Entry.empty() && !isa<Undefined>(Symtab->find(Entry)))
445       return mangle(E[1]);
446   }
447   return "";
448 }
449 
450 WindowsSubsystem LinkerDriver::inferSubsystem() {
451   if (Config->DLL)
452     return IMAGE_SUBSYSTEM_WINDOWS_GUI;
453   if (Symtab->findUnderscore("main") || Symtab->findUnderscore("wmain"))
454     return IMAGE_SUBSYSTEM_WINDOWS_CUI;
455   if (Symtab->findUnderscore("WinMain") || Symtab->findUnderscore("wWinMain"))
456     return IMAGE_SUBSYSTEM_WINDOWS_GUI;
457   return IMAGE_SUBSYSTEM_UNKNOWN;
458 }
459 
460 static uint64_t getDefaultImageBase() {
461   if (Config->is64())
462     return Config->DLL ? 0x180000000 : 0x140000000;
463   return Config->DLL ? 0x10000000 : 0x400000;
464 }
465 
466 static std::string createResponseFile(const opt::InputArgList &Args,
467                                       ArrayRef<StringRef> FilePaths,
468                                       ArrayRef<StringRef> SearchPaths) {
469   SmallString<0> Data;
470   raw_svector_ostream OS(Data);
471 
472   for (auto *Arg : Args) {
473     switch (Arg->getOption().getID()) {
474     case OPT_linkrepro:
475     case OPT_INPUT:
476     case OPT_defaultlib:
477     case OPT_libpath:
478     case OPT_manifest:
479     case OPT_manifest_colon:
480     case OPT_manifestdependency:
481     case OPT_manifestfile:
482     case OPT_manifestinput:
483     case OPT_manifestuac:
484       break;
485     default:
486       OS << toString(*Arg) << "\n";
487     }
488   }
489 
490   for (StringRef Path : SearchPaths) {
491     std::string RelPath = relativeToRoot(Path);
492     OS << "/libpath:" << quote(RelPath) << "\n";
493   }
494 
495   for (StringRef Path : FilePaths)
496     OS << quote(relativeToRoot(Path)) << "\n";
497 
498   return Data.str();
499 }
500 
501 static unsigned getDefaultDebugType(const opt::InputArgList &Args) {
502   unsigned DebugTypes = static_cast<unsigned>(DebugType::CV);
503   if (Args.hasArg(OPT_driver))
504     DebugTypes |= static_cast<unsigned>(DebugType::PData);
505   if (Args.hasArg(OPT_profile))
506     DebugTypes |= static_cast<unsigned>(DebugType::Fixup);
507   return DebugTypes;
508 }
509 
510 static unsigned parseDebugType(StringRef Arg) {
511   SmallVector<StringRef, 3> Types;
512   Arg.split(Types, ',', /*KeepEmpty=*/false);
513 
514   unsigned DebugTypes = static_cast<unsigned>(DebugType::None);
515   for (StringRef Type : Types)
516     DebugTypes |= StringSwitch<unsigned>(Type.lower())
517                       .Case("cv", static_cast<unsigned>(DebugType::CV))
518                       .Case("pdata", static_cast<unsigned>(DebugType::PData))
519                       .Case("fixup", static_cast<unsigned>(DebugType::Fixup))
520                       .Default(0);
521   return DebugTypes;
522 }
523 
524 static std::string getMapFile(const opt::InputArgList &Args) {
525   auto *Arg = Args.getLastArg(OPT_lldmap, OPT_lldmap_file);
526   if (!Arg)
527     return "";
528   if (Arg->getOption().getID() == OPT_lldmap_file)
529     return Arg->getValue();
530 
531   assert(Arg->getOption().getID() == OPT_lldmap);
532   StringRef OutFile = Config->OutputFile;
533   return (OutFile.substr(0, OutFile.rfind('.')) + ".map").str();
534 }
535 
536 static std::string getImplibPath() {
537   if (!Config->Implib.empty())
538     return Config->Implib;
539   SmallString<128> Out = StringRef(Config->OutputFile);
540   sys::path::replace_extension(Out, ".lib");
541   return Out.str();
542 }
543 
544 //
545 // The import name is caculated as the following:
546 //
547 //        | LIBRARY w/ ext |   LIBRARY w/o ext   | no LIBRARY
548 //   -----+----------------+---------------------+------------------
549 //   LINK | {value}        | {value}.{.dll/.exe} | {output name}
550 //    LIB | {value}        | {value}.dll         | {output name}.dll
551 //
552 static std::string getImportName(bool AsLib) {
553   SmallString<128> Out;
554 
555   if (Config->ImportName.empty()) {
556     Out.assign(sys::path::filename(Config->OutputFile));
557     if (AsLib)
558       sys::path::replace_extension(Out, ".dll");
559   } else {
560     Out.assign(Config->ImportName);
561     if (!sys::path::has_extension(Out))
562       sys::path::replace_extension(Out,
563                                    (Config->DLL || AsLib) ? ".dll" : ".exe");
564   }
565 
566   return Out.str();
567 }
568 
569 static void createImportLibrary(bool AsLib) {
570   std::vector<COFFShortExport> Exports;
571   for (Export &E1 : Config->Exports) {
572     COFFShortExport E2;
573     E2.Name = E1.Name;
574     E2.SymbolName = E1.SymbolName;
575     E2.ExtName = E1.ExtName;
576     E2.Ordinal = E1.Ordinal;
577     E2.Noname = E1.Noname;
578     E2.Data = E1.Data;
579     E2.Private = E1.Private;
580     E2.Constant = E1.Constant;
581     Exports.push_back(E2);
582   }
583 
584   auto HandleError = [](Error &&E) {
585     handleAllErrors(std::move(E),
586                     [](ErrorInfoBase &EIB) { error(EIB.message()); });
587   };
588   std::string LibName = getImportName(AsLib);
589   std::string Path = getImplibPath();
590 
591   if (!Config->Incremental) {
592     HandleError(writeImportLibrary(LibName, Path, Exports, Config->Machine,
593                                    Config->MinGW));
594     return;
595   }
596 
597   // If the import library already exists, replace it only if the contents
598   // have changed.
599   ErrorOr<std::unique_ptr<MemoryBuffer>> OldBuf = MemoryBuffer::getFile(
600       Path, /*FileSize*/ -1, /*RequiresNullTerminator*/ false);
601   if (!OldBuf) {
602     HandleError(writeImportLibrary(LibName, Path, Exports, Config->Machine,
603                                    Config->MinGW));
604     return;
605   }
606 
607   SmallString<128> TmpName;
608   if (std::error_code EC =
609           sys::fs::createUniqueFile(Path + ".tmp-%%%%%%%%.lib", TmpName))
610     fatal("cannot create temporary file for import library " + Path + ": " +
611           EC.message());
612 
613   if (Error E = writeImportLibrary(LibName, TmpName, Exports, Config->Machine,
614                                    Config->MinGW)) {
615     HandleError(std::move(E));
616     return;
617   }
618 
619   std::unique_ptr<MemoryBuffer> NewBuf = check(MemoryBuffer::getFile(
620       TmpName, /*FileSize*/ -1, /*RequiresNullTerminator*/ false));
621   if ((*OldBuf)->getBuffer() != NewBuf->getBuffer()) {
622     OldBuf->reset();
623     HandleError(errorCodeToError(sys::fs::rename(TmpName, Path)));
624   } else {
625     sys::fs::remove(TmpName);
626   }
627 }
628 
629 static void parseModuleDefs(StringRef Path) {
630   std::unique_ptr<MemoryBuffer> MB = CHECK(
631       MemoryBuffer::getFile(Path, -1, false, true), "could not open " + Path);
632   COFFModuleDefinition M = check(parseCOFFModuleDefinition(
633       MB->getMemBufferRef(), Config->Machine, Config->MinGW));
634 
635   if (Config->OutputFile.empty())
636     Config->OutputFile = Saver.save(M.OutputFile);
637   Config->ImportName = Saver.save(M.ImportName);
638   if (M.ImageBase)
639     Config->ImageBase = M.ImageBase;
640   if (M.StackReserve)
641     Config->StackReserve = M.StackReserve;
642   if (M.StackCommit)
643     Config->StackCommit = M.StackCommit;
644   if (M.HeapReserve)
645     Config->HeapReserve = M.HeapReserve;
646   if (M.HeapCommit)
647     Config->HeapCommit = M.HeapCommit;
648   if (M.MajorImageVersion)
649     Config->MajorImageVersion = M.MajorImageVersion;
650   if (M.MinorImageVersion)
651     Config->MinorImageVersion = M.MinorImageVersion;
652   if (M.MajorOSVersion)
653     Config->MajorOSVersion = M.MajorOSVersion;
654   if (M.MinorOSVersion)
655     Config->MinorOSVersion = M.MinorOSVersion;
656 
657   for (COFFShortExport E1 : M.Exports) {
658     Export E2;
659     // In simple cases, only Name is set. Renamed exports are parsed
660     // and set as "ExtName = Name". If Name has the form "OtherDll.Func",
661     // it shouldn't be a normal exported function but a forward to another
662     // DLL instead. This is supported by both MS and GNU linkers.
663     if (E1.ExtName != E1.Name && StringRef(E1.Name).contains('.')) {
664       E2.Name = Saver.save(E1.ExtName);
665       E2.ForwardTo = Saver.save(E1.Name);
666       Config->Exports.push_back(E2);
667       continue;
668     }
669     E2.Name = Saver.save(E1.Name);
670     E2.ExtName = Saver.save(E1.ExtName);
671     E2.Ordinal = E1.Ordinal;
672     E2.Noname = E1.Noname;
673     E2.Data = E1.Data;
674     E2.Private = E1.Private;
675     E2.Constant = E1.Constant;
676     Config->Exports.push_back(E2);
677   }
678 }
679 
680 // A helper function for filterBitcodeFiles.
681 static bool needsRebuilding(MemoryBufferRef MB) {
682   // The MSVC linker doesn't support thin archives, so if it's a thin
683   // archive, we always need to rebuild it.
684   std::unique_ptr<Archive> File =
685       CHECK(Archive::create(MB), "Failed to read " + MB.getBufferIdentifier());
686   if (File->isThin())
687     return true;
688 
689   // Returns true if the archive contains at least one bitcode file.
690   for (MemoryBufferRef Member : getArchiveMembers(File.get()))
691     if (identify_magic(Member.getBuffer()) == file_magic::bitcode)
692       return true;
693   return false;
694 }
695 
696 // Opens a given path as an archive file and removes bitcode files
697 // from them if exists. This function is to appease the MSVC linker as
698 // their linker doesn't like archive files containing non-native
699 // object files.
700 //
701 // If a given archive doesn't contain bitcode files, the archive path
702 // is returned as-is. Otherwise, a new temporary file is created and
703 // its path is returned.
704 static Optional<std::string>
705 filterBitcodeFiles(StringRef Path, std::vector<std::string> &TemporaryFiles) {
706   std::unique_ptr<MemoryBuffer> MB = CHECK(
707       MemoryBuffer::getFile(Path, -1, false, true), "could not open " + Path);
708   MemoryBufferRef MBRef = MB->getMemBufferRef();
709   file_magic Magic = identify_magic(MBRef.getBuffer());
710 
711   if (Magic == file_magic::bitcode)
712     return None;
713   if (Magic != file_magic::archive)
714     return Path.str();
715   if (!needsRebuilding(MBRef))
716     return Path.str();
717 
718   std::unique_ptr<Archive> File =
719       CHECK(Archive::create(MBRef),
720             MBRef.getBufferIdentifier() + ": failed to parse archive");
721 
722   std::vector<NewArchiveMember> New;
723   for (MemoryBufferRef Member : getArchiveMembers(File.get()))
724     if (identify_magic(Member.getBuffer()) != file_magic::bitcode)
725       New.emplace_back(Member);
726 
727   if (New.empty())
728     return None;
729 
730   log("Creating a temporary archive for " + Path + " to remove bitcode files");
731 
732   SmallString<128> S;
733   if (std::error_code EC = sys::fs::createTemporaryFile(
734           "lld-" + sys::path::stem(Path), ".lib", S))
735     fatal("cannot create a temporary file: " + EC.message());
736   std::string Temp = S.str();
737   TemporaryFiles.push_back(Temp);
738 
739   Error E =
740       llvm::writeArchive(Temp, New, /*WriteSymtab=*/true, Archive::Kind::K_GNU,
741                          /*Deterministics=*/true,
742                          /*Thin=*/false);
743   handleAllErrors(std::move(E), [&](const ErrorInfoBase &EI) {
744     error("failed to create a new archive " + S.str() + ": " + EI.message());
745   });
746   return Temp;
747 }
748 
749 // Create response file contents and invoke the MSVC linker.
750 void LinkerDriver::invokeMSVC(opt::InputArgList &Args) {
751   std::string Rsp = "/nologo\n";
752   std::vector<std::string> Temps;
753 
754   // Write out archive members that we used in symbol resolution and pass these
755   // to MSVC before any archives, so that MSVC uses the same objects to satisfy
756   // references.
757   for (ObjFile *Obj : ObjFile::Instances) {
758     if (Obj->ParentName.empty())
759       continue;
760     SmallString<128> S;
761     int Fd;
762     if (auto EC = sys::fs::createTemporaryFile(
763             "lld-" + sys::path::filename(Obj->ParentName), ".obj", Fd, S))
764       fatal("cannot create a temporary file: " + EC.message());
765     raw_fd_ostream OS(Fd, /*shouldClose*/ true);
766     OS << Obj->MB.getBuffer();
767     Temps.push_back(S.str());
768     Rsp += quote(S) + "\n";
769   }
770 
771   for (auto *Arg : Args) {
772     switch (Arg->getOption().getID()) {
773     case OPT_linkrepro:
774     case OPT_lldmap:
775     case OPT_lldmap_file:
776     case OPT_lldsavetemps:
777     case OPT_msvclto:
778       // LLD-specific options are stripped.
779       break;
780     case OPT_opt:
781       if (!StringRef(Arg->getValue()).startswith("lld"))
782         Rsp += toString(*Arg) + " ";
783       break;
784     case OPT_INPUT: {
785       if (Optional<StringRef> Path = doFindFile(Arg->getValue())) {
786         if (Optional<std::string> S = filterBitcodeFiles(*Path, Temps))
787           Rsp += quote(*S) + "\n";
788         continue;
789       }
790       Rsp += quote(Arg->getValue()) + "\n";
791       break;
792     }
793     default:
794       Rsp += toString(*Arg) + "\n";
795     }
796   }
797 
798   std::vector<StringRef> ObjFiles = Symtab->compileBitcodeFiles();
799   runMSVCLinker(Rsp, ObjFiles);
800 
801   for (StringRef Path : Temps)
802     sys::fs::remove(Path);
803 }
804 
805 void LinkerDriver::enqueueTask(std::function<void()> Task) {
806   TaskQueue.push_back(std::move(Task));
807 }
808 
809 bool LinkerDriver::run() {
810   ScopedTimer T(InputFileTimer);
811 
812   bool DidWork = !TaskQueue.empty();
813   while (!TaskQueue.empty()) {
814     TaskQueue.front()();
815     TaskQueue.pop_front();
816   }
817   return DidWork;
818 }
819 
820 // Parse an /order file. If an option is given, the linker places
821 // COMDAT sections in the same order as their names appear in the
822 // given file.
823 static void parseOrderFile(StringRef Arg) {
824   // For some reason, the MSVC linker requires a filename to be
825   // preceded by "@".
826   if (!Arg.startswith("@")) {
827     error("malformed /order option: '@' missing");
828     return;
829   }
830 
831   // Get a list of all comdat sections for error checking.
832   DenseSet<StringRef> Set;
833   for (Chunk *C : Symtab->getChunks())
834     if (auto *Sec = dyn_cast<SectionChunk>(C))
835       if (Sec->Sym)
836         Set.insert(Sec->Sym->getName());
837 
838   // Open a file.
839   StringRef Path = Arg.substr(1);
840   std::unique_ptr<MemoryBuffer> MB = CHECK(
841       MemoryBuffer::getFile(Path, -1, false, true), "could not open " + Path);
842 
843   // Parse a file. An order file contains one symbol per line.
844   // All symbols that were not present in a given order file are
845   // considered to have the lowest priority 0 and are placed at
846   // end of an output section.
847   for (std::string S : args::getLines(MB->getMemBufferRef())) {
848     if (Config->Machine == I386 && !isDecorated(S))
849       S = "_" + S;
850 
851     if (Set.count(S) == 0) {
852       if (Config->WarnMissingOrderSymbol)
853         warn("/order:" + Arg + ": missing symbol: " + S + " [LNK4037]");
854     }
855     else
856       Config->Order[S] = INT_MIN + Config->Order.size();
857   }
858 }
859 
860 void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {
861   // If the first command line argument is "/lib", link.exe acts like lib.exe.
862   // We call our own implementation of lib.exe that understands bitcode files.
863   if (ArgsArr.size() > 1 && StringRef(ArgsArr[1]).equals_lower("/lib")) {
864     if (llvm::libDriverMain(ArgsArr.slice(1)) != 0)
865       fatal("lib failed");
866     return;
867   }
868 
869   // Needed for LTO.
870   InitializeAllTargetInfos();
871   InitializeAllTargets();
872   InitializeAllTargetMCs();
873   InitializeAllAsmParsers();
874   InitializeAllAsmPrinters();
875 
876   // Parse command line options.
877   ArgParser Parser;
878   opt::InputArgList Args = Parser.parseLINK(ArgsArr.slice(1));
879 
880   // Parse and evaluate -mllvm options.
881   std::vector<const char *> V;
882   V.push_back("lld-link (LLVM option parsing)");
883   for (auto *Arg : Args.filtered(OPT_mllvm))
884     V.push_back(Arg->getValue());
885   cl::ParseCommandLineOptions(V.size(), V.data());
886 
887   // Handle /errorlimit early, because error() depends on it.
888   if (auto *Arg = Args.getLastArg(OPT_errorlimit)) {
889     int N = 20;
890     StringRef S = Arg->getValue();
891     if (S.getAsInteger(10, N))
892       error(Arg->getSpelling() + " number expected, but got " + S);
893     errorHandler().ErrorLimit = N;
894   }
895 
896   // Handle /help
897   if (Args.hasArg(OPT_help)) {
898     printHelp(ArgsArr[0]);
899     return;
900   }
901 
902   if (Args.hasArg(OPT_show_timing))
903     Config->ShowTiming = true;
904 
905   ScopedTimer T(Timer::root());
906   // Handle --version, which is an lld extension. This option is a bit odd
907   // because it doesn't start with "/", but we deliberately chose "--" to
908   // avoid conflict with /version and for compatibility with clang-cl.
909   if (Args.hasArg(OPT_dash_dash_version)) {
910     outs() << getLLDVersion() << "\n";
911     return;
912   }
913 
914   // Handle /lldmingw early, since it can potentially affect how other
915   // options are handled.
916   Config->MinGW = Args.hasArg(OPT_lldmingw);
917 
918   if (auto *Arg = Args.getLastArg(OPT_linkrepro)) {
919     SmallString<64> Path = StringRef(Arg->getValue());
920     sys::path::append(Path, "repro.tar");
921 
922     Expected<std::unique_ptr<TarWriter>> ErrOrWriter =
923         TarWriter::create(Path, "repro");
924 
925     if (ErrOrWriter) {
926       Tar = std::move(*ErrOrWriter);
927     } else {
928       error("/linkrepro: failed to open " + Path + ": " +
929             toString(ErrOrWriter.takeError()));
930     }
931   }
932 
933   if (!Args.hasArg(OPT_INPUT)) {
934     if (Args.hasArg(OPT_deffile))
935       Config->NoEntry = true;
936     else
937       fatal("no input files");
938   }
939 
940   // Construct search path list.
941   SearchPaths.push_back("");
942   for (auto *Arg : Args.filtered(OPT_libpath))
943     SearchPaths.push_back(Arg->getValue());
944   addLibSearchPaths();
945 
946   // Handle /ignore
947   for (auto *Arg : Args.filtered(OPT_ignore)) {
948     if (StringRef(Arg->getValue()) == "4037")
949       Config->WarnMissingOrderSymbol = false;
950     else if (StringRef(Arg->getValue()) == "4217")
951       Config->WarnLocallyDefinedImported = false;
952     // Other warning numbers are ignored.
953   }
954 
955   // Handle /out
956   if (auto *Arg = Args.getLastArg(OPT_out))
957     Config->OutputFile = Arg->getValue();
958 
959   // Handle /verbose
960   if (Args.hasArg(OPT_verbose))
961     Config->Verbose = true;
962   errorHandler().Verbose = Config->Verbose;
963 
964   // Handle /force or /force:unresolved
965   if (Args.hasArg(OPT_force, OPT_force_unresolved))
966     Config->Force = true;
967 
968   // Handle /debug
969   if (Args.hasArg(OPT_debug, OPT_debug_dwarf, OPT_debug_ghash)) {
970     Config->Debug = true;
971     Config->Incremental = true;
972     if (auto *Arg = Args.getLastArg(OPT_debugtype))
973       Config->DebugTypes = parseDebugType(Arg->getValue());
974     else
975       Config->DebugTypes = getDefaultDebugType(Args);
976   }
977 
978   // Handle /pdb
979   bool ShouldCreatePDB = Args.hasArg(OPT_debug, OPT_debug_ghash);
980   if (ShouldCreatePDB) {
981     if (auto *Arg = Args.getLastArg(OPT_pdb))
982       Config->PDBPath = Arg->getValue();
983     if (auto *Arg = Args.getLastArg(OPT_pdbaltpath))
984       Config->PDBAltPath = Arg->getValue();
985     if (Args.hasArg(OPT_natvis))
986       Config->NatvisFiles = Args.getAllArgValues(OPT_natvis);
987   }
988 
989   // Handle /noentry
990   if (Args.hasArg(OPT_noentry)) {
991     if (Args.hasArg(OPT_dll))
992       Config->NoEntry = true;
993     else
994       error("/noentry must be specified with /dll");
995   }
996 
997   // Handle /dll
998   if (Args.hasArg(OPT_dll)) {
999     Config->DLL = true;
1000     Config->ManifestID = 2;
1001   }
1002 
1003   // Handle /dynamicbase and /fixed. We can't use hasFlag for /dynamicbase
1004   // because we need to explicitly check whether that option or its inverse was
1005   // present in the argument list in order to handle /fixed.
1006   auto *DynamicBaseArg = Args.getLastArg(OPT_dynamicbase, OPT_dynamicbase_no);
1007   if (DynamicBaseArg &&
1008       DynamicBaseArg->getOption().getID() == OPT_dynamicbase_no)
1009     Config->DynamicBase = false;
1010 
1011   // MSDN claims "/FIXED:NO is the default setting for a DLL, and /FIXED is the
1012   // default setting for any other project type.", but link.exe defaults to
1013   // /FIXED:NO for exe outputs as well. Match behavior, not docs.
1014   bool Fixed = Args.hasFlag(OPT_fixed, OPT_fixed_no, false);
1015   if (Fixed) {
1016     if (DynamicBaseArg &&
1017         DynamicBaseArg->getOption().getID() == OPT_dynamicbase) {
1018       error("/fixed must not be specified with /dynamicbase");
1019     } else {
1020       Config->Relocatable = false;
1021       Config->DynamicBase = false;
1022     }
1023   }
1024 
1025   // Handle /appcontainer
1026   Config->AppContainer =
1027       Args.hasFlag(OPT_appcontainer, OPT_appcontainer_no, false);
1028 
1029   // Handle /machine
1030   if (auto *Arg = Args.getLastArg(OPT_machine))
1031     Config->Machine = getMachineType(Arg->getValue());
1032 
1033   // Handle /nodefaultlib:<filename>
1034   for (auto *Arg : Args.filtered(OPT_nodefaultlib))
1035     Config->NoDefaultLibs.insert(doFindLib(Arg->getValue()));
1036 
1037   // Handle /nodefaultlib
1038   if (Args.hasArg(OPT_nodefaultlib_all))
1039     Config->NoDefaultLibAll = true;
1040 
1041   // Handle /base
1042   if (auto *Arg = Args.getLastArg(OPT_base))
1043     parseNumbers(Arg->getValue(), &Config->ImageBase);
1044 
1045   // Handle /stack
1046   if (auto *Arg = Args.getLastArg(OPT_stack))
1047     parseNumbers(Arg->getValue(), &Config->StackReserve, &Config->StackCommit);
1048 
1049   // Handle /guard:cf
1050   if (auto *Arg = Args.getLastArg(OPT_guard))
1051     parseGuard(Arg->getValue());
1052 
1053   // Handle /heap
1054   if (auto *Arg = Args.getLastArg(OPT_heap))
1055     parseNumbers(Arg->getValue(), &Config->HeapReserve, &Config->HeapCommit);
1056 
1057   // Handle /version
1058   if (auto *Arg = Args.getLastArg(OPT_version))
1059     parseVersion(Arg->getValue(), &Config->MajorImageVersion,
1060                  &Config->MinorImageVersion);
1061 
1062   // Handle /subsystem
1063   if (auto *Arg = Args.getLastArg(OPT_subsystem))
1064     parseSubsystem(Arg->getValue(), &Config->Subsystem, &Config->MajorOSVersion,
1065                    &Config->MinorOSVersion);
1066 
1067   // Handle /timestamp
1068   if (llvm::opt::Arg *Arg = Args.getLastArg(OPT_timestamp, OPT_repro)) {
1069     if (Arg->getOption().getID() == OPT_repro) {
1070       Config->Timestamp = 0;
1071       Config->Repro = true;
1072     } else {
1073       Config->Repro = false;
1074       StringRef Value(Arg->getValue());
1075       if (Value.getAsInteger(0, Config->Timestamp))
1076         fatal(Twine("invalid timestamp: ") + Value +
1077               ".  Expected 32-bit integer");
1078     }
1079   } else {
1080     Config->Repro = false;
1081     Config->Timestamp = time(nullptr);
1082   }
1083 
1084   // Handle /alternatename
1085   for (auto *Arg : Args.filtered(OPT_alternatename))
1086     parseAlternateName(Arg->getValue());
1087 
1088   // Handle /include
1089   for (auto *Arg : Args.filtered(OPT_incl))
1090     addUndefined(Arg->getValue());
1091 
1092   // Handle /implib
1093   if (auto *Arg = Args.getLastArg(OPT_implib))
1094     Config->Implib = Arg->getValue();
1095 
1096   // Handle /opt.
1097   bool DoGC = !Args.hasArg(OPT_debug) || Args.hasArg(OPT_profile);
1098   unsigned ICFLevel =
1099       Args.hasArg(OPT_profile) ? 0 : 1; // 0: off, 1: limited, 2: on
1100   unsigned TailMerge = 1;
1101   for (auto *Arg : Args.filtered(OPT_opt)) {
1102     std::string Str = StringRef(Arg->getValue()).lower();
1103     SmallVector<StringRef, 1> Vec;
1104     StringRef(Str).split(Vec, ',');
1105     for (StringRef S : Vec) {
1106       if (S == "ref") {
1107         DoGC = true;
1108       } else if (S == "noref") {
1109         DoGC = false;
1110       } else if (S == "icf" || S.startswith("icf=")) {
1111         ICFLevel = 2;
1112       } else if (S == "noicf") {
1113         ICFLevel = 0;
1114       } else if (S == "lldtailmerge") {
1115         TailMerge = 2;
1116       } else if (S == "nolldtailmerge") {
1117         TailMerge = 0;
1118       } else if (S.startswith("lldlto=")) {
1119         StringRef OptLevel = S.substr(7);
1120         if (OptLevel.getAsInteger(10, Config->LTOO) || Config->LTOO > 3)
1121           error("/opt:lldlto: invalid optimization level: " + OptLevel);
1122       } else if (S.startswith("lldltojobs=")) {
1123         StringRef Jobs = S.substr(11);
1124         if (Jobs.getAsInteger(10, Config->ThinLTOJobs) ||
1125             Config->ThinLTOJobs == 0)
1126           error("/opt:lldltojobs: invalid job count: " + Jobs);
1127       } else if (S.startswith("lldltopartitions=")) {
1128         StringRef N = S.substr(17);
1129         if (N.getAsInteger(10, Config->LTOPartitions) ||
1130             Config->LTOPartitions == 0)
1131           error("/opt:lldltopartitions: invalid partition count: " + N);
1132       } else if (S != "lbr" && S != "nolbr")
1133         error("/opt: unknown option: " + S);
1134     }
1135   }
1136 
1137   // Limited ICF is enabled if GC is enabled and ICF was never mentioned
1138   // explicitly.
1139   // FIXME: LLD only implements "limited" ICF, i.e. it only merges identical
1140   // code. If the user passes /OPT:ICF explicitly, LLD should merge identical
1141   // comdat readonly data.
1142   if (ICFLevel == 1 && !DoGC)
1143     ICFLevel = 0;
1144   Config->DoGC = DoGC;
1145   Config->DoICF = ICFLevel > 0;
1146   Config->TailMerge = (TailMerge == 1 && Config->DoICF) || TailMerge == 2;
1147 
1148   // Handle /lldsavetemps
1149   if (Args.hasArg(OPT_lldsavetemps))
1150     Config->SaveTemps = true;
1151 
1152   // Handle /kill-at
1153   if (Args.hasArg(OPT_kill_at))
1154     Config->KillAt = true;
1155 
1156   // Handle /lldltocache
1157   if (auto *Arg = Args.getLastArg(OPT_lldltocache))
1158     Config->LTOCache = Arg->getValue();
1159 
1160   // Handle /lldsavecachepolicy
1161   if (auto *Arg = Args.getLastArg(OPT_lldltocachepolicy))
1162     Config->LTOCachePolicy = CHECK(
1163         parseCachePruningPolicy(Arg->getValue()),
1164         Twine("/lldltocachepolicy: invalid cache policy: ") + Arg->getValue());
1165 
1166   // Handle /failifmismatch
1167   for (auto *Arg : Args.filtered(OPT_failifmismatch))
1168     checkFailIfMismatch(Arg->getValue());
1169 
1170   // Handle /merge
1171   for (auto *Arg : Args.filtered(OPT_merge))
1172     parseMerge(Arg->getValue());
1173 
1174   // Add default section merging rules after user rules. User rules take
1175   // precedence, but we will emit a warning if there is a conflict.
1176   parseMerge(".idata=.rdata");
1177   parseMerge(".didat=.rdata");
1178   parseMerge(".edata=.rdata");
1179   parseMerge(".xdata=.rdata");
1180   parseMerge(".bss=.data");
1181 
1182   // Handle /section
1183   for (auto *Arg : Args.filtered(OPT_section))
1184     parseSection(Arg->getValue());
1185 
1186   // Handle /aligncomm
1187   for (auto *Arg : Args.filtered(OPT_aligncomm))
1188     parseAligncomm(Arg->getValue());
1189 
1190   // Handle /manifestdependency. This enables /manifest unless /manifest:no is
1191   // also passed.
1192   if (auto *Arg = Args.getLastArg(OPT_manifestdependency)) {
1193     Config->ManifestDependency = Arg->getValue();
1194     Config->Manifest = Configuration::SideBySide;
1195   }
1196 
1197   // Handle /manifest and /manifest:
1198   if (auto *Arg = Args.getLastArg(OPT_manifest, OPT_manifest_colon)) {
1199     if (Arg->getOption().getID() == OPT_manifest)
1200       Config->Manifest = Configuration::SideBySide;
1201     else
1202       parseManifest(Arg->getValue());
1203   }
1204 
1205   // Handle /manifestuac
1206   if (auto *Arg = Args.getLastArg(OPT_manifestuac))
1207     parseManifestUAC(Arg->getValue());
1208 
1209   // Handle /manifestfile
1210   if (auto *Arg = Args.getLastArg(OPT_manifestfile))
1211     Config->ManifestFile = Arg->getValue();
1212 
1213   // Handle /manifestinput
1214   for (auto *Arg : Args.filtered(OPT_manifestinput))
1215     Config->ManifestInput.push_back(Arg->getValue());
1216 
1217   if (!Config->ManifestInput.empty() &&
1218       Config->Manifest != Configuration::Embed) {
1219     fatal("/manifestinput: requires /manifest:embed");
1220   }
1221 
1222   // Handle miscellaneous boolean flags.
1223   Config->AllowBind = Args.hasFlag(OPT_allowbind, OPT_allowbind_no, true);
1224   Config->AllowIsolation =
1225       Args.hasFlag(OPT_allowisolation, OPT_allowisolation_no, true);
1226   Config->Incremental =
1227       Args.hasFlag(OPT_incremental, OPT_incremental_no,
1228                    !Config->DoGC && !Config->DoICF && !Args.hasArg(OPT_order) &&
1229                        !Args.hasArg(OPT_profile));
1230   Config->IntegrityCheck =
1231       Args.hasFlag(OPT_integritycheck, OPT_integritycheck_no, false);
1232   Config->NxCompat = Args.hasFlag(OPT_nxcompat, OPT_nxcompat_no, true);
1233   Config->TerminalServerAware =
1234       !Config->DLL && Args.hasFlag(OPT_tsaware, OPT_tsaware_no, true);
1235   Config->DebugDwarf = Args.hasArg(OPT_debug_dwarf);
1236   Config->DebugGHashes = Args.hasArg(OPT_debug_ghash);
1237   Config->DebugSymtab = Args.hasArg(OPT_debug_symtab);
1238 
1239   Config->MapFile = getMapFile(Args);
1240 
1241   if (Config->Incremental && Args.hasArg(OPT_profile)) {
1242     warn("ignoring '/incremental' due to '/profile' specification");
1243     Config->Incremental = false;
1244   }
1245 
1246   if (Config->Incremental && Args.hasArg(OPT_order)) {
1247     warn("ignoring '/incremental' due to '/order' specification");
1248     Config->Incremental = false;
1249   }
1250 
1251   if (Config->Incremental && Config->DoGC) {
1252     warn("ignoring '/incremental' because REF is enabled; use '/opt:noref' to "
1253          "disable");
1254     Config->Incremental = false;
1255   }
1256 
1257   if (Config->Incremental && Config->DoICF) {
1258     warn("ignoring '/incremental' because ICF is enabled; use '/opt:noicf' to "
1259          "disable");
1260     Config->Incremental = false;
1261   }
1262 
1263   if (errorCount())
1264     return;
1265 
1266   std::set<sys::fs::UniqueID> WholeArchives;
1267   for (auto *Arg : Args.filtered(OPT_wholearchive_file))
1268     if (Optional<StringRef> Path = doFindFile(Arg->getValue()))
1269       if (Optional<sys::fs::UniqueID> ID = getUniqueID(*Path))
1270         WholeArchives.insert(*ID);
1271 
1272   // A predicate returning true if a given path is an argument for
1273   // /wholearchive:, or /wholearchive is enabled globally.
1274   // This function is a bit tricky because "foo.obj /wholearchive:././foo.obj"
1275   // needs to be handled as "/wholearchive:foo.obj foo.obj".
1276   auto IsWholeArchive = [&](StringRef Path) -> bool {
1277     if (Args.hasArg(OPT_wholearchive_flag))
1278       return true;
1279     if (Optional<sys::fs::UniqueID> ID = getUniqueID(Path))
1280       return WholeArchives.count(*ID);
1281     return false;
1282   };
1283 
1284   // Create a list of input files. Files can be given as arguments
1285   // for /defaultlib option.
1286   for (auto *Arg : Args.filtered(OPT_INPUT, OPT_wholearchive_file))
1287     if (Optional<StringRef> Path = findFile(Arg->getValue()))
1288       enqueuePath(*Path, IsWholeArchive(*Path));
1289 
1290   for (auto *Arg : Args.filtered(OPT_defaultlib))
1291     if (Optional<StringRef> Path = findLib(Arg->getValue()))
1292       enqueuePath(*Path, false);
1293 
1294   // Windows specific -- Create a resource file containing a manifest file.
1295   if (Config->Manifest == Configuration::Embed)
1296     addBuffer(createManifestRes(), false);
1297 
1298   // Read all input files given via the command line.
1299   run();
1300 
1301   // We should have inferred a machine type by now from the input files, but if
1302   // not we assume x64.
1303   if (Config->Machine == IMAGE_FILE_MACHINE_UNKNOWN) {
1304     warn("/machine is not specified. x64 is assumed");
1305     Config->Machine = AMD64;
1306   }
1307 
1308   // Input files can be Windows resource files (.res files). We use
1309   // WindowsResource to convert resource files to a regular COFF file,
1310   // then link the resulting file normally.
1311   if (!Resources.empty())
1312     Symtab->addFile(make<ObjFile>(convertResToCOFF(Resources)));
1313 
1314   if (Tar)
1315     Tar->append("response.txt",
1316                 createResponseFile(Args, FilePaths,
1317                                    ArrayRef<StringRef>(SearchPaths).slice(1)));
1318 
1319   // Handle /largeaddressaware
1320   Config->LargeAddressAware = Args.hasFlag(
1321       OPT_largeaddressaware, OPT_largeaddressaware_no, Config->is64());
1322 
1323   // Handle /highentropyva
1324   Config->HighEntropyVA =
1325       Config->is64() &&
1326       Args.hasFlag(OPT_highentropyva, OPT_highentropyva_no, true);
1327 
1328   if (!Config->DynamicBase &&
1329       (Config->Machine == ARMNT || Config->Machine == ARM64))
1330     error("/dynamicbase:no is not compatible with " +
1331           machineToStr(Config->Machine));
1332 
1333   // Handle /entry and /dll
1334   if (auto *Arg = Args.getLastArg(OPT_entry)) {
1335     Config->Entry = addUndefined(mangle(Arg->getValue()));
1336   } else if (!Config->Entry && !Config->NoEntry) {
1337     if (Args.hasArg(OPT_dll)) {
1338       StringRef S = (Config->Machine == I386) ? "__DllMainCRTStartup@12"
1339                                               : "_DllMainCRTStartup";
1340       Config->Entry = addUndefined(S);
1341     } else {
1342       // Windows specific -- If entry point name is not given, we need to
1343       // infer that from user-defined entry name.
1344       StringRef S = findDefaultEntry();
1345       if (S.empty())
1346         fatal("entry point must be defined");
1347       Config->Entry = addUndefined(S);
1348       log("Entry name inferred: " + S);
1349     }
1350   }
1351 
1352   // Handle /export
1353   for (auto *Arg : Args.filtered(OPT_export)) {
1354     Export E = parseExport(Arg->getValue());
1355     if (Config->Machine == I386) {
1356       if (!isDecorated(E.Name))
1357         E.Name = Saver.save("_" + E.Name);
1358       if (!E.ExtName.empty() && !isDecorated(E.ExtName))
1359         E.ExtName = Saver.save("_" + E.ExtName);
1360     }
1361     Config->Exports.push_back(E);
1362   }
1363 
1364   // Handle /def
1365   if (auto *Arg = Args.getLastArg(OPT_deffile)) {
1366     // parseModuleDefs mutates Config object.
1367     parseModuleDefs(Arg->getValue());
1368   }
1369 
1370   // Handle generation of import library from a def file.
1371   if (!Args.hasArg(OPT_INPUT)) {
1372     fixupExports();
1373     createImportLibrary(/*AsLib=*/true);
1374     return;
1375   }
1376 
1377   // Handle /delayload
1378   for (auto *Arg : Args.filtered(OPT_delayload)) {
1379     Config->DelayLoads.insert(StringRef(Arg->getValue()).lower());
1380     if (Config->Machine == I386) {
1381       Config->DelayLoadHelper = addUndefined("___delayLoadHelper2@8");
1382     } else {
1383       Config->DelayLoadHelper = addUndefined("__delayLoadHelper2");
1384     }
1385   }
1386 
1387   // Set default image name if neither /out or /def set it.
1388   if (Config->OutputFile.empty()) {
1389     Config->OutputFile =
1390         getOutputPath((*Args.filtered(OPT_INPUT).begin())->getValue());
1391   }
1392 
1393   if (ShouldCreatePDB) {
1394     // Put the PDB next to the image if no /pdb flag was passed.
1395     if (Config->PDBPath.empty()) {
1396       Config->PDBPath = Config->OutputFile;
1397       sys::path::replace_extension(Config->PDBPath, ".pdb");
1398     }
1399 
1400     // The embedded PDB path should be the absolute path to the PDB if no
1401     // /pdbaltpath flag was passed.
1402     if (Config->PDBAltPath.empty()) {
1403       Config->PDBAltPath = Config->PDBPath;
1404 
1405       // It's important to make the path absolute and remove dots.  This path
1406       // will eventually be written into the PE header, and certain Microsoft
1407       // tools won't work correctly if these assumptions are not held.
1408       sys::fs::make_absolute(Config->PDBAltPath);
1409       sys::path::remove_dots(Config->PDBAltPath);
1410     }
1411   }
1412 
1413   // Set default image base if /base is not given.
1414   if (Config->ImageBase == uint64_t(-1))
1415     Config->ImageBase = getDefaultImageBase();
1416 
1417   Symtab->addSynthetic(mangle("__ImageBase"), nullptr);
1418   if (Config->Machine == I386) {
1419     Symtab->addAbsolute("___safe_se_handler_table", 0);
1420     Symtab->addAbsolute("___safe_se_handler_count", 0);
1421   }
1422 
1423   Symtab->addAbsolute(mangle("__guard_fids_count"), 0);
1424   Symtab->addAbsolute(mangle("__guard_fids_table"), 0);
1425   Symtab->addAbsolute(mangle("__guard_flags"), 0);
1426   Symtab->addAbsolute(mangle("__guard_iat_count"), 0);
1427   Symtab->addAbsolute(mangle("__guard_iat_table"), 0);
1428   Symtab->addAbsolute(mangle("__guard_longjmp_count"), 0);
1429   Symtab->addAbsolute(mangle("__guard_longjmp_table"), 0);
1430   // Needed for MSVC 2017 15.5 CRT.
1431   Symtab->addAbsolute(mangle("__enclave_config"), 0);
1432 
1433   // This code may add new undefined symbols to the link, which may enqueue more
1434   // symbol resolution tasks, so we need to continue executing tasks until we
1435   // converge.
1436   do {
1437     // Windows specific -- if entry point is not found,
1438     // search for its mangled names.
1439     if (Config->Entry)
1440       Symtab->mangleMaybe(Config->Entry);
1441 
1442     // Windows specific -- Make sure we resolve all dllexported symbols.
1443     for (Export &E : Config->Exports) {
1444       if (!E.ForwardTo.empty())
1445         continue;
1446       E.Sym = addUndefined(E.Name);
1447       if (!E.Directives)
1448         Symtab->mangleMaybe(E.Sym);
1449     }
1450 
1451     // Add weak aliases. Weak aliases is a mechanism to give remaining
1452     // undefined symbols final chance to be resolved successfully.
1453     for (auto Pair : Config->AlternateNames) {
1454       StringRef From = Pair.first;
1455       StringRef To = Pair.second;
1456       Symbol *Sym = Symtab->find(From);
1457       if (!Sym)
1458         continue;
1459       if (auto *U = dyn_cast<Undefined>(Sym))
1460         if (!U->WeakAlias)
1461           U->WeakAlias = Symtab->addUndefined(To);
1462     }
1463 
1464     // Windows specific -- if __load_config_used can be resolved, resolve it.
1465     if (Symtab->findUnderscore("_load_config_used"))
1466       addUndefined(mangle("_load_config_used"));
1467   } while (run());
1468 
1469   if (errorCount())
1470     return;
1471 
1472   // If /msvclto is given, we use the MSVC linker to link LTO output files.
1473   // This is useful because MSVC link.exe can generate complete PDBs.
1474   if (Args.hasArg(OPT_msvclto)) {
1475     invokeMSVC(Args);
1476     return;
1477   }
1478 
1479   // Do LTO by compiling bitcode input files to a set of native COFF files then
1480   // link those files.
1481   Symtab->addCombinedLTOObjects();
1482   run();
1483 
1484   // Make sure we have resolved all symbols.
1485   Symtab->reportRemainingUndefines();
1486   if (errorCount())
1487     return;
1488 
1489   // Windows specific -- if no /subsystem is given, we need to infer
1490   // that from entry point name.
1491   if (Config->Subsystem == IMAGE_SUBSYSTEM_UNKNOWN) {
1492     Config->Subsystem = inferSubsystem();
1493     if (Config->Subsystem == IMAGE_SUBSYSTEM_UNKNOWN)
1494       fatal("subsystem must be defined");
1495   }
1496 
1497   // Handle /safeseh.
1498   if (Args.hasFlag(OPT_safeseh, OPT_safeseh_no, false)) {
1499     for (ObjFile *File : ObjFile::Instances)
1500       if (!File->hasSafeSEH())
1501         error("/safeseh: " + File->getName() + " is not compatible with SEH");
1502     if (errorCount())
1503       return;
1504   }
1505 
1506   // In MinGW, all symbols are automatically exported if no symbols
1507   // are chosen to be exported.
1508   if (Config->DLL && ((Config->MinGW && Config->Exports.empty()) ||
1509                       Args.hasArg(OPT_export_all_symbols))) {
1510     AutoExporter Exporter;
1511 
1512     Symtab->forEachSymbol([=](Symbol *S) {
1513       auto *Def = dyn_cast<Defined>(S);
1514       if (!Exporter.shouldExport(Def))
1515         return;
1516       Export E;
1517       E.Name = Def->getName();
1518       E.Sym = Def;
1519       if (Def->getChunk() &&
1520           !(Def->getChunk()->getOutputCharacteristics() & IMAGE_SCN_MEM_EXECUTE))
1521         E.Data = true;
1522       Config->Exports.push_back(E);
1523     });
1524   }
1525 
1526   // Windows specific -- when we are creating a .dll file, we also
1527   // need to create a .lib file.
1528   if (!Config->Exports.empty() || Config->DLL) {
1529     fixupExports();
1530     createImportLibrary(/*AsLib=*/false);
1531     assignExportOrdinals();
1532   }
1533 
1534   // Handle /output-def (MinGW specific).
1535   if (auto *Arg = Args.getLastArg(OPT_output_def))
1536     writeDefFile(Arg->getValue());
1537 
1538   // Set extra alignment for .comm symbols
1539   for (auto Pair : Config->AlignComm) {
1540     StringRef Name = Pair.first;
1541     uint32_t Alignment = Pair.second;
1542 
1543     Symbol *Sym = Symtab->find(Name);
1544     if (!Sym) {
1545       warn("/aligncomm symbol " + Name + " not found");
1546       continue;
1547     }
1548 
1549     auto *DC = dyn_cast<DefinedCommon>(Sym);
1550     if (!DC) {
1551       warn("/aligncomm symbol " + Name + " of wrong kind");
1552       continue;
1553     }
1554 
1555     CommonChunk *C = DC->getChunk();
1556     C->Alignment = std::max(C->Alignment, Alignment);
1557   }
1558 
1559   // Windows specific -- Create a side-by-side manifest file.
1560   if (Config->Manifest == Configuration::SideBySide)
1561     createSideBySideManifest();
1562 
1563   // Handle /order. We want to do this at this moment because we
1564   // need a complete list of comdat sections to warn on nonexistent
1565   // functions.
1566   if (auto *Arg = Args.getLastArg(OPT_order))
1567     parseOrderFile(Arg->getValue());
1568 
1569   // Identify unreferenced COMDAT sections.
1570   if (Config->DoGC)
1571     markLive(Symtab->getChunks());
1572 
1573   // Identify identical COMDAT sections to merge them.
1574   if (Config->DoICF)
1575     doICF(Symtab->getChunks());
1576 
1577   // Write the result.
1578   writeResult();
1579 
1580   // Stop early so we can print the results.
1581   Timer::root().stop();
1582   if (Config->ShowTiming)
1583     Timer::root().print();
1584 }
1585 
1586 } // namespace coff
1587 } // namespace lld
1588