Index: include/lld/ReaderWriter/MachOLinkingContext.h =================================================================== --- include/lld/ReaderWriter/MachOLinkingContext.h +++ include/lld/ReaderWriter/MachOLinkingContext.h @@ -321,6 +321,8 @@ void setBundleLoader(StringRef loader) { _bundleLoader = loader; } void setPrintAtoms(bool value=true) { _printAtoms = value; } + void setApplicationExtension(bool value = true) { _applicationExtension = value; } + bool applicationExtension() const { return _applicationExtension; } void setTestingFileUsage(bool value = true) { _testingFileUsage = value; } @@ -487,6 +489,7 @@ bool _generateVersionLoadCommand = false; bool _generateFunctionStartsLoadCommand = false; bool _generateDataInCodeLoadCommand = false; + bool _applicationExtension = false; StringRef _bundleLoader; mutable std::unique_ptr _archHandler; mutable std::unique_ptr _writer; Index: lib/Driver/DarwinLdDriver.cpp =================================================================== --- lib/Driver/DarwinLdDriver.cpp +++ lib/Driver/DarwinLdDriver.cpp @@ -366,6 +366,10 @@ } } + if (llvm::opt::Arg *kind = parsedArgs.getLastArg(OPT_applicationextension)) { + ctx.setApplicationExtension(true); + } + // Handle -arch xxx MachOLinkingContext::Arch arch = MachOLinkingContext::arch_unknown; if (llvm::opt::Arg *archStr = parsedArgs.getLastArg(OPT_arch)) { Index: lib/Driver/DarwinLdOptions.td =================================================================== --- lib/Driver/DarwinLdOptions.td +++ lib/Driver/DarwinLdOptions.td @@ -17,6 +17,8 @@ HelpText<"Create main executable (default)">, Group; def preload : Flag<["-"], "preload">, HelpText<"Create binary for use with embedded systems">, Group; +def applicationextension : Flag<["-"], "application_extension">, + HelpText<"Mark a library as an application extension">, Group; // optimizations def grp_opts : OptionGroup<"opts">, HelpText<"OPTIMIZATIONS">; Index: lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp =================================================================== --- lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp +++ lib/ReaderWriter/MachO/MachONormalizedFileFromAtoms.cpp @@ -1571,6 +1573,8 @@ flags |= MH_PIE; if (_hasTLVDescriptors) flags |= (MH_PIE | MH_HAS_TLV_DESCRIPTORS); + if (_ctx.applicationExtension()) + flags |= MH_APP_EXTENSION_SAFE; return flags; } }