[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