Skip to content

Commit f6d4e03

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 d455bad commit f6d4e03

File tree

1 file changed

+49
-53
lines changed

1 file changed

+49
-53
lines changed

tests/scripts/components-platform.sh

Lines changed: 49 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -149,49 +149,53 @@ component_build_aes_armce () {
149149
scripts/config.py set MBEDTLS_AES_USE_HARDWARE_ONLY
150150

151151
msg "MBEDTLS_AES_USE_HARDWARE_ONLY, clang, aarch64"
152-
make -B library/aesce.o CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crypto"
152+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crypto"
153+
msg "clang, test aarch64 crypto instructions built"
154+
grep -E 'aes[a-z]+\s*[qv]' library/aesce.s
153155

154156
msg "MBEDTLS_AES_USE_HARDWARE_ONLY, clang, arm"
155-
make -B library/aesce.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
157+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
158+
msg "clang, test A32 crypto instructions built"
159+
grep -E 'aes[0-9a-z]+.[0-9]\s*[qv]' library/aesce.s
156160

157161
msg "MBEDTLS_AES_USE_HARDWARE_ONLY, clang, thumb"
158-
make -B library/aesce.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
162+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
163+
msg "clang, test T32 crypto instructions built"
164+
grep -E 'aes[0-9a-z]+.[0-9]\s*[qv]' library/aesce.s
159165

160166
scripts/config.py unset MBEDTLS_AES_USE_HARDWARE_ONLY
161167

162-
msg "no MBEDTLS_AES_USE_HARDWARE_ONLY, clang, aarch64"
163-
make -B library/aesce.o CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crypto"
164-
165-
msg "no MBEDTLS_AES_USE_HARDWARE_ONLY, clang, arm"
166-
make -B library/aesce.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
167-
168-
msg "no MBEDTLS_AES_USE_HARDWARE_ONLY, clang, thumb"
169-
make -B library/aesce.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
168+
msg "MBEDTLS_AES_USE_both, clang, aarch64"
169+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crypto"
170+
msg "clang, test aarch64 crypto instructions built"
171+
grep -E 'aes[a-z]+\s*[qv]' library/aesce.s
170172

171-
# test for presence of AES instructions
172-
scripts/config.py set MBEDTLS_AES_USE_HARDWARE_ONLY
173+
msg "MBEDTLS_AES_USE_both, clang, arm"
174+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
173175
msg "clang, test A32 crypto instructions built"
174-
make -B library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
175176
grep -E 'aes[0-9a-z]+.[0-9]\s*[qv]' library/aesce.s
177+
178+
msg "MBEDTLS_AES_USE_both, clang, thumb"
179+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
176180
msg "clang, test T32 crypto instructions built"
177-
make -B library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
178181
grep -E 'aes[0-9a-z]+.[0-9]\s*[qv]' library/aesce.s
179-
msg "clang, test aarch64 crypto instructions built"
180-
make -B library/aesce.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a"
181-
grep -E 'aes[a-z]+\s*[qv]' library/aesce.s
182182

183-
# test for absence of AES instructions
184-
scripts/config.py unset MBEDTLS_AES_USE_HARDWARE_ONLY
185183
scripts/config.py unset MBEDTLS_AESCE_C
184+
185+
msg "no MBEDTLS_AESCE_C, clang, aarch64"
186+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a"
187+
msg "clang, test aarch64 crypto instructions not built"
188+
not grep -E 'aes[a-z]+\s*[qv]' library/aesce.s
189+
190+
msg "no MBEDTLS_AESCE_C, clang, arm"
191+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72 -marm"
186192
msg "clang, test A32 crypto instructions not built"
187-
make -B library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
188193
not grep -E 'aes[0-9a-z]+.[0-9]\s*[qv]' library/aesce.s
194+
195+
msg "no MBEDTLS_AESCE_C, clang, thumb"
196+
make -B library/aesce.o library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32 -mthumb"
189197
msg "clang, test T32 crypto instructions not built"
190-
make -B library/aesce.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
191198
not grep -E 'aes[0-9a-z]+.[0-9]\s*[qv]' library/aesce.s
192-
msg "clang, test aarch64 crypto instructions not built"
193-
make -B library/aesce.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a"
194-
not grep -E 'aes[a-z]+\s*[qv]' library/aesce.s
195199
}
196200

