PERL built with GCC 15 and -march=x86-64-v3 fails several
op/pack.t cases due to aggressive lowering of __builtin_memcpy
and inlined/fortified string ops. In pp_pack, some in-place copies
can overlap, treating memcpy as non-overlapping yields corrupted
bytes (zeros or wrong prefixes).
The issue does not reproduce with -march=core2.
When using x86-64-v3 memcpy gets emitted very aggressively
(vectorized / reordered) and assumes no overlap.
The flags force calls through libc (overlap-safe behavior),
restoring deterministic pack/unpack and fixing the test failures.
Inline functions could be faster in execution but correctness is
more important
Fixes [YOCTO #15950]
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
# https://github.com/llvm/llvm-project/issues/152241
CFLAGS:append:toolchain-clang = " -fno-strict-aliasing"
+# Needed with -march=x86-64-v3
+CFLAGS:append:toolchain-gcc:class-target:x86-64 = " -fno-builtin-memcpy -D__NO_STRING_INLINES -U_FORTIFY_SOURCE"
+
do_configure:prepend() {
rm -rf ${B}
cp -rfp ${S} ${B}