-
Notifications
You must be signed in to change notification settings - Fork 14.3k
Reapply "[lld] enable fixup chains by default (#79894)" #99255
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
This reverts commit f55b79f. The known issues with chained fixups have been addressed by llvm#98913, llvm#98305, llvm#97156 and llvm#95171. Compared to the original commit, support for xrOS (which postdates chained fixups' introduction) was added and an unnecessary test change was removed. ---------- Original commit message: Enable chained fixups in lld when all platform and version criteria are met. This is an attempt at simplifying the logic used in ld 907: https://github.com/apple-oss-distributions/ld64/blob/93d74eafc37c0558b4ffb88a8bc15c17bed44a20/src/ld/Options.cpp#L5458-L5549 Some changes were made to simplify the logic: - only enable chained fixups for macOS from 13.0 to avoid the arch check - only enable chained fixups for iphonesimulator from 16.0 to avoid the arch check - don't enable chained fixups for not specifically listed platforms - don't enable chained fixups for arm64_32
@llvm/pr-subscribers-lld Author: Daniel Bertalan (BertalanD) ChangesThis reverts commit f55b79f. The known issues with chained fixups have been addressed by #98913, #98305, #97156 and #95171. Compared to the original commit, support for xrOS (which postdates chained fixups' introduction) was added and an unnecessary test change was removed. Original commit message: Enable chained fixups in lld when all platform and version criteria are met. This is an attempt at simplifying the logic used in ld 907: Some changes were made to simplify the logic:
Full diff: https://github.com/llvm/llvm-project/pull/99255.diff 6 Files Affected:
diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp
index a370d5734124a..7185f6c13a244 100644
--- a/lld/MachO/Driver.cpp
+++ b/lld/MachO/Driver.cpp
@@ -49,6 +49,7 @@
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/TimeProfiler.h"
#include "llvm/TargetParser/Host.h"
+#include "llvm/TextAPI/Architecture.h"
#include "llvm/TextAPI/PackedVersion.h"
#include <algorithm>
@@ -1048,42 +1049,55 @@ static bool shouldEmitChainedFixups(const InputArgList &args) {
if (arg && arg->getOption().matches(OPT_no_fixup_chains))
return false;
- bool isRequested = arg != nullptr;
-
- // Version numbers taken from the Xcode 13.3 release notes.
- static const std::array<std::pair<PlatformType, VersionTuple>, 5> minVersion =
- {{{PLATFORM_MACOS, VersionTuple(11, 0)},
- {PLATFORM_IOS, VersionTuple(13, 4)},
- {PLATFORM_TVOS, VersionTuple(14, 0)},
- {PLATFORM_WATCHOS, VersionTuple(7, 0)},
- {PLATFORM_XROS, VersionTuple(1, 0)}}};
- PlatformType platform = removeSimulator(config->platformInfo.target.Platform);
- auto it = llvm::find_if(minVersion,
- [&](const auto &p) { return p.first == platform; });
- if (it != minVersion.end() &&
- it->second > config->platformInfo.target.MinDeployment) {
- if (!isRequested)
- return false;
+ bool requested = arg && arg->getOption().matches(OPT_fixup_chains);
+ if (!config->isPic) {
+ if (requested)
+ error("-fixup_chains is incompatible with -no_pie");
- warn("-fixup_chains requires " + getPlatformName(config->platform()) + " " +
- it->second.getAsString() + ", which is newer than target minimum of " +
- config->platformInfo.target.MinDeployment.getAsString());
+ return false;
}
if (!is_contained({AK_x86_64, AK_x86_64h, AK_arm64}, config->arch())) {
- if (isRequested)
+ if (requested)
error("-fixup_chains is only supported on x86_64 and arm64 targets");
+
return false;
}
- if (!config->isPic) {
- if (isRequested)
- error("-fixup_chains is incompatible with -no_pie");
+ if (args.hasArg(OPT_preload)) {
+ if (requested)
+ error("-fixup_chains is incompatible with -preload");
+
return false;
}
- // TODO: Enable by default once stable.
- return isRequested;
+ if (requested)
+ return true;
+
+ static const std::array<std::pair<PlatformType, VersionTuple>, 9> minVersion =
+ {{
+ {PLATFORM_IOS, VersionTuple(13, 4)},
+ {PLATFORM_IOSSIMULATOR, VersionTuple(16, 0)},
+ {PLATFORM_MACOS, VersionTuple(13, 0)},
+ {PLATFORM_TVOS, VersionTuple(14, 0)},
+ {PLATFORM_TVOSSIMULATOR, VersionTuple(15, 0)},
+ {PLATFORM_WATCHOS, VersionTuple(7, 0)},
+ {PLATFORM_WATCHOSSIMULATOR, VersionTuple(8, 0)},
+ {PLATFORM_XROS, VersionTuple(1, 0)},
+ {PLATFORM_XROS_SIMULATOR, VersionTuple(1, 0)},
+ }};
+ PlatformType platform = config->platformInfo.target.Platform;
+ auto it = llvm::find_if(minVersion,
+ [&](const auto &p) { return p.first == platform; });
+
+ // We don't know the versions for other platforms, so default to disabled.
+ if (it == minVersion.end())
+ return false;
+
+ if (it->second > config->platformInfo.target.MinDeployment)
+ return false;
+
+ return true;
}
static bool shouldEmitRelativeMethodLists(const InputArgList &args) {
diff --git a/lld/test/MachO/arm64-32-stubs.s b/lld/test/MachO/arm64-32-stubs.s
index 743d5c419bf1a..a5d48ff5baef3 100644
--- a/lld/test/MachO/arm64-32-stubs.s
+++ b/lld/test/MachO/arm64-32-stubs.s
@@ -10,7 +10,7 @@
# RUN: llvm-mc -filetype=obj -triple=arm64_32-apple-watchos %t/test.s -o %t/test.o
# RUN: %lld-watchos -dylib -install_name @executable_path/libfoo.dylib %t/foo.o -o %t/libfoo.dylib
# RUN: %lld-watchos -dylib -install_name @executable_path/libbar.dylib %t/bar.o -o %t/libbar.dylib
-# RUN: %lld-watchos -lSystem %t/libfoo.dylib %t/libbar.dylib %t/test.o -o %t/test
+# RUN: %lld-watchos -lSystem %t/libfoo.dylib %t/libbar.dylib %t/test.o -o %t/test -no_fixup_chains
# RUN: llvm-objdump --no-print-imm-hex --macho -d --no-show-raw-insn --section="__TEXT,__stubs" --section="__TEXT,__stub_helper" %t/test | FileCheck %s
diff --git a/lld/test/MachO/arm64-stubs.s b/lld/test/MachO/arm64-stubs.s
index f714e20084895..6fd94661d32e2 100644
--- a/lld/test/MachO/arm64-stubs.s
+++ b/lld/test/MachO/arm64-stubs.s
@@ -5,7 +5,7 @@
# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %t/test.s -o %t/test.o
# RUN: %lld -arch arm64 -dylib -install_name @executable_path/libfoo.dylib %t/foo.o -o %t/libfoo.dylib
# RUN: %lld -arch arm64 -dylib -install_name @executable_path/libbar.dylib %t/bar.o -o %t/libbar.dylib
-# RUN: %lld -arch arm64 -lSystem %t/libfoo.dylib %t/libbar.dylib %t/test.o -o %t/test
+# RUN: %lld -arch arm64 -lSystem %t/libfoo.dylib %t/libbar.dylib %t/test.o -o %t/test -no_fixup_chains
# RUN: llvm-objdump --no-print-imm-hex --macho -d --no-show-raw-insn --section="__TEXT,__stubs" --section="__TEXT,__stub_helper" %t/test | FileCheck %s
diff --git a/lld/test/MachO/dyld-stub-binder.s b/lld/test/MachO/dyld-stub-binder.s
index 1d2e556607c79..170fe8abd89bd 100644
--- a/lld/test/MachO/dyld-stub-binder.s
+++ b/lld/test/MachO/dyld-stub-binder.s
@@ -14,27 +14,27 @@
# RUN: %lld -arch arm64 -lSystem -dylib %t/foo.o -o %t/libfoo.dylib
# RUN: llvm-nm -m %t/libfoo.dylib | FileCheck --check-prefix=STUB %s
-
## Dylibs that do lazy dynamic calls do need dyld_stub_binder.
# RUN: not %no-lsystem-lld -arch arm64 -dylib %t/bar.o %t/libfoo.dylib \
-# RUN: -o %t/libbar.dylib 2>&1 | FileCheck --check-prefix=MISSINGSTUB %s
+# RUN: -o %t/libbar.dylib -no_fixup_chains 2>&1 | \
+# RUN: FileCheck --check-prefix=MISSINGSTUB %s
# RUN: %lld -arch arm64 -lSystem -dylib %t/bar.o %t/libfoo.dylib \
-# RUN: -o %t/libbar.dylib
+# RUN: -o %t/libbar.dylib -no_fixup_chains
# RUN: llvm-nm -m %t/libbar.dylib | FileCheck --check-prefix=STUB %s
## As do executables.
# RUN: not %no-lsystem-lld -arch arm64 %t/libfoo.dylib %t/libbar.dylib %t/test.o \
-# RUN: -o %t/test 2>&1 | FileCheck --check-prefix=MISSINGSTUB %s
+# RUN: -o %t/test -no_fixup_chains 2>&1 | FileCheck --check-prefix=MISSINGSTUB %s
# RUN: %lld -arch arm64 -lSystem %t/libfoo.dylib %t/libbar.dylib %t/test.o \
-# RUN: -o %t/test
+# RUN: -o %t/test -no_fixup_chains
# RUN: llvm-nm -m %t/test | FileCheck --check-prefix=STUB %s
## Test dynamic lookup of dyld_stub_binder.
# RUN: %no-lsystem-lld -arch arm64 %t/libfoo.dylib %t/libbar.dylib %t/test.o \
-# RUN: -o %t/test -undefined dynamic_lookup
+# RUN: -o %t/test -undefined dynamic_lookup -no_fixup_chains
# RUN: llvm-nm -m %t/test | FileCheck --check-prefix=DYNSTUB %s
# RUN: %no-lsystem-lld -arch arm64 %t/libfoo.dylib %t/libbar.dylib %t/test.o \
-# RUN: -o %t/test -U dyld_stub_binder
+# RUN: -o %t/test -U dyld_stub_binder -no_fixup_chains
# RUN: llvm-nm -m %t/test | FileCheck --check-prefix=DYNSTUB %s
# MISSINGSTUB: error: undefined symbol: dyld_stub_binder
diff --git a/lld/test/MachO/invalid/chained-fixups-incompatible.s b/lld/test/MachO/invalid/chained-fixups-incompatible.s
index 83411472beb9f..0589204968fe3 100644
--- a/lld/test/MachO/invalid/chained-fixups-incompatible.s
+++ b/lld/test/MachO/invalid/chained-fixups-incompatible.s
@@ -2,9 +2,6 @@
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o
# RUN: not %lld -lSystem -no_pie -fixup_chains %t.o -o /dev/null 2>&1 | \
# RUN: FileCheck %s --check-prefix=NO-PIE
-# RUN: %no-fatal-warnings-lld -fixup_chains %t.o -o /dev/null \
-# RUN: -lSystem -platform_version macos 10.15 10.15 2>&1 | \
-# RUN: FileCheck %s --check-prefix=VERSION
# RUN: llvm-mc -filetype=obj -triple=arm64_32-apple-darwin %s -o %t-arm64_32.o
# RUN: not %lld-watchos -lSystem -fixup_chains %t-arm64_32.o -o /dev/null 2>&1 | \
# RUN: FileCheck %s --check-prefix=ARCH
@@ -12,7 +9,6 @@
## Check that we emit diagnostics when -fixup_chains is explicitly specified,
## but we don't support creating chained fixups for said configuration.
# NO-PIE: error: -fixup_chains is incompatible with -no_pie
-# VERSION: warning: -fixup_chains requires macOS 11.0, which is newer than target minimum of 10.15
# ARCH: error: -fixup_chains is only supported on x86_64 and arm64 targets
.globl _main
diff --git a/lld/test/MachO/objc-selrefs.s b/lld/test/MachO/objc-selrefs.s
index 6d144f4938b45..eebe7c6476cd5 100644
--- a/lld/test/MachO/objc-selrefs.s
+++ b/lld/test/MachO/objc-selrefs.s
@@ -6,14 +6,14 @@
# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %t/implicit-selrefs.s -o %t/implicit-selrefs.o
# RUN: %lld -dylib -arch arm64 -lSystem -o %t/explicit-only-no-icf \
-# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o
+# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o -no_fixup_chains
# RUN: llvm-otool -vs __DATA __objc_selrefs %t/explicit-only-no-icf | \
# RUN: FileCheck %s --check-prefix=EXPLICIT-NO-ICF
## NOTE: ld64 always dedups the selrefs unconditionally, but we only do it when
## ICF is enabled.
# RUN: %lld -dylib -arch arm64 -lSystem -o %t/explicit-only-with-icf \
-# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o
+# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o -no_fixup_chains
# RUN: llvm-otool -vs __DATA __objc_selrefs %t/explicit-only-with-icf \
# RUN: | FileCheck %s --check-prefix=EXPLICIT-WITH-ICF
@@ -25,7 +25,8 @@
# SELREFS-EMPTY:
# RUN: %lld -dylib -arch arm64 -lSystem --icf=all -o %t/explicit-and-implicit \
-# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o %t/implicit-selrefs.o
+# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o %t/implicit-selrefs.o \
+# RUN: -no_fixup_chains
# RUN: llvm-otool -vs __DATA __objc_selrefs %t/explicit-and-implicit \
# RUN: | FileCheck %s --check-prefix=EXPLICIT-AND-IMPLICIT
|
@llvm/pr-subscribers-lld-macho Author: Daniel Bertalan (BertalanD) ChangesThis reverts commit f55b79f. The known issues with chained fixups have been addressed by #98913, #98305, #97156 and #95171. Compared to the original commit, support for xrOS (which postdates chained fixups' introduction) was added and an unnecessary test change was removed. Original commit message: Enable chained fixups in lld when all platform and version criteria are met. This is an attempt at simplifying the logic used in ld 907: Some changes were made to simplify the logic:
Full diff: https://github.com/llvm/llvm-project/pull/99255.diff 6 Files Affected:
diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp
index a370d5734124a..7185f6c13a244 100644
--- a/lld/MachO/Driver.cpp
+++ b/lld/MachO/Driver.cpp
@@ -49,6 +49,7 @@
#include "llvm/Support/TargetSelect.h"
#include "llvm/Support/TimeProfiler.h"
#include "llvm/TargetParser/Host.h"
+#include "llvm/TextAPI/Architecture.h"
#include "llvm/TextAPI/PackedVersion.h"
#include <algorithm>
@@ -1048,42 +1049,55 @@ static bool shouldEmitChainedFixups(const InputArgList &args) {
if (arg && arg->getOption().matches(OPT_no_fixup_chains))
return false;
- bool isRequested = arg != nullptr;
-
- // Version numbers taken from the Xcode 13.3 release notes.
- static const std::array<std::pair<PlatformType, VersionTuple>, 5> minVersion =
- {{{PLATFORM_MACOS, VersionTuple(11, 0)},
- {PLATFORM_IOS, VersionTuple(13, 4)},
- {PLATFORM_TVOS, VersionTuple(14, 0)},
- {PLATFORM_WATCHOS, VersionTuple(7, 0)},
- {PLATFORM_XROS, VersionTuple(1, 0)}}};
- PlatformType platform = removeSimulator(config->platformInfo.target.Platform);
- auto it = llvm::find_if(minVersion,
- [&](const auto &p) { return p.first == platform; });
- if (it != minVersion.end() &&
- it->second > config->platformInfo.target.MinDeployment) {
- if (!isRequested)
- return false;
+ bool requested = arg && arg->getOption().matches(OPT_fixup_chains);
+ if (!config->isPic) {
+ if (requested)
+ error("-fixup_chains is incompatible with -no_pie");
- warn("-fixup_chains requires " + getPlatformName(config->platform()) + " " +
- it->second.getAsString() + ", which is newer than target minimum of " +
- config->platformInfo.target.MinDeployment.getAsString());
+ return false;
}
if (!is_contained({AK_x86_64, AK_x86_64h, AK_arm64}, config->arch())) {
- if (isRequested)
+ if (requested)
error("-fixup_chains is only supported on x86_64 and arm64 targets");
+
return false;
}
- if (!config->isPic) {
- if (isRequested)
- error("-fixup_chains is incompatible with -no_pie");
+ if (args.hasArg(OPT_preload)) {
+ if (requested)
+ error("-fixup_chains is incompatible with -preload");
+
return false;
}
- // TODO: Enable by default once stable.
- return isRequested;
+ if (requested)
+ return true;
+
+ static const std::array<std::pair<PlatformType, VersionTuple>, 9> minVersion =
+ {{
+ {PLATFORM_IOS, VersionTuple(13, 4)},
+ {PLATFORM_IOSSIMULATOR, VersionTuple(16, 0)},
+ {PLATFORM_MACOS, VersionTuple(13, 0)},
+ {PLATFORM_TVOS, VersionTuple(14, 0)},
+ {PLATFORM_TVOSSIMULATOR, VersionTuple(15, 0)},
+ {PLATFORM_WATCHOS, VersionTuple(7, 0)},
+ {PLATFORM_WATCHOSSIMULATOR, VersionTuple(8, 0)},
+ {PLATFORM_XROS, VersionTuple(1, 0)},
+ {PLATFORM_XROS_SIMULATOR, VersionTuple(1, 0)},
+ }};
+ PlatformType platform = config->platformInfo.target.Platform;
+ auto it = llvm::find_if(minVersion,
+ [&](const auto &p) { return p.first == platform; });
+
+ // We don't know the versions for other platforms, so default to disabled.
+ if (it == minVersion.end())
+ return false;
+
+ if (it->second > config->platformInfo.target.MinDeployment)
+ return false;
+
+ return true;
}
static bool shouldEmitRelativeMethodLists(const InputArgList &args) {
diff --git a/lld/test/MachO/arm64-32-stubs.s b/lld/test/MachO/arm64-32-stubs.s
index 743d5c419bf1a..a5d48ff5baef3 100644
--- a/lld/test/MachO/arm64-32-stubs.s
+++ b/lld/test/MachO/arm64-32-stubs.s
@@ -10,7 +10,7 @@
# RUN: llvm-mc -filetype=obj -triple=arm64_32-apple-watchos %t/test.s -o %t/test.o
# RUN: %lld-watchos -dylib -install_name @executable_path/libfoo.dylib %t/foo.o -o %t/libfoo.dylib
# RUN: %lld-watchos -dylib -install_name @executable_path/libbar.dylib %t/bar.o -o %t/libbar.dylib
-# RUN: %lld-watchos -lSystem %t/libfoo.dylib %t/libbar.dylib %t/test.o -o %t/test
+# RUN: %lld-watchos -lSystem %t/libfoo.dylib %t/libbar.dylib %t/test.o -o %t/test -no_fixup_chains
# RUN: llvm-objdump --no-print-imm-hex --macho -d --no-show-raw-insn --section="__TEXT,__stubs" --section="__TEXT,__stub_helper" %t/test | FileCheck %s
diff --git a/lld/test/MachO/arm64-stubs.s b/lld/test/MachO/arm64-stubs.s
index f714e20084895..6fd94661d32e2 100644
--- a/lld/test/MachO/arm64-stubs.s
+++ b/lld/test/MachO/arm64-stubs.s
@@ -5,7 +5,7 @@
# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %t/test.s -o %t/test.o
# RUN: %lld -arch arm64 -dylib -install_name @executable_path/libfoo.dylib %t/foo.o -o %t/libfoo.dylib
# RUN: %lld -arch arm64 -dylib -install_name @executable_path/libbar.dylib %t/bar.o -o %t/libbar.dylib
-# RUN: %lld -arch arm64 -lSystem %t/libfoo.dylib %t/libbar.dylib %t/test.o -o %t/test
+# RUN: %lld -arch arm64 -lSystem %t/libfoo.dylib %t/libbar.dylib %t/test.o -o %t/test -no_fixup_chains
# RUN: llvm-objdump --no-print-imm-hex --macho -d --no-show-raw-insn --section="__TEXT,__stubs" --section="__TEXT,__stub_helper" %t/test | FileCheck %s
diff --git a/lld/test/MachO/dyld-stub-binder.s b/lld/test/MachO/dyld-stub-binder.s
index 1d2e556607c79..170fe8abd89bd 100644
--- a/lld/test/MachO/dyld-stub-binder.s
+++ b/lld/test/MachO/dyld-stub-binder.s
@@ -14,27 +14,27 @@
# RUN: %lld -arch arm64 -lSystem -dylib %t/foo.o -o %t/libfoo.dylib
# RUN: llvm-nm -m %t/libfoo.dylib | FileCheck --check-prefix=STUB %s
-
## Dylibs that do lazy dynamic calls do need dyld_stub_binder.
# RUN: not %no-lsystem-lld -arch arm64 -dylib %t/bar.o %t/libfoo.dylib \
-# RUN: -o %t/libbar.dylib 2>&1 | FileCheck --check-prefix=MISSINGSTUB %s
+# RUN: -o %t/libbar.dylib -no_fixup_chains 2>&1 | \
+# RUN: FileCheck --check-prefix=MISSINGSTUB %s
# RUN: %lld -arch arm64 -lSystem -dylib %t/bar.o %t/libfoo.dylib \
-# RUN: -o %t/libbar.dylib
+# RUN: -o %t/libbar.dylib -no_fixup_chains
# RUN: llvm-nm -m %t/libbar.dylib | FileCheck --check-prefix=STUB %s
## As do executables.
# RUN: not %no-lsystem-lld -arch arm64 %t/libfoo.dylib %t/libbar.dylib %t/test.o \
-# RUN: -o %t/test 2>&1 | FileCheck --check-prefix=MISSINGSTUB %s
+# RUN: -o %t/test -no_fixup_chains 2>&1 | FileCheck --check-prefix=MISSINGSTUB %s
# RUN: %lld -arch arm64 -lSystem %t/libfoo.dylib %t/libbar.dylib %t/test.o \
-# RUN: -o %t/test
+# RUN: -o %t/test -no_fixup_chains
# RUN: llvm-nm -m %t/test | FileCheck --check-prefix=STUB %s
## Test dynamic lookup of dyld_stub_binder.
# RUN: %no-lsystem-lld -arch arm64 %t/libfoo.dylib %t/libbar.dylib %t/test.o \
-# RUN: -o %t/test -undefined dynamic_lookup
+# RUN: -o %t/test -undefined dynamic_lookup -no_fixup_chains
# RUN: llvm-nm -m %t/test | FileCheck --check-prefix=DYNSTUB %s
# RUN: %no-lsystem-lld -arch arm64 %t/libfoo.dylib %t/libbar.dylib %t/test.o \
-# RUN: -o %t/test -U dyld_stub_binder
+# RUN: -o %t/test -U dyld_stub_binder -no_fixup_chains
# RUN: llvm-nm -m %t/test | FileCheck --check-prefix=DYNSTUB %s
# MISSINGSTUB: error: undefined symbol: dyld_stub_binder
diff --git a/lld/test/MachO/invalid/chained-fixups-incompatible.s b/lld/test/MachO/invalid/chained-fixups-incompatible.s
index 83411472beb9f..0589204968fe3 100644
--- a/lld/test/MachO/invalid/chained-fixups-incompatible.s
+++ b/lld/test/MachO/invalid/chained-fixups-incompatible.s
@@ -2,9 +2,6 @@
# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o
# RUN: not %lld -lSystem -no_pie -fixup_chains %t.o -o /dev/null 2>&1 | \
# RUN: FileCheck %s --check-prefix=NO-PIE
-# RUN: %no-fatal-warnings-lld -fixup_chains %t.o -o /dev/null \
-# RUN: -lSystem -platform_version macos 10.15 10.15 2>&1 | \
-# RUN: FileCheck %s --check-prefix=VERSION
# RUN: llvm-mc -filetype=obj -triple=arm64_32-apple-darwin %s -o %t-arm64_32.o
# RUN: not %lld-watchos -lSystem -fixup_chains %t-arm64_32.o -o /dev/null 2>&1 | \
# RUN: FileCheck %s --check-prefix=ARCH
@@ -12,7 +9,6 @@
## Check that we emit diagnostics when -fixup_chains is explicitly specified,
## but we don't support creating chained fixups for said configuration.
# NO-PIE: error: -fixup_chains is incompatible with -no_pie
-# VERSION: warning: -fixup_chains requires macOS 11.0, which is newer than target minimum of 10.15
# ARCH: error: -fixup_chains is only supported on x86_64 and arm64 targets
.globl _main
diff --git a/lld/test/MachO/objc-selrefs.s b/lld/test/MachO/objc-selrefs.s
index 6d144f4938b45..eebe7c6476cd5 100644
--- a/lld/test/MachO/objc-selrefs.s
+++ b/lld/test/MachO/objc-selrefs.s
@@ -6,14 +6,14 @@
# RUN: llvm-mc -filetype=obj -triple=arm64-apple-darwin %t/implicit-selrefs.s -o %t/implicit-selrefs.o
# RUN: %lld -dylib -arch arm64 -lSystem -o %t/explicit-only-no-icf \
-# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o
+# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o -no_fixup_chains
# RUN: llvm-otool -vs __DATA __objc_selrefs %t/explicit-only-no-icf | \
# RUN: FileCheck %s --check-prefix=EXPLICIT-NO-ICF
## NOTE: ld64 always dedups the selrefs unconditionally, but we only do it when
## ICF is enabled.
# RUN: %lld -dylib -arch arm64 -lSystem -o %t/explicit-only-with-icf \
-# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o
+# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o -no_fixup_chains
# RUN: llvm-otool -vs __DATA __objc_selrefs %t/explicit-only-with-icf \
# RUN: | FileCheck %s --check-prefix=EXPLICIT-WITH-ICF
@@ -25,7 +25,8 @@
# SELREFS-EMPTY:
# RUN: %lld -dylib -arch arm64 -lSystem --icf=all -o %t/explicit-and-implicit \
-# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o %t/implicit-selrefs.o
+# RUN: %t/explicit-selrefs-1.o %t/explicit-selrefs-2.o %t/implicit-selrefs.o \
+# RUN: -no_fixup_chains
# RUN: llvm-otool -vs __DATA __objc_selrefs %t/explicit-and-implicit \
# RUN: | FileCheck %s --check-prefix=EXPLICIT-AND-IMPLICIT
|
Thanks for following up with this |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
This should probably grow a release notes entry, which mentions which os versions this is enabled by default at, and how to turn it off if it causes problems.
Summary: This reverts commit f55b79f. The known issues with chained fixups have been addressed by #98913, #98305, #97156 and #95171. Compared to the original commit, support for xrOS (which postdates chained fixups' introduction) was added and an unnecessary test change was removed. ---------- Original commit message: Enable chained fixups in lld when all platform and version criteria are met. This is an attempt at simplifying the logic used in ld 907: https://github.com/apple-oss-distributions/ld64/blob/93d74eafc37c0558b4ffb88a8bc15c17bed44a20/src/ld/Options.cpp#L5458-L5549 Some changes were made to simplify the logic: - only enable chained fixups for macOS from 13.0 to avoid the arch check - only enable chained fixups for iphonesimulator from 16.0 to avoid the arch check - don't enable chained fixups for not specifically listed platforms - don't enable chained fixups for arm64_32 Test Plan: Reviewers: Subscribers: Tasks: Tags: Differential Revision: https://phabricator.intern.facebook.com/D60251071
This reverts commit f55b79f.
The known issues with chained fixups have been addressed by #98913, #98305, #97156 and #95171.
Compared to the original commit, support for xrOS (which postdates chained fixups' introduction) was added and an unnecessary test change was removed.
Original commit message:
Enable chained fixups in lld when all platform and version criteria are met. This is an attempt at simplifying the logic used in ld 907:
https://github.com/apple-oss-distributions/ld64/blob/93d74eafc37c0558b4ffb88a8bc15c17bed44a20/src/ld/Options.cpp#L5458-L5549
Some changes were made to simplify the logic: