[lld] bcbb306 - [lld/mac] Change load command order to be more like ld64

Nico Weber via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 19 12:04:52 PDT 2021


Author: Nico Weber
Date: 2021-07-19T15:04:32-04:00
New Revision: bcbb3066ce8a6c7fdda8c72a0f51e0572172de8c

URL: https://github.com/llvm/llvm-project/commit/bcbb3066ce8a6c7fdda8c72a0f51e0572172de8c
DIFF: https://github.com/llvm/llvm-project/commit/bcbb3066ce8a6c7fdda8c72a0f51e0572172de8c.diff

LOG: [lld/mac] Change load command order to be more like ld64

No meaningful behavior change. Makes diffing `otool -l` output a bit easier.

Differential Revision: https://reviews.llvm.org/D106219

Added: 
    

Modified: 
    lld/MachO/Writer.cpp
    lld/test/MachO/load-command-sequence.s

Removed: 
    


################################################################################
diff  --git a/lld/MachO/Writer.cpp b/lld/MachO/Writer.cpp
index 8686f111db27c..a3855ed975095 100644
--- a/lld/MachO/Writer.cpp
+++ b/lld/MachO/Writer.cpp
@@ -690,10 +690,6 @@ template <class LP> void Writer::createLoadCommands() {
       make<LCDysymtab>(symtabSection, indirectSymtabSection));
   if (!config->umbrella.empty())
     in.header->addLoadCommand(make<LCSubFramework>(config->umbrella));
-  if (functionStartsSection)
-    in.header->addLoadCommand(make<LCFunctionStarts>(functionStartsSection));
-  if (dataInCodeSection)
-    in.header->addLoadCommand(make<LCDataInCode>(dataInCodeSection));
   if (config->emitEncryptionInfo)
     in.header->addLoadCommand(make<LCEncryptionInfo<LP>>());
   for (StringRef path : config->runtimePaths)
@@ -702,7 +698,6 @@ template <class LP> void Writer::createLoadCommands() {
   switch (config->outputType) {
   case MH_EXECUTE:
     in.header->addLoadCommand(make<LCLoadDylinker>());
-    in.header->addLoadCommand(make<LCMain>());
     break;
   case MH_DYLIB:
     in.header->addLoadCommand(make<LCDylib>(LC_ID_DYLIB, config->installName,
@@ -723,6 +718,10 @@ template <class LP> void Writer::createLoadCommands() {
   else
     in.header->addLoadCommand(make<LCMinVersion>(config->platformInfo));
 
+  // This is down here to match ld64's load command order.
+  if (config->outputType == MH_EXECUTE)
+    in.header->addLoadCommand(make<LCMain>());
+
   int64_t dylibOrdinal = 1;
   DenseMap<StringRef, int64_t> ordinalForInstallName;
   for (InputFile *file : inputFiles) {
@@ -789,6 +788,10 @@ template <class LP> void Writer::createLoadCommands() {
     }
   }
 
+  if (functionStartsSection)
+    in.header->addLoadCommand(make<LCFunctionStarts>(functionStartsSection));
+  if (dataInCodeSection)
+    in.header->addLoadCommand(make<LCDataInCode>(dataInCodeSection));
   if (codeSignatureSection)
     in.header->addLoadCommand(make<LCCodeSignature>(codeSignatureSection));
 

diff  --git a/lld/test/MachO/load-command-sequence.s b/lld/test/MachO/load-command-sequence.s
index 5805aec753b7b..9de5288ef4be0 100644
--- a/lld/test/MachO/load-command-sequence.s
+++ b/lld/test/MachO/load-command-sequence.s
@@ -43,11 +43,13 @@
 # COMMON: cmd LC_DYSYMTAB
 
 # EXEC: cmd LC_LOAD_DYLINKER
-# EXEC: cmd LC_MAIN
 # DYLIB: cmd LC_ID_DYLIB
 
 # COMMON: cmd LC_UUID
 # COMMON: cmd LC_BUILD_VERSION
+
+# EXEC: cmd LC_MAIN
+
 # COMMON: cmd LC_LOAD_DYLIB
 
 .section __TEXT,__cstring


        


More information about the llvm-commits mailing list