Skip to content

Commit d8ae3d4

Browse files
armv8 AES, SHA: simplify structure and fix copypasta
Reorganize the structure of the builds of aesce.c and sha256ce.c with various configurations of AES/SHA256 acceleration. Now everything in a given configuration is grouped together (building the object file, and checking the presence or absence of certain instructions in the assembly). Fix several instances of copypasta in -m options where we were sometimes not allowing the compiler to use optional instructions even though we use them in inline assembly, and sometimes allowing the compiler to use optional instructions even though we then checked their absence Signed-off-by: Gilles Peskine <[email protected]>
1 parent f9b465b commit d8ae3d4

File tree

1 file changed

+49
-53
lines changed

1 file changed

+49
-53
lines changed

tests/scripts/all.sh

Lines changed: 49 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -4723,49 +4723,53 @@ component_build_aes_armce () {
47234723
scripts/config.py set MBEDTLS_AES_USE_HARDWARE_ONLY
47244724
47254725
msg "MBEDTLS_AES_USE_HARDWARE_ONLY, clang, aarch64"
4726-
make -B library/aesce.o CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crypto"
4726+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crypto"
4727+
msg "clang, test aarch64 crypto instructions built"
4728+
grep -E 'aes[a-z]+\s*[qv]' library/aesce.s
47274729
47284730
msg "MBEDTLS_AES_USE_HARDWARE_ONLY, clang, arm"
4729-
make -B library/aesce.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
4731+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
4732+
msg "clang, test A32 crypto instructions built"
4733+
grep -E 'aes[0-9a-z]+.[0-9]\s*[qv]' library/aesce.s
47304734
47314735
msg "MBEDTLS_AES_USE_HARDWARE_ONLY, clang, thumb"
4732-
make -B library/aesce.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
4736+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
4737+
msg "clang, test T32 crypto instructions built"
4738+
grep -E 'aes[0-9a-z]+.[0-9]\s*[qv]' library/aesce.s
47334739
47344740
scripts/config.py unset MBEDTLS_AES_USE_HARDWARE_ONLY
47354741
4736-
msg "no MBEDTLS_AES_USE_HARDWARE_ONLY, clang, aarch64"
4737-
make -B library/aesce.o CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crypto"
4738-
4739-
msg "no MBEDTLS_AES_USE_HARDWARE_ONLY, clang, arm"
4740-
make -B library/aesce.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
4741-
4742-
msg "no MBEDTLS_AES_USE_HARDWARE_ONLY, clang, thumb"
4743-
make -B library/aesce.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
4742+
msg "MBEDTLS_AES_USE_both, clang, aarch64"
4743+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crypto"
4744+
msg "clang, test aarch64 crypto instructions built"
4745+
grep -E 'aes[a-z]+\s*[qv]' library/aesce.s
47444746
4745-
# test for presence of AES instructions
4746-
scripts/config.py set MBEDTLS_AES_USE_HARDWARE_ONLY
4747+
msg "MBEDTLS_AES_USE_both, clang, arm"
4748+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
47474749
msg "clang, test A32 crypto instructions built"
4748-
make -B library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
47494750
grep -E 'aes[0-9a-z]+.[0-9]\s*[qv]' library/aesce.s
4751+
4752+
msg "MBEDTLS_AES_USE_both, clang, thumb"
4753+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
47504754
msg "clang, test T32 crypto instructions built"
4751-
make -B library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
47524755
grep -E 'aes[0-9a-z]+.[0-9]\s*[qv]' library/aesce.s
4753-
msg "clang, test aarch64 crypto instructions built"
4754-
make -B library/aesce.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a"
4755-
grep -E 'aes[a-z]+\s*[qv]' library/aesce.s
47564756
4757-
# test for absence of AES instructions
4758-
scripts/config.py unset MBEDTLS_AES_USE_HARDWARE_ONLY
47594757
scripts/config.py unset MBEDTLS_AESCE_C
4758+
4759+
msg "no MBEDTLS_AESCE_C, clang, aarch64"
4760+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a"
4761+
msg "clang, test aarch64 crypto instructions not built"
4762+
not grep -E 'aes[a-z]+\s*[qv]' library/aesce.s
4763+
4764+
msg "no MBEDTLS_AESCE_C, clang, arm"
4765+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72 -marm"
47604766
msg "clang, test A32 crypto instructions not built"
4761-
make -B library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
47624767
not grep -E 'aes[0-9a-z]+.[0-9]\s*[qv]' library/aesce.s
4768+
4769+
msg "no MBEDTLS_AESCE_C, clang, thumb"
4770+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32 -mthumb"
47634771
msg "clang, test T32 crypto instructions not built"
4764-
make -B library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
47654772
not grep -E 'aes[0-9a-z]+.[0-9]\s*[qv]' library/aesce.s
4766-
msg "clang, test aarch64 crypto instructions not built"
4767-
make -B library/aesce.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a"
4768-
not grep -E 'aes[a-z]+\s*[qv]' library/aesce.s
47694773
}
47704774
47714775
support_build_sha_armce() {
@@ -4776,62 +4780,54 @@ support_build_sha_armce() {
47764780
component_build_sha_armce () {
47774781
scripts/config.py unset MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_IF_PRESENT
47784782
4779-
47804783
# Test variations of SHA256 Armv8 crypto extensions
47814784
scripts/config.py set MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY
47824785
msg "MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY clang, aarch64"
4783-
make -B library/sha256.o CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a"
4786+
make -B library/sha256.o library/sha256.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crypto"
4787+
msg "MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY clang, test aarch64 crypto instructions built"
4788+
grep -E 'sha256[a-z0-9]+\s+[qv]' library/sha256.s
4789+
47844790
msg "MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY clang, arm"
4785-
make -B library/sha256.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
4791+
make -B library/sha256.o library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
4792+
msg "MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY clang, test A32 crypto instructions built"
4793+
grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
47864794
scripts/config.py unset MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY
47874795
47884796
47894797
# test the deprecated form of the config option
47904798
scripts/config.py set MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY
47914799
msg "MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY clang, thumb"
4792-
make -B library/sha256.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
4800+
make -B library/sha256.o library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
4801+
msg "MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY clang, test T32 crypto instructions built"
4802+
grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
47934803
scripts/config.py unset MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY
47944804
47954805
scripts/config.py set MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_IF_PRESENT
47964806
msg "MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_IF_PRESENT clang, aarch64"
4797-
make -B library/sha256.o CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a"
4807+
make -B library/sha256.o library/sha256.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crypto"
4808+
msg "MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_IF_PRESENT clang, test aarch64 crypto instructions built"
4809+
grep -E 'sha256[a-z0-9]+\s+[qv]' library/sha256.s
47984810
scripts/config.py unset MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_IF_PRESENT
47994811
48004812
48014813
# test the deprecated form of the config option
48024814
scripts/config.py set MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT
48034815
msg "MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT clang, arm"
4804-
make -B library/sha256.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm -std=c99"
4816+
make -B library/sha256.o library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm -std=c99"
4817+
48054818
msg "MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT clang, thumb"
4806-
make -B library/sha256.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
4819+
make -B library/sha256.o library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
4820+
msg "MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT clang, test T32 crypto instructions built"
4821+
grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
48074822
scripts/config.py unset MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT
48084823
4809-
4810-
# examine the disassembly for presence of SHA instructions
4811-
for opt in MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_IF_PRESENT; do
4812-
scripts/config.py set ${opt}
4813-
msg "${opt} clang, test A32 crypto instructions built"
4814-
make -B library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
4815-
grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
4816-
4817-
msg "${opt} clang, test T32 crypto instructions built"
4818-
make -B library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
4819-
grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
4820-
4821-
msg "${opt} clang, test aarch64 crypto instructions built"
4822-
make -B library/sha256.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a"
4823-
grep -E 'sha256[a-z0-9]+\s+[qv]' library/sha256.s
4824-
scripts/config.py unset ${opt}
4825-
done
4826-
4827-
48284824
# examine the disassembly for absence of SHA instructions
48294825
msg "clang, test A32 crypto instructions not built"
4830-
make -B library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
4826+
make -B library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72 -marm"
48314827
not grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
48324828
48334829
msg "clang, test T32 crypto instructions not built"
4834-
make -B library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
4830+
make -B library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32 -mthumb"
48354831
not grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
48364832
48374833
msg "clang, test aarch64 crypto instructions not built"

0 commit comments

Comments
 (0)