[PATCH 3/4] aria-x86_64: fixes for CFI markings

Jussi Kivilinna jussi.kivilinna at iki.fi
Sun Dec 21 11:58:48 CET 2025


* cipher/aria-aesni-avx-amd64.S: Add missing CFI stack adjustments
after pushq/popq.
* cipher/aria-aesni-avx2-amd64.S: Likewise.
* cipher/aria-gfni-avx512-amd64.S: Likewise.
--

Signed-off-by: Jussi Kivilinna <jussi.kivilinna at iki.fi>
---
 cipher/aria-aesni-avx-amd64.S   | 10 ++++++++++
 cipher/aria-aesni-avx2-amd64.S  |  8 ++++++++
 cipher/aria-gfni-avx512-amd64.S |  2 ++
 3 files changed, 20 insertions(+)

diff --git a/cipher/aria-aesni-avx-amd64.S b/cipher/aria-aesni-avx-amd64.S
index 2a88c1e7..29597488 100644
--- a/cipher/aria-aesni-avx-amd64.S
+++ b/cipher/aria-aesni-avx-amd64.S
@@ -1057,6 +1057,7 @@ _gcry_aria_aesni_avx_ecb_crypt_blk1_16:
 
 .Lecb_less_than_16:
 	pushq %r8;
+	CFI_ADJUST_CFA_OFFSET(8);
 	inpack_1_15_pre(%xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7,
 			%xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14,
 			%xmm15, %rdx, %r8d);
@@ -1064,6 +1065,7 @@ _gcry_aria_aesni_avx_ecb_crypt_blk1_16:
 	call __aria_aesni_avx_crypt_16way;
 
 	popq %rax;
+	CFI_ADJUST_CFA_OFFSET(-8);
 	write_output_1_15(%xmm1, %xmm0, %xmm3, %xmm2, %xmm4, %xmm5, %xmm6,
 			  %xmm7, %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13,
 			  %xmm14, %xmm15, %r11, %eax);
@@ -1156,6 +1158,7 @@ __aria_aesni_avx_ctr_gen_keystream_16way:
 .Lctr_byteadd_full_ctr_carry:
 	addb $16, 15(%r8);
 	pushq %rcx;
+	CFI_ADJUST_CFA_OFFSET(8);
 	movl $14, %ecx;
 	1:
 	  adcb $0, (%r8, %rcx);
@@ -1163,6 +1166,7 @@ __aria_aesni_avx_ctr_gen_keystream_16way:
 	  loop 1b;
 	2:
 	popq %rcx;
+	CFI_ADJUST_CFA_OFFSET(-8);
 	jmp .Lctr_byteadd_xmm;
 .align 8
 .Lctr_byteadd:
@@ -1215,6 +1219,7 @@ _gcry_aria_aesni_avx_ctr_crypt_blk16:
 	call __aria_aesni_avx_ctr_gen_keystream_16way;
 
 	pushq %rsi;
+	CFI_ADJUST_CFA_OFFSET(8);
 	movq %rdx, %r11;
 	movq %rcx, %rsi; /* use stack for temporary store */
 	movq %rcx, %rdx;
@@ -1223,6 +1228,7 @@ _gcry_aria_aesni_avx_ctr_crypt_blk16:
 	call __aria_aesni_avx_crypt_16way;
 
 	popq %rsi;
+	CFI_ADJUST_CFA_OFFSET(-8);
 	vpxor (0 * 16)(%r11), %xmm1, %xmm1;
 	vpxor (1 * 16)(%r11), %xmm0, %xmm0;
 	vpxor (2 * 16)(%r11), %xmm3, %xmm3;
@@ -1358,6 +1364,7 @@ _gcry_aria_gfni_avx_ecb_crypt_blk1_16:
 
 .Lecb_less_than_16_gfni:
 	pushq %r8;
+	CFI_ADJUST_CFA_OFFSET(8);
 	inpack_1_15_pre(%xmm0, %xmm1, %xmm2, %xmm3, %xmm4, %xmm5, %xmm6, %xmm7,
 			%xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13, %xmm14,
 			%xmm15, %rdx, %r8d);
@@ -1365,6 +1372,7 @@ _gcry_aria_gfni_avx_ecb_crypt_blk1_16:
 	call __aria_gfni_avx_crypt_16way;
 
 	popq %rax;
+	CFI_ADJUST_CFA_OFFSET(-8);
 	write_output_1_15(%xmm1, %xmm0, %xmm3, %xmm2, %xmm4, %xmm5, %xmm6,
 			  %xmm7, %xmm8, %xmm9, %xmm10, %xmm11, %xmm12, %xmm13,
 			  %xmm14, %xmm15, %r11, %eax);
@@ -1399,6 +1407,7 @@ _gcry_aria_gfni_avx_ctr_crypt_blk16:
 	call __aria_aesni_avx_ctr_gen_keystream_16way
 
 	pushq %rsi;
+	CFI_ADJUST_CFA_OFFSET(8);
 	movq %rdx, %r11;
 	movq %rcx, %rsi; /* use stack for temporary store */
 	movq %rcx, %rdx;
@@ -1407,6 +1416,7 @@ _gcry_aria_gfni_avx_ctr_crypt_blk16:
 	call __aria_gfni_avx_crypt_16way;
 
 	popq %rsi;
