From 40ab2d5572cf8b77065a73ec2b40e9e47afcb7a3 Mon Sep 17 00:00:00 2001 From: Sam Bingner Date: Thu, 19 Dec 2019 18:05:41 -1000 Subject: Update ld64 to support arm64e --- data/ld64/arm64e.diff | 135 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 data/ld64/arm64e.diff (limited to 'data/ld64/arm64e.diff') diff --git a/data/ld64/arm64e.diff b/data/ld64/arm64e.diff new file mode 100644 index 000000000..0b76998d2 --- /dev/null +++ b/data/ld64/arm64e.diff @@ -0,0 +1,135 @@ +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 ) -- cgit v1.2.3