summaryrefslogtreecommitdiffstats
path: root/crypto/armcap.c
diff options
context:
space:
mode:
authorDavid Carlier <devnexen@gmail.com>2020-12-09 20:23:32 +0000
committerMatt Caswell <matt@openssl.org>2021-01-14 08:34:38 +0000
commit5eb24fbd1c3e0d130ba7f81f1ccf457a2b9d75ad (patch)
treebecae3d53cae829628119c5d0d74043598190f45 /crypto/armcap.c
parentb57ec7394aace731c460b509aa84039274337600 (diff)
OPENSSL_cpuid_setup FreeBSD arm update.
when possible using the getauxval equivalent which has similar ids as Linux, instead of bad instructions catch approach. Reviewed-by: Ben Kaduk <kaduk@mit.edu> Reviewed-by: Matt Caswell <matt@openssl.org> (Merged from https://github.com/openssl/openssl/pull/13650)
Diffstat (limited to 'crypto/armcap.c')
-rw-r--r--crypto/armcap.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/crypto/armcap.c b/crypto/armcap.c
index 7bd82f8ebc..6c0acda244 100644
--- a/crypto/armcap.c
+++ b/crypto/armcap.c
@@ -71,6 +71,23 @@ void OPENSSL_cpuid_setup(void) __attribute__ ((constructor));
# define OSSL_IMPLEMENT_GETAUXVAL
# endif
# endif
+# if defined(__FreeBSD__)
+# include <sys/param.h>
+# if __FreeBSD_version >= 1200000
+# include <sys/auxv.h>
+# define OSSL_IMPLEMENT_GETAUXVAL
+
+static unsigned long getauxval(unsigned long key)
+{
+ unsigned long val = 0ul;
+
+ if (elf_aux_info((int)key, &val, sizeof(val)) != 0)
+ return 0ul;
+
+ return val;
+}
+# endif
+# endif
/*
* ARM puts the feature bits for Crypto Extensions in AT_HWCAP2, whereas