197201
support_build_sha_armce () {
@@ -202,62 +206,54 @@ support_build_sha_armce () {
202206
component_build_sha_armce () {
203207
scripts/config.py unset MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_IF_PRESENT
204208

205-
206209
# Test variations of SHA256 Armv8 crypto extensions
207210
scripts/config.py set MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY
208211
msg "MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY clang, aarch64"
209-
make -B library/sha256.o CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a"
212+
make -B library/sha256.o library/sha256.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crypto"
213+
msg "MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY clang, test aarch64 crypto instructions built"
214+
grep -E 'sha256[a-z0-9]+\s+[qv]' library/sha256.s
215+
210216
msg "MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY clang, arm"
211-
make -B library/sha256.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
217+
make -B library/sha256.o library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
218+
msg "MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY clang, test A32 crypto instructions built"
219+
grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
212220
scripts/config.py unset MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY
213221

214222

215223
# test the deprecated form of the config option
216224
scripts/config.py set MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY
217225
msg "MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY clang, thumb"
218-
make -B library/sha256.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
226+
make -B library/sha256.o library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
227+
msg "MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY clang, test T32 crypto instructions built"
228+
grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
219229
scripts/config.py unset MBEDTLS_SHA256_USE_A64_CRYPTO_ONLY
220230

221231
scripts/config.py set MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_IF_PRESENT
222232
msg "MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_IF_PRESENT clang, aarch64"
223-
make -B library/sha256.o CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a"
233+
make -B library/sha256.o library/sha256.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a+crypto"
234+
msg "MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_IF_PRESENT clang, test aarch64 crypto instructions built"
235+
grep -E 'sha256[a-z0-9]+\s+[qv]' library/sha256.s
224236
scripts/config.py unset MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_IF_PRESENT
225237

226238

227239
# test the deprecated form of the config option
228240
scripts/config.py set MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT
229241
msg "MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT clang, arm"
230-
make -B library/sha256.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm -std=c99"
242+
make -B library/sha256.o library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm -std=c99"
243+
231244
msg "MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT clang, thumb"
232-
make -B library/sha256.o CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
245+
make -B library/sha256.o library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
246+
msg "MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT clang, test T32 crypto instructions built"
247+
grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
233248
scripts/config.py unset MBEDTLS_SHA256_USE_A64_CRYPTO_IF_PRESENT
234249

235-
236-
# examine the disassembly for presence of SHA instructions
237-
for opt in MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_ONLY MBEDTLS_SHA256_USE_ARMV8_A_CRYPTO_IF_PRESENT; do
238-
scripts/config.py set ${opt}
239-
msg "${opt} clang, test A32 crypto instructions built"
240-
make -B library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
241-
grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
242-
243-
msg "${opt} clang, test T32 crypto instructions built"
244-
make -B library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
245-
grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
246-
247-
msg "${opt} clang, test aarch64 crypto instructions built"
248-
make -B library/sha256.s CC=clang CFLAGS="--target=aarch64-linux-gnu -march=armv8-a"
249-
grep -E 'sha256[a-z0-9]+\s+[qv]' library/sha256.s
250-
scripts/config.py unset ${opt}
251-
done
252-
253-
254250
# examine the disassembly for absence of SHA instructions
255251
msg "clang, test A32 crypto instructions not built"
256-
make -B library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72+crypto -marm"
252+
make -B library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a72 -marm"
257253
not grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
258254

259255
msg "clang, test T32 crypto instructions not built"
260-
make -B library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32+crypto -mthumb"
256+
make -B library/sha256.s CC=clang CFLAGS="--target=arm-linux-gnueabihf -mcpu=cortex-a32 -mthumb"
261257
not grep -E 'sha256[a-z0-9]+.32\s+[qv]' library/sha256.s
262258

263259
msg "clang, test aarch64 crypto instructions not built"

0 commit comments

Comments
 (0)