Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mRemoteNG/PuTTYNG.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'unix/utils/arm_arch_queries.c')
-rw-r--r--unix/utils/arm_arch_queries.c28
1 files changed, 19 insertions, 9 deletions
diff --git a/unix/utils/arm_arch_queries.c b/unix/utils/arm_arch_queries.c
index cc3e4125..d6dc97bc 100644
--- a/unix/utils/arm_arch_queries.c
+++ b/unix/utils/arm_arch_queries.c
@@ -17,10 +17,11 @@ bool platform_aes_neon_available(void)
#elif defined HWCAP2_AES
return getauxval(AT_HWCAP2) & HWCAP2_AES;
#elif defined __APPLE__
- /* M1 macOS defines no optional sysctl flag indicating presence of
- * the AES extension, which I assume to be because it's always
- * present */
- return true;
+ SysctlResult res = test_sysctl_flag("hw.optional.arm.FEAT_AES");
+ /* Older M1 macOS didn't provide this flag, but as far as I know
+ * implemented the crypto extension anyway, so treat 'feature
+ * missing' as 'implemented' */
+ return res != SYSCTL_OFF;
#else
return false;
#endif
@@ -33,8 +34,9 @@ bool platform_sha256_neon_available(void)
#elif defined HWCAP2_SHA2
return getauxval(AT_HWCAP2) & HWCAP2_SHA2;
#elif defined __APPLE__
- /* Assume always present on M1 macOS, similarly to AES */
- return true;
+ SysctlResult res = test_sysctl_flag("hw.optional.arm.FEAT_SHA256");
+ /* As above, treat 'missing' as enabled */
+ return res != SYSCTL_OFF;
#else
return false;
#endif
@@ -47,8 +49,9 @@ bool platform_sha1_neon_available(void)
#elif defined HWCAP2_SHA1
return getauxval(AT_HWCAP2) & HWCAP2_SHA1;
#elif defined __APPLE__
- /* Assume always present on M1 macOS, similarly to AES */
- return true;
+ SysctlResult res = test_sysctl_flag("hw.optional.arm.FEAT_SHA1");
+ /* As above, treat 'missing' as enabled */
+ return res != SYSCTL_OFF;
#else
return false;
#endif
@@ -61,7 +64,14 @@ bool platform_sha512_neon_available(void)
#elif defined HWCAP2_SHA512
return getauxval(AT_HWCAP2) & HWCAP2_SHA512;
#elif defined __APPLE__
- return test_sysctl_flag("hw.optional.armv8_2_sha512");
+ /* There are two sysctl flags for this, apparently invented at
+ * different times. Try both, falling back to the older one. */
+ SysctlResult res = test_sysctl_flag("hw.optional.arm.FEAT_SHA512");
+ if (res != SYSCTL_MISSING)
+ return res == SYSCTL_ON;
+
+ res = test_sysctl_flag("hw.optional.armv8_2_sha512");
+ return res == SYSCTL_ON;
#else
return false;
#endif