iOS 框架的 Arm64e 架构

Arm64e architecture for iOS framework

曾几何时,Apple 推出了 Arm64e 架构。那是在时间 Xcode 10.0 两年前。从 A12 CPU 开始。今天,Xcode 12.4 在为 iOS 平台选择标准架构时仍然只有 Arm64 是默认的。

A​​rm64e 发生了什么,为什么它不是默认的?

此外,当我手动添加它并为模拟器存档时,我得到:

ld: warning: ignoring file /Applications/Xcode12.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/12.0.0/lib/darwin/libclang_rt.iossim.a, missing required architecture arm64e in file /Applications/Xcode12.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/12.0.0/lib/darwin/libclang_rt.iossim.a (3 slices)

怎么了? 是不是说M1macs不支持PAC(pointer authentication codes)? 我有点疑惑,但我还不能在 M1 mac 上测试。

A​​BI 还不稳定。

A​​12之后的所有设备(包括M1)都完全支持硬件指针认证(在ARM手册中,FEAT_PAuth代表A12/A12X/A13,FEAT_PAuth2代表A14/M1).
Apple 正在积极地将其用于他们自己的软件:内核缓存、他们所有的应用程序、整个 dyld 共享缓存——这些都是为 arm64e 编译的。

但 PAC again and again and again and again 中存在弱点,为了修复这些弱点,Apple 被迫多次更改 ABI。这些更改中的每一个都需要编译器更改并且完全破坏了向后兼容性。
出于这个原因,Apple 目前无法合理地拥有第 3 方 arm64e 二进制文件——它们会在每次 ABI 更改时中断。您可以自己构建 运行 arm64e 二进制文件,但在 Apple 决定时机成熟之前,第 3 方仅支持 arm64。