diff options
author | David Benjamin <davidben@google.com> | 2021-12-29 13:05:12 -0500 |
---|---|---|
committer | Bernd Edlinger <bernd.edlinger@hotmail.de> | 2022-01-09 07:40:44 +0100 |
commit | 40c24d74deaad8a0ad7566a68ea5ea757bc3ccef (patch) | |
tree | df9e880922ee92a3fee3e4ab8ca4fcac95409d65 /crypto/arm_arch.h | |
parent | c30bc4e2093f47a37736944da548653bc08d774d (diff) |
Don't use __ARMEL__/__ARMEB__ in aarch64 assembly
GCC's __ARMEL__ and __ARMEB__ defines denote little- and big-endian arm,
respectively. They are not defined on aarch64, which instead use
__AARCH64EL__ and __AARCH64EB__.
However, OpenSSL's assembly originally used the 32-bit defines on both
platforms and even define __ARMEL__ and __ARMEB__ in arm_arch.h. This is
less portable and can even interfere with other headers, which use
__ARMEL__ to detect little-endian arm.
Over time, the aarch64 assembly has switched to the correct defines,
such as in 32bbb62ea634239e7cb91d6450ba23517082bab6. This commit
finishes the job: poly1305-armv8.pl needed a fix and the dual-arch
armx.pl files get one more transform to convert from 32-bit to 64-bit.
(There is an even more official endianness detector, __ARM_BIG_ENDIAN in
the Arm C Language Extensions. But I've stuck with the GCC ones here as
that would be a larger change.)
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
(Merged from https://github.com/openssl/openssl/pull/17373)
Diffstat (limited to 'crypto/arm_arch.h')
-rw-r--r-- | crypto/arm_arch.h | 5 |
1 files changed, 0 insertions, 5 deletions
diff --git a/crypto/arm_arch.h b/crypto/arm_arch.h index ca48045670..848f06542c 100644 --- a/crypto/arm_arch.h +++ b/crypto/arm_arch.h @@ -21,11 +21,6 @@ # elif defined(__GNUC__) # if defined(__aarch64__) # define __ARM_ARCH__ 8 -# if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__ -# define __ARMEB__ -# else -# define __ARMEL__ -# endif /* * Why doesn't gcc define __ARM_ARCH__? Instead it defines * bunch of below macros. See all_architectures[] table in |