+	CFI_ADJUST_CFA_OFFSET(-8);
 	vpxor (0 * 16)(%r11), %xmm1, %xmm1;
 	vpxor (1 * 16)(%r11), %xmm0, %xmm0;
 	vpxor (2 * 16)(%r11), %xmm3, %xmm3;
diff --git a/cipher/aria-aesni-avx2-amd64.S b/cipher/aria-aesni-avx2-amd64.S
index d33fa54b..08bf5a0e 100644
--- a/cipher/aria-aesni-avx2-amd64.S
+++ b/cipher/aria-aesni-avx2-amd64.S
@@ -1395,6 +1395,7 @@ __aria_aesni_avx2_ctr_gen_keystream_32way:
 .Lctr_byteadd_full_ctr_carry:
 	addb $32, 15(%r8);
 	pushq %rcx;
+	CFI_ADJUST_CFA_OFFSET(8);
 	movl $14, %ecx;
 	1:
 	  adcb $0, (%r8, %rcx);
@@ -1402,6 +1403,7 @@ __aria_aesni_avx2_ctr_gen_keystream_32way:
 	  loop 1b;
 	2:
 	popq %rcx;
+	CFI_ADJUST_CFA_OFFSET(-8);
 	jmp .Lctr_byteadd_ymm;
 .align 8
 .Lctr_byteadd:
@@ -1457,6 +1459,7 @@ _gcry_aria_aesni_avx2_ctr_crypt_blk32:
 	call __aria_aesni_avx2_ctr_gen_keystream_32way;
 
 	pushq %rsi;
+	CFI_ADJUST_CFA_OFFSET(8);
 	movq %rdx, %r11;
 	movq %rcx, %rsi; /* use stack for temporary store */
 	movq %rcx, %rdx;
@@ -1465,6 +1468,7 @@ _gcry_aria_aesni_avx2_ctr_crypt_blk32:
 	call __aria_aesni_avx2_crypt_32way;
 
 	popq %rsi;
+	CFI_ADJUST_CFA_OFFSET(-8);
 	vpxor (0 * 32)(%r11), %ymm1, %ymm1;
 	vpxor (1 * 32)(%r11), %ymm0, %ymm0;
 	vpxor (2 * 32)(%r11), %ymm3, %ymm3;
@@ -1622,6 +1626,7 @@ _gcry_aria_vaes_avx2_ctr_crypt_blk32:
 	call __aria_aesni_avx2_ctr_gen_keystream_32way;
 
 	pushq %rsi;
+	CFI_ADJUST_CFA_OFFSET(8);
 	movq %rdx, %r11;
 	movq %rcx, %rsi; /* use stack for temporary store */
 	movq %rcx, %rdx;
@@ -1630,6 +1635,7 @@ _gcry_aria_vaes_avx2_ctr_crypt_blk32:
 	call __aria_vaes_avx2_crypt_32way;
 
 	popq %rsi;
+	CFI_ADJUST_CFA_OFFSET(-8);
 	vpxor (0 * 32)(%r11), %ymm1, %ymm1;
 	vpxor (1 * 32)(%r11), %ymm0, %ymm0;
 	vpxor (2 * 32)(%r11), %ymm3, %ymm3;
@@ -1788,6 +1794,7 @@ _gcry_aria_gfni_avx2_ctr_crypt_blk32:
 	call __aria_aesni_avx2_ctr_gen_keystream_32way;
 
 	pushq %rsi;
+	CFI_ADJUST_CFA_OFFSET(8);
 	movq %rdx, %r11;
 	movq %rcx, %rsi; /* use stack for temporary store */
 	movq %rcx, %rdx;
@@ -1796,6 +1803,7 @@ _gcry_aria_gfni_avx2_ctr_crypt_blk32:
 	call __aria_gfni_avx2_crypt_32way;
 
 	popq %rsi;
+	CFI_ADJUST_CFA_OFFSET(-8);
 	vpxor (0 * 32)(%r11), %ymm1, %ymm1;
 	vpxor (1 * 32)(%r11), %ymm0, %ymm0;
 	vpxor (2 * 32)(%r11), %ymm3, %ymm3;
diff --git a/cipher/aria-gfni-avx512-amd64.S b/cipher/aria-gfni-avx512-amd64.S
index 0eaa2de8..a497b395 100644
--- a/cipher/aria-gfni-avx512-amd64.S
+++ b/cipher/aria-gfni-avx512-amd64.S
@@ -969,6 +969,7 @@ _gcry_aria_gfni_avx512_ctr_crypt_blk64:
 	call __aria_gfni_avx512_ctr_gen_keystream_64way
 
 	pushq %rsi;
+	CFI_ADJUST_CFA_OFFSET(8);
 	movq %rdx, %r11;
 	movq %rcx, %rsi;
 	movq %rcx, %rdx;
@@ -977,6 +978,7 @@ _gcry_aria_gfni_avx512_ctr_crypt_blk64:
 	call __aria_gfni_avx512_crypt_64way;
 
 	popq %rsi;
+	CFI_ADJUST_CFA_OFFSET(-8);
 	vpxorq (0 * 64)(%r11), %zmm3, %zmm3;
 	vpxorq (1 * 64)(%r11), %zmm2, %zmm2;
 	vpxorq (2 * 64)(%r11), %zmm1, %zmm1;
-- 
2.51.0




More information about the Gcrypt-devel mailing list