You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
arm64e version 0 was the unstable version while PAC was in development.
BTI is backwards compatible and does not change the ABI.
EMTE/MIE is also not changing the ABI.
Apple has not announced anything for an arm64e version 2.
So, maybe we just introduce Architecture.arm64e. And if Apple ever introduces a version 2, we can introduce a Architecture.arm64e v2. Simply folding it into the enum rather than having a separate version.
Note from @rmacnak-google We're conflating architecture and ABI here. An architecture can support multiple ABIs, but in Dart we basically always pick one based on Arch + OS. So we kind of shoe-horn the ABI choice into Architecture here, even though the hardware architecture can run both arm64e and arm64. Anyway, we don't want to do breaking changes. So, we're going to roll with it.
Also, we don't want the complexity of an extra integer. So, if Apple ever introduces v2 we'll add an Architecture.arm64ev2.
Activity
dcharkes commentedon Jul 8, 2026
Arm64e ABI actually has different versions:The hardware has different versions, not all influence the ABI:Gemini believes that these are encoded in the cpusubtype in the Mach-O headers:
You can compile to that with
https://github.com/lelegard/arm-cpusysregs/blob/main/docs/arm64e-on-macos.md#detecting-arm64-vs-arm64e-compilation-in-the-code
or in assembly with
I suspect that BTI will then need to set a higher version in bits 24-27. (And then we have a maximum of 16 security ABI version bumps.)
This means that adding an
Architecture.arm64eto the code_assets configuration is not enough. We'll also need to add a ABI version at some point.cc @rmacnak-google if you have further insights, let us know.
dcharkes commentedon Aug 26, 2026
Okay, I did some more digging.
So, maybe we just introduce
Architecture.arm64e. And if Apple ever introduces a version 2, we can introduce aArchitecture.arm64e v2. Simply folding it into the enum rather than having a separate version.dcharkes commentedon Aug 26, 2026
Note from @rmacnak-google We're conflating architecture and ABI here. An architecture can support multiple ABIs, but in Dart we basically always pick one based on Arch + OS. So we kind of shoe-horn the ABI choice into
Architecturehere, even though the hardware architecture can run botharm64eandarm64. Anyway, we don't want to do breaking changes. So, we're going to roll with it.Also, we don't want the complexity of an extra integer. So, if Apple ever introduces v2 we'll add an
Architecture.arm64ev2.[-][code_assets] Add `arm64e` as `Architecture`?[/-][+][code_assets] Add `arm64e` as `Architecture`[/+][code_assets] [native_toolchain_c] Add arm64e (#3589)
[code_assets] [native_toolchain_c] Add arm64e (dart-lang#3589)