diff -ur ld64-450.3/src/abstraction/MachOFileAbstraction.hpp ld64-450.3+iOS/src/abstraction/MachOFileAbstraction.hpp --- ld64-450.3/src/abstraction/MachOFileAbstraction.hpp 2019-04-09 13:33:07.000000000 -1000 +++ ld64-450.3+iOS/src/abstraction/MachOFileAbstraction.hpp 2019-12-09 16:47:35.000000000 -1000 @@ -667,6 +667,9 @@ #if SUPPORT_ARCH_arm64v8 { "arm64v8", CPU_TYPE_ARM64, CPU_SUBTYPE_ARM64_V8, "arm64v8-", "aarch64-", true, false }, #endif +#if SUPPORT_ARCH_arm64e + { "arm64e", CPU_TYPE_ARM64, CPU_SUBTYPE_ARM64E, "arm64e-", "aarch64-", true, false }, +#endif { NULL, 0, 0, NULL, NULL, false, false } }; diff -ur ld64-450.3/src/create_configure ld64-450.3+iOS/src/create_configure --- ld64-450.3/src/create_configure 2019-04-09 13:33:08.000000000 -1000 +++ ld64-450.3+iOS/src/create_configure 2019-12-09 16:46:32.000000000 -1000 @@ -11,12 +11,12 @@ fi if [ -z "${RC_SUPPORTED_ARCHS}" ]; then - RC_SUPPORTED_ARCHS="i386 x86_64 x86_64h armv6 armv7 armv7s armv7m armv7k arm64" + RC_SUPPORTED_ARCHS="i386 x86_64 x86_64h armv6 armv7 armv7s armv7m armv7k arm64 arm64e" fi for ANARCH in ${RC_SUPPORTED_ARCHS} do - KNOWN_ARCHS=",armv4t,armv5,armv6,armv7,armv7f,armv7k,armv7s,armv6m,armv7m,armv7em,armv8,arm64,arm64v8,i386,x86_64,x86_64h," + KNOWN_ARCHS=",armv4t,armv5,armv6,armv7,armv7f,armv7k,armv7s,armv6m,armv7m,armv7em,armv8,arm64,arm64v8,arm64e,i386,x86_64,x86_64h," FOUND=`echo "$KNOWN_ARCHS" | grep ",$ANARCH,"` if [ $FOUND ]; then echo "#define SUPPORT_ARCH_$ANARCH 1" >> ${DERIVED_FILE_DIR}/configure.h diff -ur ld64-450.3/src/ld/Architectures.hpp ld64-450.3+iOS/src/ld/Architectures.hpp --- ld64-450.3/src/ld/Architectures.hpp 2019-04-09 13:33:08.000000000 -1000 +++ ld64-450.3+iOS/src/ld/Architectures.hpp 2019-12-09 16:46:32.000000000 -1000 @@ -61,7 +61,10 @@ typedef Pointer64 P; }; - +struct arm64e +{ + typedef Pointer64 P; +}; #endif // __ARCHITECTURES__ diff -ur ld64-450.3/src/ld/Options.cpp ld64-450.3+iOS/src/ld/Options.cpp --- ld64-450.3/src/ld/Options.cpp 2019-04-09 13:33:08.000000000 -1000 +++ ld64-450.3+iOS/src/ld/Options.cpp 2019-12-09 16:46:32.000000000 -1000 @@ -621,14 +621,14 @@ if ( platforms().contains(ld::kPlatform_iOS) && (platforms().minOS(ld::kPlatform_iOS) == 0) && (fOutputKind != Options::kObjectFile) ) { #if defined(DEFAULT_IPHONEOS_MIN_VERSION) warning("-ios_version_min not specified, assuming " DEFAULT_IPHONEOS_MIN_VERSION); - setVersionMin(ld::kPlatformiOS, DEFAULT_IPHONEOS_MIN_VERSION); + setVersionMin(ld::kPlatform_iOS, DEFAULT_IPHONEOS_MIN_VERSION); #else warning("-ios_version_min not specified, assuming 6.0"); setVersionMin(ld::kPlatform_iOS, "6.0"); #endif } #if SUPPORT_ARCH_arm64e - if ( (fArchitecture == CPU_TYPE_ARM64) && (fSubArchitecture == CPU_SUBTYPE_ARM64_E) ) { + if ( (fArchitecture == CPU_TYPE_ARM64) && (fSubArchitecture == CPU_SUBTYPE_ARM64E) ) { fSupportsAuthenticatedPointers = true; } #endif @@ -4412,7 +4412,7 @@ if ( (fOutputKind != Options::kObjectFile) && (fOutputKind != Options::kPreload) ) { #if defined(DEFAULT_IPHONEOS_MIN_VERSION) warning("-ios_version_min not specified, assuming " DEFAULT_IPHONEOS_MIN_VERSION); - setVersionMin(ld::kPlatformiOS, DEFAULT_IPHONEOS_MIN_VERSION); + setVersionMin(ld::kPlatform_iOS, DEFAULT_IPHONEOS_MIN_VERSION); #else if ( fSubArchitecture == CPU_SUBTYPE_ARM_V7K ) { warning("-watchos_version_min not specified, assuming 2.0"); @@ -4749,7 +4749,7 @@ break; case Options::kDyld: // arm64e has support for compressed LINKEDIT. - if ( (fArchitecture == CPU_TYPE_ARM64) && (fSubArchitecture == CPU_SUBTYPE_ARM64_E) ) + if ( (fArchitecture == CPU_TYPE_ARM64) && (fSubArchitecture == CPU_SUBTYPE_ARM64E) ) break; case Options::kPreload: case Options::kStaticExecutable: @@ -4814,7 +4814,7 @@ if (fArchitecture == CPU_TYPE_ARM64) { #if SUPPORT_ARCH_arm64e - if (fSubArchitecture == CPU_SUBTYPE_ARM64_E) + if (fSubArchitecture == CPU_SUBTYPE_ARM64E) { // FIXME: Move some of these to arm64 fNoLazyBinding = true; @@ -4873,7 +4873,7 @@ fUseLinkedListBinding = true; fNoLazyBinding = true; #if SUPPORT_ARCH_arm64e - if ( (fArchitecture == CPU_TYPE_ARM64) && (fSubArchitecture == CPU_SUBTYPE_ARM64_E) ) + if ( (fArchitecture == CPU_TYPE_ARM64) && (fSubArchitecture == CPU_SUBTYPE_ARM64E) ) fSupportsAuthenticatedPointers = true; #endif break; @@ -5267,7 +5267,7 @@ } else if ( platforms().minOS(ld::iOS_10_0) ) { #if SUPPORT_ARCH_arm64e - if ( (fArchitecture == CPU_TYPE_ARM64) && (fSubArchitecture == CPU_SUBTYPE_ARM64_E) ) { + if ( (fArchitecture == CPU_TYPE_ARM64) && (fSubArchitecture == CPU_SUBTYPE_ARM64E) ) { fUnalignedPointerTreatment = Options::kUnalignedPointerError; } else #endif diff -ur ld64-450.3/src/ld/passes/objc.cpp ld64-450.3+iOS/src/ld/passes/objc.cpp --- ld64-450.3/src/ld/passes/objc.cpp 2019-04-09 13:33:08.000000000 -1000 +++ ld64-450.3+iOS/src/ld/passes/objc.cpp 2019-12-09 16:46:32.000000000 -1000 @@ -1322,7 +1322,7 @@ #if SUPPORT_ARCH_arm64 case CPU_TYPE_ARM64: #if SUPPORT_ARCH_arm64e - if (opts.subArchitecture() == CPU_SUBTYPE_ARM64_E) { + if (opts.subArchitecture() == CPU_SUBTYPE_ARM64E) { doPass(opts, state); break; } diff -ur ld64-450.3/src/ld/passes/stubs/stubs.cpp ld64-450.3+iOS/src/ld/passes/stubs/stubs.cpp --- ld64-450.3/src/ld/passes/stubs/stubs.cpp 2019-04-09 13:33:08.000000000 -1000 +++ ld64-450.3+iOS/src/ld/passes/stubs/stubs.cpp 2019-12-09 16:46:32.000000000 -1000 @@ -235,7 +235,7 @@ #if SUPPORT_ARCH_arm64 case CPU_TYPE_ARM64: #if SUPPORT_ARCH_arm64e - if ( (_options.subArchitecture() == CPU_SUBTYPE_ARM64_E) && _options.useAuthenticatedStubs() ) { + if ( (_options.subArchitecture() == CPU_SUBTYPE_ARM64E) && _options.useAuthenticatedStubs() ) { if ( (_options.outputKind() == Options::kKextBundle) && _options.kextsUseStubs() ) return new ld::passes::stubs::arm64e::NonLazyStubAtom(*this, target, weakImport); else if ( usingCompressedLINKEDIT() && !forLazyDylib && _options.noLazyBinding() && !stubToResolver )