61 lines
1.8 KiB
Diff
61 lines
1.8 KiB
Diff
commit 0cd10047bf046a658f32e12833ccc42304b3b152
|
|
Author: Wilco Dijkstra <wilco.dijkstra@arm.com>
|
|
Date: Mon Nov 25 18:43:08 2024 +0000
|
|
|
|
AArch64: Remove zva_128 from memset
|
|
|
|
Remove ZVA 128 support from memset - the new memset no longer
|
|
guarantees count >= 256, which can result in underflow and a
|
|
crash if ZVA size is 128 ([1]). Since only one CPU uses a ZVA
|
|
size of 128 and its memcpy implementation was removed in commit
|
|
e162ab2bf1b82c40f29e1925986582fa07568ce8, remove this special
|
|
case too.
|
|
|
|
[1] https://sourceware.org/pipermail/libc-alpha/2024-November/161626.html
|
|
|
|
Reviewed-by: Andrew Pinski <quic_apinski@quicinc.com>
|
|
(cherry picked from commit a08d9a52f967531a77e1824c23b5368c6434a72d)
|
|
|
|
diff --git a/sysdeps/aarch64/memset.S b/sysdeps/aarch64/memset.S
|
|
index caafb019e2b6217b..71814d0b2f6dd3a7 100644
|
|
--- a/sysdeps/aarch64/memset.S
|
|
+++ b/sysdeps/aarch64/memset.S
|
|
@@ -104,7 +104,7 @@ L(set_long):
|
|
mrs zva_val, dczid_el0
|
|
and zva_val, zva_val, 31
|
|
cmp zva_val, 4 /* ZVA size is 64 bytes. */
|
|
- b.ne L(zva_128)
|
|
+ b.ne L(no_zva)
|
|
#endif
|
|
stp q0, q0, [dst, 32]
|
|
bic dst, dstin, 63
|
|
@@ -137,28 +137,5 @@ L(no_zva_loop):
|
|
stp q0, q0, [dstend, -32]
|
|
ret
|
|
|
|
-#ifndef ZVA64_ONLY
|
|
- .p2align 4
|
|
-L(zva_128):
|
|
- cmp zva_val, 5 /* ZVA size is 128 bytes. */
|
|
- b.ne L(no_zva)
|
|
-
|
|
- stp q0, q0, [dst, 32]
|
|
- stp q0, q0, [dst, 64]
|
|
- stp q0, q0, [dst, 96]
|
|
- bic dst, dst, 127
|
|
- sub count, dstend, dst /* Count is now 128 too large. */
|
|
- sub count, count, 128 + 128 /* Adjust count and bias for loop. */
|
|
-1: add dst, dst, 128
|
|
- dc zva, dst
|
|
- subs count, count, 128
|
|
- b.hi 1b
|
|
- stp q0, q0, [dstend, -128]
|
|
- stp q0, q0, [dstend, -96]
|
|
- stp q0, q0, [dstend, -64]
|
|
- stp q0, q0, [dstend, -32]
|
|
- ret
|
|
-#endif
|
|
-
|
|
END (MEMSET)
|
|
libc_hidden_builtin_def (MEMSET)
|