[lld] 759bae9 - [lld-macho] Ignore -platform_version and -syslibroot flags.

Nico Weber via llvm-commits llvm-commits at lists.llvm.org
Tue May 12 16:17:11 PDT 2020


Author: Nico Weber
Date: 2020-05-12T19:17:01-04:00
New Revision: 759bae956abf7fb46c28f5e23a4feee593c883ae

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

LOG: [lld-macho] Ignore -platform_version and -syslibroot flags.

clang passes these flags; this makes it easier to try `clang -v`
output with `ld -flavor darwinnew`.

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

Added: 
    lld/test/MachO/platform-version.test

Modified: 
    lld/MachO/Driver.cpp
    lld/MachO/Options.td
    lld/test/MachO/silent-ignore.test

Removed: 
    


################################################################################
diff  --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp
index 858969bb85fe..311e155a21a0 100644
--- a/lld/MachO/Driver.cpp
+++ b/lld/MachO/Driver.cpp
@@ -131,6 +131,18 @@ static bool markSubLibrary(StringRef searchName) {
   return false;
 }
 
+static void handlePlatformVersion(opt::ArgList::iterator &it,
+                                  const opt::ArgList::iterator &end) {
+  // -platform_version takes 3 args, which LLVM's option library doesn't
+  // support directly.  So this explicitly handles that.
+  // FIXME: stash skipped args for later use.
+  for (int i = 0; i < 3; ++i) {
+    ++it;
+    if (it == end || (*it)->getOption().getID() != OPT_INPUT)
+      fatal("usage: -platform_version platform min_version sdk_version");
+  }
+}
+
 bool macho::link(llvm::ArrayRef<const char *> argsArr, bool canExitEarly,
                  raw_ostream &stdoutOS, raw_ostream &stderrOS) {
   lld::stdoutOS = &stdoutOS;
@@ -162,7 +174,9 @@ bool macho::link(llvm::ArrayRef<const char *> argsArr, bool canExitEarly,
     return !errorCount();
   }
 
-  for (opt::Arg *arg : args) {
+  for (opt::ArgList::iterator it = args.begin(), end = args.end(); it != end;
+       ++it) {
+    const opt::Arg *arg = *it;
     switch (arg->getOption().getID()) {
     case OPT_INPUT:
       addFile(arg->getValue());
@@ -171,6 +185,10 @@ bool macho::link(llvm::ArrayRef<const char *> argsArr, bool canExitEarly,
       if (Optional<std::string> path = findDylib(arg->getValue()))
         addFile(*path);
       break;
+    case OPT_platform_version: {
+      handlePlatformVersion(it, end); // Can advance "it".
+      break;
+    }
     }
   }
 

diff  --git a/lld/MachO/Options.td b/lld/MachO/Options.td
index 3068dc31a33b..fd0971fb2fef 100644
--- a/lld/MachO/Options.td
+++ b/lld/MachO/Options.td
@@ -32,5 +32,7 @@ def v: Flag<["-"], "v">, HelpText<"Display the version number and exit">;
 def: Flag<["-"], "demangle">;
 def: Flag<["-"], "dynamic">;
 def: Flag<["-"], "no_deduplicate">;
+def platform_version: Flag<["-"], "platform_version">;
 def: Separate<["-"], "lto_library">;
 def: Separate<["-"], "macosx_version_min">;
+def: Separate<["-"], "syslibroot">;

diff  --git a/lld/test/MachO/platform-version.test b/lld/test/MachO/platform-version.test
new file mode 100644
index 000000000000..4c486c684dfa
--- /dev/null
+++ b/lld/test/MachO/platform-version.test
@@ -0,0 +1,16 @@
+# RUN: not lld -flavor darwinnew -platform_version 2>&1 \
+# RUN:     | FileCheck --check-prefix=FAIL %s
+# RUN: not lld -flavor darwinnew -platform_version macos 2>&1 \
+# RUN:     | FileCheck --check-prefix=FAIL %s
+# RUN: not lld -flavor darwinnew -platform_version macos 10.15 2>&1 \
+# RUN:     | FileCheck --check-prefix=FAIL %s
+# RUN: not lld -flavor darwinnew -platform_version macos -lfoo 10.15 2>&1 \
+# RUN:     | FileCheck --check-prefix=FAIL %s
+# RUN: not lld -flavor darwinnew -platform_version macos 10.15 10.15.4 2>&1 \
+# RUN:     | FileCheck --check-prefix=GOOD %s
+# RUN: not lld -flavor darwinnew -platform_version macos 10.15 10.15.4 foobar 2>&1 \
+# RUN:     | FileCheck --check-prefix=FAIL_FILE %s
+
+FAIL: usage: -platform_version platform min_version sdk_version
+GOOD: undefined symbol: _main
+FAIL_FILE: cannot open foobar

diff  --git a/lld/test/MachO/silent-ignore.test b/lld/test/MachO/silent-ignore.test
index de95cff01572..ae68dd8fe81f 100644
--- a/lld/test/MachO/silent-ignore.test
+++ b/lld/test/MachO/silent-ignore.test
@@ -3,6 +3,7 @@ RUN:   -demangle \
 RUN:   -dynamic \
 RUN:   -no_deduplicate \
 RUN:   -lto_library /lib/foo \
-RUN:   -macosx_version_min 0
+RUN:   -macosx_version_min 0 \
+RUN:   -syslibroot /path/to/MacOSX.platform/Developer/SDKs/MacOSX.sdk
 RUN: not lld -flavor darwinnew -v --not-an-ignored-argument 2>&1 | FileCheck %s
 CHECK: error: unknown argument: --not-an-ignored-argument


        


More information about the llvm-commits mailing list