From 64c2a15099d94f0be29c9c6d5e60e15f8d04948a Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sat, 16 Aug 2025 22:53:31 -0700 Subject: [PATCH] perl: Disable builtin memcpy & string inlines with gcc/x86-64-v3 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 Signed-off-by: Mathieu Dubois-Briand --- meta/recipes-devtools/perl/perl_5.40.2.bb | 3 +++ 1 file changed, 3 insertions(+) diff --git a/meta/recipes-devtools/perl/perl_5.40.2.bb b/meta/recipes-devtools/perl/perl_5.40.2.bb index 1df1467d42..a78d2ed0be 100644 --- a/meta/recipes-devtools/perl/perl_5.40.2.bb +++ b/meta/recipes-devtools/perl/perl_5.40.2.bb @@ -54,6 +54,9 @@ CFLAGS += "-D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" # 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} -- 2.47.2