From e7fdff403e849b18d93cd4a5cb760cba66a92c0b Mon Sep 17 00:00:00 2001 From: Keith Smiley Date: Wed, 3 Nov 2021 21:47:49 -0700 Subject: [PATCH] [lld-macho] Silently ignore the -objc_abi_version This undocumented ld64 flag, based on the most recent ld64 source dump from Xcode 12, only applies to i386. It seems like on all newer architectures this behavior is the default. Reviewed By: #lld-macho, int3 Differential Revision: https://reviews.llvm.org/D113070 --- lld/MachO/Driver.cpp | 2 ++ lld/MachO/Options.td | 11 +++++++---- lld/test/MachO/silent-ignore.s | 28 ++++++++++++++++++++++++++++ lld/test/MachO/silent-ignore.test | 14 -------------- 4 files changed, 37 insertions(+), 18 deletions(-) create mode 100644 lld/test/MachO/silent-ignore.s delete mode 100644 lld/test/MachO/silent-ignore.test diff --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp index d811ba28197a..255f0f2520da 100644 --- a/lld/MachO/Driver.cpp +++ b/lld/MachO/Driver.cpp @@ -780,6 +780,8 @@ static void warnIfUnimplementedOption(const Option &opt) { case OPT_grp_ignored: warn("Option `" + opt.getPrefixedName() + "' is ignored."); break; + case OPT_grp_ignored_silently: + break; default: warn("Option `" + opt.getPrefixedName() + "' is not yet implemented. Stay tuned..."); diff --git a/lld/MachO/Options.td b/lld/MachO/Options.td index 8067a69f0dfd..f4eb302a95b7 100644 --- a/lld/MachO/Options.td +++ b/lld/MachO/Options.td @@ -1277,10 +1277,6 @@ def no_new_main : Flag<["-"], "no_new_main">, HelpText<"This option is undocumented in ld64">, Flags<[HelpHidden]>, Group; -def objc_abi_version : Separate<["-"], "objc_abi_version">, - HelpText<"This option is undocumented in ld64">, - Flags<[HelpHidden]>, - Group; def pause : Flag<["-"], "pause">, HelpText<"This option is undocumented in ld64">, Flags<[HelpHidden]>, @@ -1324,3 +1320,10 @@ def new_linker : Flag<["-"], "new_linker">, HelpText<"This option is ignored in ld64">, Flags<[HelpHidden]>, Group; + +def grp_ignored_silently : OptionGroup<"ignored_silently">, HelpText<"IGNORED SILENTLY">; + +def objc_abi_version : Separate<["-"], "objc_abi_version">, + HelpText<"This option only applies to i386 in ld64">, + Flags<[HelpHidden]>, + Group; diff --git a/lld/test/MachO/silent-ignore.s b/lld/test/MachO/silent-ignore.s new file mode 100644 index 000000000000..5700a77c9313 --- /dev/null +++ b/lld/test/MachO/silent-ignore.s @@ -0,0 +1,28 @@ +# REQUIRES: x86 + +## Check that we correctly parse these flags, even though they are +## unimplemented. ## We may still emit warnings or errors for some of the +## unimplemented ones (but those ## errors are squelched because of the +## `--version` flag.) +# RUN: %lld --version \ +# RUN: -dynamic \ +# RUN: -no_deduplicate \ +# RUN: -lto_library /lib/foo \ +# RUN: -macosx_version_min 0 \ +# RUN: -no_dtrace_dof \ +# RUN: -dependency_info /path/to/dependency_info.dat \ +# RUN: -lto_library ../lib/libLTO.dylib \ +# RUN: -mllvm -time-passes \ +# RUN: -objc_abi_version 2 \ +# RUN: -ios_simulator_version_min 9.0.0 \ +# RUN: -sdk_version 13.2 +# RUN: not %lld -v --not-an-ignored-argument 2>&1 | FileCheck %s +# CHECK: error: unknown argument '--not-an-ignored-argument' + +## Check that we don't emit any warnings nor errors for these unimplemented flags. +# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o +# RUN: %lld %t.o -o /dev/null -objc_abi_version 2 + +.globl _main +_main: + ret diff --git a/lld/test/MachO/silent-ignore.test b/lld/test/MachO/silent-ignore.test deleted file mode 100644 index 2cabd79d73ce..000000000000 --- a/lld/test/MachO/silent-ignore.test +++ /dev/null @@ -1,14 +0,0 @@ -RUN: %lld --version \ -RUN: -dynamic \ -RUN: -no_deduplicate \ -RUN: -lto_library /lib/foo \ -RUN: -macosx_version_min 0 \ -RUN: -no_dtrace_dof \ -RUN: -dependency_info /path/to/dependency_info.dat \ -RUN: -lto_library ../lib/libLTO.dylib \ -RUN: -mllvm -time-passes \ -RUN: -objc_abi_version 2 \ -RUN: -ios_simulator_version_min 9.0.0 \ -RUN: -sdk_version 13.2 -RUN: not %lld -v --not-an-ignored-argument 2>&1 | FileCheck %s -CHECK: error: unknown argument '--not-an-ignored-argument'