Skip to content

Commit 7610b4e

Browse files
authored
Merge pull request #8893 from SparkiDev/asm_omit_frame_pointer
ARM32/Thumb2/RISC-V 64 ASM: omit frame pointer
2 parents 96a3591 + dc70cfa commit 7610b4e

21 files changed

+2378
-1896
lines changed

configure.ac

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3368,7 +3368,7 @@ then
33683368
armv7m*)
33693369
# QEMU doesn't work with armv7-m
33703370
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_ARMASM_THUMB2"
3371-
AM_CPPFLAGS="$AM_CPPFLAGS -march=armv7-r -DWOLFSSL_ARMASM_THUMB2 -fomit-frame-pointer -DWOLFSSL_ARMASM_NO_HW_CRYPTO -DWOLFSSL_ARM_ARCH=7"
3371+
AM_CPPFLAGS="$AM_CPPFLAGS -march=armv7-r -DWOLFSSL_ARMASM_THUMB2 -DWOLFSSL_ARMASM_NO_HW_CRYPTO -DWOLFSSL_ARM_ARCH=7"
33723372
# Include options.h
33733373
AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN"
33743374
ENABLED_ARMASM_CRYPTO=no
@@ -3386,15 +3386,15 @@ then
33863386
fi
33873387
;;
33883388
armv6*)
3389-
AM_CPPFLAGS="$AM_CPPFLAGS -march=armv6 -fomit-frame-pointer -DWOLFSSL_ARMASM_NO_HW_CRYPTO -DWOLFSSL_ARM_ARCH=6"
3389+
AM_CPPFLAGS="$AM_CPPFLAGS -march=armv6 -DWOLFSSL_ARMASM_NO_HW_CRYPTO -DWOLFSSL_ARM_ARCH=6"
33903390
AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN"
33913391
ENABLED_ARMASM_CRYPTO=no
33923392
ENABLED_ARMASM_NEON=no
33933393
ENABLED_ARM_32=yes
33943394
AC_MSG_NOTICE([32bit ARMv6 found])
33953395
;;
33963396
armv4*)
3397-
AM_CPPFLAGS="$AM_CPPFLAGS -march=armv4 -fomit-frame-pointer -DWOLFSSL_ARMASM_NO_HW_CRYPTO -DWOLFSSL_ARM_ARCH=4"
3397+
AM_CPPFLAGS="$AM_CPPFLAGS -march=armv4 -DWOLFSSL_ARMASM_NO_HW_CRYPTO -DWOLFSSL_ARM_ARCH=4"
33983398
AM_CCASFLAGS="$AM_CCASFLAGS -DEXTERNAL_OPTS_OPENVPN"
33993399
ENABLED_ARMASM_CRYPTO=no
34003400
ENABLED_ARMASM_NEON=no

wolfcrypt/src/port/arm/armv8-32-aes-asm_c.c

Lines changed: 53 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
#define __volatile__
4949
#define WOLFSSL_NO_VAR_ASSIGN_REG
5050
#endif /* __ghs__ */
51+
5152
#ifndef NO_AES
5253
#include <wolfssl/wolfcrypt/aes.h>
5354

