<div dir="ltr"><div>I believe that LLD is not supposed to call exit on success when you call lld::coff::link.</div><div><br></div><div>From downstream fork of LLD: <a href="https://github.com/zig-lang/zig/commit/41da9fdb69065082f57c604b12eb02ca166cb18d">https://github.com/zig-lang/zig/commit/41da9fdb69065082f57c604b12eb02ca166cb18d</a></div><div><br></div><div><br></div><div>diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp</div><div>index 854c3e69098..8b17f039870 100644</div><div>--- a/lld/COFF/Driver.cpp</div><div>+++ b/lld/COFF/Driver.cpp</div><div>@@ -1030,7 +1030,7 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {</div><div>   if (!Args.hasArgNoClaim(OPT_INPUT)) {</div><div>     fixupExports();</div><div>     createImportLibrary(/*AsLib=*/true);</div><div>-    exit(0);</div><div>+    return;</div><div>   }</div><div> </div><div>   // Handle /delayload</div><div>@@ -1122,7 +1122,7 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {</div><div>   // This is useful because MSVC link.exe can generate complete PDBs.</div><div>   if (Args.hasArg(OPT_msvclto)) {</div><div>     invokeMSVC(Args);</div><div>-    exit(0);</div><div>+    return;</div><div>   }</div><div> </div><div>   // Do LTO by compiling bitcode input files to a set of native COFF files then</div><div>@@ -1173,8 +1173,7 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {</div><div>   // Write the result.</div><div>   writeResult(&Symtab);</div><div> </div><div>-  // Call exit to avoid calling destructors.</div><div>-  exit(0);</div><div>+  return;</div><div> }</div><div> </div><div> } // namespace coff</div><div><br></div></div>