summaryrefslogtreecommitdiffstats
path: root/crypto/ppccap.c
diff options
context:
space:
mode:
authorAndy Polyakov <appro@openssl.org>2017-04-01 15:28:28 +0200
committerAndy Polyakov <appro@openssl.org>2017-04-02 22:10:06 +0200
commit8a4eee0b18cf5f927c528d6e7bd0470c1cb679cb (patch)
treeb5b4ccccf3ea1fe2cb9d1436678e2b1f1f969521 /crypto/ppccap.c
parenta43cf4c0c00ac09bd83709305b5691c4010dba43 (diff)
crypto/ppccap.c: SIGILL-free processor capabilities detection on MacOS X.
It seems to be problematic to probe processor capabilities with SIGILL on MacOS X. The problem should be limited to cases when application code is debugged, but crashes were reported even during normal execution... Reviewed-by: Kurt Roeckx <kurt@openssl.org> Reviewed-by: Richard Levitte <levitte@openssl.org> Reviewed-by: Rich Salz <rsalz@openssl.org> (cherry picked from commit 0bd93bbe4ae60e5f318b298bfe617e468a7b71d0)
Diffstat (limited to 'crypto/ppccap.c')
-rw-r--r--crypto/ppccap.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/crypto/ppccap.c b/crypto/ppccap.c
index ef38b172d9..3baf9f7b76 100644
--- a/crypto/ppccap.c
+++ b/crypto/ppccap.c
@@ -22,6 +22,10 @@
# define __power_set(a) (_system_configuration.implementation & (a))
# endif
#endif
+#if defined(__APPLE__) && defined(__MACH__)
+# include <sys/types.h>
+# include <sys/sysctl.h>
+#endif
#include <openssl/crypto.h>
#include <openssl/bn.h>
@@ -230,6 +234,28 @@ void OPENSSL_cpuid_setup(void)
# endif
#endif
+#if defined(__APPLE__) && defined(__MACH__)
+ OPENSSL_ppccap_P |= PPC_FPU;
+
+ {
+ int val;
+ size_t len = sizeof(val);
+
+ if (sysctlbyname("hw.optional.64bitops", &val, &len, NULL, 0) == 0) {
+ if (val)
+ OPENSSL_ppccap_P |= PPC_FPU64;
+ }
+
+ len = sizeof(val);
+ if (sysctlbyname("hw.optional.altivec", &val, &len, NULL, 0) == 0) {
+ if (val)
+ OPENSSL_ppccap_P |= PPC_ALTIVEC;
+ }
+
+ return;
+ }
+#endif
+
if (getauxval != NULL) {
unsigned long hwcap = getauxval(HWCAP);