[lld] f204229 - [lld-macho] Implement -ignore_auto_link

Keith Smiley via llvm-commits llvm-commits at lists.llvm.org
Sat Oct 8 22:03:06 PDT 2022


Author: Keith Smiley
Date: 2022-10-08T21:55:44-07:00
New Revision: f204229e4573a7a5bb2fcef747a012f306637818

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

LOG: [lld-macho] Implement -ignore_auto_link

This option is really only useful for things like debugging
https://github.com/llvm/llvm-project/issues/56939, but there are some
actual uses of it in Swift's build system as well.

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

Added: 
    

Modified: 
    lld/MachO/Config.h
    lld/MachO/Driver.cpp
    lld/MachO/Options.td
    lld/test/MachO/lc-linker-option.ll

Removed: 
    


################################################################################
diff  --git a/lld/MachO/Config.h b/lld/MachO/Config.h
index b07c8a5e6d2be..81bc6cc546cb2 100644
--- a/lld/MachO/Config.h
+++ b/lld/MachO/Config.h
@@ -168,6 +168,7 @@ struct Configuration {
   bool demangle = false;
   bool deadStrip = false;
   bool errorForArchMismatch = false;
+  bool ignoreAutoLink = false;
   PlatformInfo platformInfo;
   llvm::Optional<PlatformInfo> secondaryPlatformInfo;
   NamespaceKind namespaceKind = NamespaceKind::twolevel;

diff  --git a/lld/MachO/Driver.cpp b/lld/MachO/Driver.cpp
index a1a491c4a8192..92230db0629a0 100644
--- a/lld/MachO/Driver.cpp
+++ b/lld/MachO/Driver.cpp
@@ -463,6 +463,9 @@ static void addFramework(StringRef name, bool isNeeded, bool isWeak,
 // flags. This directly parses the flags instead of using the standard argument
 // parser to improve performance.
 void macho::parseLCLinkerOption(InputFile *f, unsigned argc, StringRef data) {
+  if (config->ignoreAutoLink)
+    return;
+
   SmallVector<StringRef, 4> argv;
   size_t offset = 0;
   for (unsigned i = 0; i < argc && offset < data.size(); ++i) {
@@ -1539,6 +1542,7 @@ bool macho::link(ArrayRef<const char *> argsArr, llvm::raw_ostream &stdoutOS,
   config->forceExactCpuSubtypeMatch =
       getenv("LD_DYLIB_CPU_SUBTYPES_MUST_MATCH");
   config->objcStubsMode = getObjCStubsMode(args);
+  config->ignoreAutoLink = args.hasArg(OPT_ignore_auto_link);
 
   for (const Arg *arg : args.filtered(OPT_alias)) {
     config->aliasedSymbols.push_back(

diff  --git a/lld/MachO/Options.td b/lld/MachO/Options.td
index 56498ec20062b..fda7ae36077cd 100644
--- a/lld/MachO/Options.td
+++ b/lld/MachO/Options.td
@@ -991,6 +991,9 @@ def dyld_env : Separate<["-"], "dyld_env">,
     MetaVarName<"<dyld_env_var>">,
     HelpText<"Specifies a LC_DYLD_ENVIRONMENT variable value pair.">,
     Group<grp_rare>;
+def ignore_auto_link : Flag<["-"], "ignore_auto_link">,
+    HelpText<"Ignore LC_LINKER_OPTIONs">,
+    Group<grp_rare>;
 
 def grp_deprecated : OptionGroup<"deprecated">, HelpText<"DEPRECATED">;
 
@@ -1270,10 +1273,6 @@ def i : Flag<["-"], "i">,
     HelpText<"This option is undocumented in ld64">,
     Flags<[HelpHidden]>,
     Group<grp_undocumented>;
-def ignore_auto_link : Flag<["-"], "ignore_auto_link">,
-    HelpText<"This option is undocumented in ld64">,
-    Flags<[HelpHidden]>,
-    Group<grp_undocumented>;
 def ignore_optimization_hints : Flag<["-"], "ignore_optimization_hints">,
     HelpText<"Ignore Linker Optimization Hints">,
     Group<grp_undocumented>;

diff  --git a/lld/test/MachO/lc-linker-option.ll b/lld/test/MachO/lc-linker-option.ll
index 4d2d695337cff..48dd5b9ffd9ae 100644
--- a/lld/test/MachO/lc-linker-option.ll
+++ b/lld/test/MachO/lc-linker-option.ll
@@ -12,6 +12,9 @@
 ; FRAME-NEXT: cmdsize
 ; FRAME-NEXT:    name /System/Library/Frameworks/CoreFoundation.framework/CoreFoundation
 
+; RUN: not %lld %t/framework.o -o %t/frame_no_autolink -ignore_auto_link 2>&1 | FileCheck --check-prefix=NO_AUTOLINK %s
+; NO_AUTOLINK: error: undefined symbol: __CFBigNumGetInt128
+
 ; RUN: llvm-as %t/l.ll -o %t/l.o
 ;; The dynamic call to _CFBigNumGetInt128 uses dyld_stub_binder,
 ;; which needs -lSystem from LC_LINKER_OPTION to get resolved.


        


More information about the llvm-commits mailing list