@@ -204,9 +205,9 @@ static const word32* L_AES_ARM32_te = L_AES_ARM32_te_data;
204205
#ifdef HAVE_AES_DECRYPT
205206
void AES_invert_key(unsigned char* ks_p, word32 rounds_p);
206207
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
207-
void AES_invert_key(unsigned char* ks_p, word32 rounds_p)
208+
WC_OMIT_FRAME_POINTER void AES_invert_key(unsigned char* ks_p, word32 rounds_p)
208209
#else
209-
void AES_invert_key(unsigned char* ks, word32 rounds)
210+
WC_OMIT_FRAME_POINTER void AES_invert_key(unsigned char* ks, word32 rounds)
210211
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
211212
{
212213
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -441,11 +442,11 @@ static const word32 L_AES_ARM32_rcon[] = {
441442
void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p,
442443
unsigned char* ks_p);
443444
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
444-
void AES_set_encrypt_key(const unsigned char* key_p, word32 len_p,
445-
unsigned char* ks_p)
445+
WC_OMIT_FRAME_POINTER void AES_set_encrypt_key(const unsigned char* key_p,
446+
word32 len_p, unsigned char* ks_p)
446447
#else
447-
void AES_set_encrypt_key(const unsigned char* key, word32 len,
448-
unsigned char* ks)
448+
WC_OMIT_FRAME_POINTER void AES_set_encrypt_key(const unsigned char* key,
449+
word32 len, unsigned char* ks)
449450
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
450451
{
451452
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -976,10 +977,11 @@ void AES_set_encrypt_key(const unsigned char* key, word32 len,
976977
void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
977978
const word32* ks_p);
978979
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
979-
void AES_encrypt_block(const word32* te_p, int nr_p, int len_p,
980-
const word32* ks_p)
980+
WC_OMIT_FRAME_POINTER void AES_encrypt_block(const word32* te_p, int nr_p,
981+
int len_p, const word32* ks_p)
981982
#else
982-
void AES_encrypt_block(const word32* te, int nr, int len, const word32* ks)
983+
WC_OMIT_FRAME_POINTER void AES_encrypt_block(const word32* te, int nr, int len,
984+
const word32* ks)
983985
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
984986
{
985987
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -1643,11 +1645,12 @@ static const word32* L_AES_ARM32_te_ecb = L_AES_ARM32_te_data;
16431645
void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p,
16441646
unsigned long len_p, const unsigned char* ks_p, int nr_p);
16451647
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1646-
void AES_ECB_encrypt(const unsigned char* in_p, unsigned char* out_p,
1647-
unsigned long len_p, const unsigned char* ks_p, int nr_p)
1648+
WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in_p,
1649+
unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
1650+
int nr_p)
16481651
#else
1649-
void AES_ECB_encrypt(const unsigned char* in, unsigned char* out,
1650-
unsigned long len, const unsigned char* ks, int nr)
1652+
WC_OMIT_FRAME_POINTER void AES_ECB_encrypt(const unsigned char* in,
1653+
unsigned char* out, unsigned long len, const unsigned char* ks, int nr)
16511654
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
16521655
{
16531656
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -1919,12 +1922,13 @@ void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
19191922
unsigned long len_p, const unsigned char* ks_p, int nr_p,
19201923
unsigned char* iv_p);
19211924
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
1922-
void AES_CBC_encrypt(const unsigned char* in_p, unsigned char* out_p,
1923-
unsigned long len_p, const unsigned char* ks_p, int nr_p,
1924-
unsigned char* iv_p)
1925+
WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in_p,
1926+
unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
1927+
int nr_p, unsigned char* iv_p)
19251928
#else
1926-
void AES_CBC_encrypt(const unsigned char* in, unsigned char* out,
1927-
unsigned long len, const unsigned char* ks, int nr, unsigned char* iv)
1929+
WC_OMIT_FRAME_POINTER void AES_CBC_encrypt(const unsigned char* in,
1930+
unsigned char* out, unsigned long len, const unsigned char* ks, int nr,
1931+
unsigned char* iv)
19281932
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
19291933
{
19301934
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -2217,12 +2221,13 @@ void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
22172221
unsigned long len_p, const unsigned char* ks_p, int nr_p,
22182222
unsigned char* ctr_p);
22192223
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
2220-
void AES_CTR_encrypt(const unsigned char* in_p, unsigned char* out_p,
2221-
unsigned long len_p, const unsigned char* ks_p, int nr_p,
2222-
unsigned char* ctr_p)
2224+
WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in_p,
2225+
unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
2226+
int nr_p, unsigned char* ctr_p)
22232227
#else
2224-
void AES_CTR_encrypt(const unsigned char* in, unsigned char* out,
2225-
unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr)
2228+
WC_OMIT_FRAME_POINTER void AES_CTR_encrypt(const unsigned char* in,
2229+
unsigned char* out, unsigned long len, const unsigned char* ks, int nr,
2230+
unsigned char* ctr)
22262231
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
22272232
{
22282233
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -2516,9 +2521,11 @@ void AES_CTR_encrypt(const unsigned char* in, unsigned char* out,
25162521
defined(HAVE_AES_CBC)
25172522
void AES_decrypt_block(const word32* td_p, int nr_p, const byte* td4_p);
25182523
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
2519-
void AES_decrypt_block(const word32* td_p, int nr_p, const byte* td4_p)
2524+
WC_OMIT_FRAME_POINTER void AES_decrypt_block(const word32* td_p, int nr_p,
2525+
const byte* td4_p)
25202526
#else
2521-
void AES_decrypt_block(const word32* td, int nr, const byte* td4)
2527+
WC_OMIT_FRAME_POINTER void AES_decrypt_block(const word32* td, int nr,
2528+
const byte* td4)
25222529
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
25232530
{
25242531
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -3215,11 +3222,12 @@ static const byte L_AES_ARM32_td4[] = {
32153222
void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
32163223
unsigned long len_p, const unsigned char* ks_p, int nr_p);
32173224
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
3218-
void AES_ECB_decrypt(const unsigned char* in_p, unsigned char* out_p,
3219-
unsigned long len_p, const unsigned char* ks_p, int nr_p)
3225+
WC_OMIT_FRAME_POINTER void AES_ECB_decrypt(const unsigned char* in_p,
3226+
unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
3227+
int nr_p)
32203228
#else
3221-
void AES_ECB_decrypt(const unsigned char* in, unsigned char* out,
3222-
unsigned long len, const unsigned char* ks, int nr)
3229+
WC_OMIT_FRAME_POINTER void AES_ECB_decrypt(const unsigned char* in,
3230+
unsigned char* out, unsigned long len, const unsigned char* ks, int nr)
32233231
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
32243232
{
32253233
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -3491,12 +3499,13 @@ void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
34913499
unsigned long len_p, const unsigned char* ks_p, int nr_p,
34923500
unsigned char* iv_p);
34933501
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
3494-
void AES_CBC_decrypt(const unsigned char* in_p, unsigned char* out_p,
3495-
unsigned long len_p, const unsigned char* ks_p, int nr_p,
3496-
unsigned char* iv_p)
3502+
WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in_p,
3503+
unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
3504+
int nr_p, unsigned char* iv_p)
34973505
#else
3498-
void AES_CBC_decrypt(const unsigned char* in, unsigned char* out,
3499-
unsigned long len, const unsigned char* ks, int nr, unsigned char* iv)
3506+
WC_OMIT_FRAME_POINTER void AES_CBC_decrypt(const unsigned char* in,
3507+
unsigned char* out, unsigned long len, const unsigned char* ks, int nr,
3508+
unsigned char* iv)
35003509
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
35013510
{
35023511
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -4163,11 +4172,11 @@ static const word32 L_GCM_gmult_len_r[] = {
41634172
void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p,
41644173
const unsigned char* data_p, unsigned long len_p);
41654174
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
4166-
void GCM_gmult_len(unsigned char* x_p, const unsigned char** m_p,
4167-
const unsigned char* data_p, unsigned long len_p)
4175+
WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x_p,
4176+
const unsigned char** m_p, const unsigned char* data_p, unsigned long len_p)
41684177
#else
4169-
void GCM_gmult_len(unsigned char* x, const unsigned char** m,
4170-
const unsigned char* data, unsigned long len)
4178+
WC_OMIT_FRAME_POINTER void GCM_gmult_len(unsigned char* x,
4179+
const unsigned char** m, const unsigned char* data, unsigned long len)
41714180
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
41724181
{
41734182
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -4774,12 +4783,13 @@ void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
47744783
unsigned long len_p, const unsigned char* ks_p, int nr_p,
47754784
unsigned char* ctr_p);
47764785
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
4777-
void AES_GCM_encrypt(const unsigned char* in_p, unsigned char* out_p,
4778-
unsigned long len_p, const unsigned char* ks_p, int nr_p,
4779-
unsigned char* ctr_p)
4786+
WC_OMIT_FRAME_POINTER void AES_GCM_encrypt(const unsigned char* in_p,
4787+
unsigned char* out_p, unsigned long len_p, const unsigned char* ks_p,
4788+
int nr_p, unsigned char* ctr_p)
47804789
#else
4781-
void AES_GCM_encrypt(const unsigned char* in, unsigned char* out,
4782-
unsigned long len, const unsigned char* ks, int nr, unsigned char* ctr)
4790+
WC_OMIT_FRAME_POINTER void AES_GCM_encrypt(const unsigned char* in,
4791+
unsigned char* out, unsigned long len, const unsigned char* ks, int nr,
4792+
unsigned char* ctr)
47834793
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
47844794
{
47854795
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG

wolfcrypt/src/port/arm/armv8-32-chacha-asm_c.c

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,16 @@
4848
#define __volatile__
4949
#define WOLFSSL_NO_VAR_ASSIGN_REG
5050
#endif /* __ghs__ */
51+
5152
#ifdef HAVE_CHACHA
5253
#include <wolfssl/wolfcrypt/chacha.h>
5354

5455
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
55-
void wc_chacha_setiv(word32* x_p, const byte* iv_p, word32 counter_p)
56+
WC_OMIT_FRAME_POINTER void wc_chacha_setiv(word32* x_p, const byte* iv_p,
57+
word32 counter_p)
5658
#else
57-
void wc_chacha_setiv(word32* x, const byte* iv, word32 counter)
59+
WC_OMIT_FRAME_POINTER void wc_chacha_setiv(word32* x, const byte* iv,
60+
word32 counter)
5861
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
5962
{
6063
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -92,9 +95,11 @@ static const word32 L_chacha_arm32_constants[] = {
9295
};
9396

9497
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
95-
void wc_chacha_setkey(word32* x_p, const byte* key_p, word32 keySz_p)
98+
WC_OMIT_FRAME_POINTER void wc_chacha_setkey(word32* x_p, const byte* key_p,
99+
word32 keySz_p)
96100
#else
97-
void wc_chacha_setkey(word32* x, const byte* key, word32 keySz)
101+
WC_OMIT_FRAME_POINTER void wc_chacha_setkey(word32* x, const byte* key,
102+
word32 keySz)
98103
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
99104
{
100105
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -154,10 +159,11 @@ void wc_chacha_setkey(word32* x, const byte* key, word32 keySz)
154159

155160
#ifdef WOLFSSL_ARMASM_NO_NEON
156161
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
157-
void wc_chacha_crypt_bytes(ChaCha* ctx_p, byte* c_p, const byte* m_p,
158-
word32 len_p)
162+
WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx_p, byte* c_p,
163+
const byte* m_p, word32 len_p)
159164
#else
160-
void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
165+
WC_OMIT_FRAME_POINTER void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c,
166+
const byte* m, word32 len)
161167
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
162168
{
163169
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
@@ -529,10 +535,11 @@ void wc_chacha_crypt_bytes(ChaCha* ctx, byte* c, const byte* m, word32 len)
529535
}
530536

531537
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG
532-
void wc_chacha_use_over(byte* over_p, byte* output_p, const byte* input_p,
533-
word32 len_p)
538+
WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over_p, byte* output_p,
539+
const byte* input_p, word32 len_p)
534540
#else
535-
void wc_chacha_use_over(byte* over, byte* output, const byte* input, word32 len)
541+
WC_OMIT_FRAME_POINTER void wc_chacha_use_over(byte* over, byte* output,
542+
const byte* input, word32 len)
536543
#endif /* WOLFSSL_NO_VAR_ASSIGN_REG */
537544
{
538545
#ifndef WOLFSSL_NO_VAR_ASSIGN_REG

0 commit comments

Comments
 (0)