[lld] r314869 - Call exitLld() from elf::link.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 3 17:50:11 PDT 2017


Author: ruiu
Date: Tue Oct  3 17:50:11 2017
New Revision: 314869

URL: http://llvm.org/viewvc/llvm-project?rev=314869&view=rev
Log:
Call exitLld() from elf::link.

We used to call exitLld() from a leaf function, Writer::run(), because
we had objects on the stack whose dtors are expensive. Now we no longer
have such objects on the stack, so there's no reason to exist from the
leaf function.

Modified:
    lld/trunk/ELF/Driver.cpp
    lld/trunk/ELF/Writer.cpp

Modified: lld/trunk/ELF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Driver.cpp?rev=314869&r1=314868&r2=314869&view=diff
==============================================================================
--- lld/trunk/ELF/Driver.cpp (original)
+++ lld/trunk/ELF/Driver.cpp Tue Oct  3 17:50:11 2017
@@ -89,6 +89,13 @@ bool elf::link(ArrayRef<const char *> Ar
   Config->Argv = {Args.begin(), Args.end()};
 
   Driver->main(Args, CanExitEarly);
+
+  // Exit immediately if we don't need to return to the caller.
+  // This saves time because the overhead of calling destructors
+  // for all globally-allocated objects is not negligible.
+  if (Config->ExitEarly)
+    exitLld(ErrorCount ? 1 : 0);
+
   freeArena();
   return !ErrorCount;
 }

Modified: lld/trunk/ELF/Writer.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/Writer.cpp?rev=314869&r1=314868&r2=314869&view=diff
==============================================================================
--- lld/trunk/ELF/Writer.cpp (original)
+++ lld/trunk/ELF/Writer.cpp Tue Oct  3 17:50:11 2017
@@ -246,12 +246,6 @@ template <class ELFT> void Writer<ELFT>:
 
   if (auto EC = Buffer->commit())
     error("failed to write to the output file: " + EC.message());
-
-  // Flush the output streams and exit immediately. A full shutdown
-  // is a good test that we are keeping track of all allocated memory,
-  // but actually freeing it is a waste of time in a regular linker run.
-  if (Config->ExitEarly)
-    exitLld(0);
 }
 
 // Initialize Out members.




More information about the llvm-commits mailing list