diff options
author | Allan Jude <allanjude@FreeBSD.org> | 2021-11-19 15:14:30 +0000 |
---|---|---|
committer | Tomas Mraz <tomas@openssl.org> | 2021-11-24 11:02:02 +0100 |
commit | 19706a3ddf72de9c7d11d28e4d2e86ac80d75896 (patch) | |
tree | c62a05399fa9bf7b6fdf9ef742b1d8649c7c2d56 /crypto | |
parent | 6052078d410cb00b58ebd5eb44e8f746a4850321 (diff) |
Fix detection of ARMv7 and ARM64 CPU features on FreeBSD
OpenSSL assumes AT_HWCAP = 16 (as on Linux), but on FreeBSD AT_HWCAP = 25
Switch to using AT_HWCAP, and setting it to 16 if it is not defined.
OpenSSL calls elf_auxv_info() with AT_CANARY which returns ENOENT
resulting in all ARM acceleration features being disabled.
CLA: trivial
Reviewed-by: Ben Kaduk <kaduk@mit.edu>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/17082)
(cherry picked from commit c1dabe26e3e96cdce0ffc929e9677840ad089ba5)
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/armcap.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/crypto/armcap.c b/crypto/armcap.c index c5685bde58..48c5d4d64e 100644 --- a/crypto/armcap.c +++ b/crypto/armcap.c @@ -106,20 +106,23 @@ static unsigned long getauxval(unsigned long key) * ARM puts the feature bits for Crypto Extensions in AT_HWCAP2, whereas * AArch64 used AT_HWCAP. */ +# ifndef AT_HWCAP +# define AT_HWCAP 16 +# endif +# ifndef AT_HWCAP2 +# define AT_HWCAP2 26 +# endif # if defined(__arm__) || defined (__arm) -# define HWCAP 16 - /* AT_HWCAP */ +# define HWCAP AT_HWCAP # define HWCAP_NEON (1 << 12) -# define HWCAP_CE 26 - /* AT_HWCAP2 */ +# define HWCAP_CE AT_HWCAP2 # define HWCAP_CE_AES (1 << 0) # define HWCAP_CE_PMULL (1 << 1) # define HWCAP_CE_SHA1 (1 << 2) # define HWCAP_CE_SHA256 (1 << 3) # elif defined(__aarch64__) -# define HWCAP 16 - /* AT_HWCAP */ +# define HWCAP AT_HWCAP # define HWCAP_NEON (1 << 1) # define HWCAP_CE HWCAP |