From acfefabea4c5ff807657aebc8549ab28a038a75d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dan=20Hor=C3=A1k?= Date: Mon, 31 Jan 2022 09:40:40 +0000 Subject: [PATCH] Fix handling Float128 structs on ppc64le (#2045797) --- libffi-3.4.2-ppc.patch | 26 ++++++++++++++++++++++++++ libffi.spec | 8 +++++++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 libffi-3.4.2-ppc.patch diff --git a/libffi-3.4.2-ppc.patch b/libffi-3.4.2-ppc.patch new file mode 100644 index 0000000..13b739b --- /dev/null +++ b/libffi-3.4.2-ppc.patch @@ -0,0 +1,26 @@ +From 83ce80f3194bbf95c39764d075b070389c0f8522 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Dan=20Hor=C3=A1k?= +Date: Mon, 31 Jan 2022 09:21:53 +0000 +Subject: [PATCH] powerpc64: fix handling of homogeneous float128 structs + +If there is a homogeneous struct with float128 members, they should be +copied to vector register save area. The current code incorrectly copies +only the value of the first member, not increasing the pointer with each +iteration. Fix this. +--- + src/powerpc/ffi_linux64.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/powerpc/ffi_linux64.c b/src/powerpc/ffi_linux64.c +index 4d50878e4..3454dacd3 100644 +--- a/src/powerpc/ffi_linux64.c ++++ b/src/powerpc/ffi_linux64.c +@@ -680,7 +680,7 @@ ffi_prep_args64 (extended_cif *ecif, unsigned long *const stack) + { + if (vecarg_count < NUM_VEC_ARG_REGISTERS64 + && i < nfixedargs) +- memcpy (vec_base.f128++, arg.f128, sizeof (float128)); ++ memcpy (vec_base.f128++, arg.f128++, sizeof (float128)); + else + memcpy (next_arg.f128, arg.f128++, sizeof (float128)); + if (++next_arg.f128 == gpr_end.f128) diff --git a/libffi.spec b/libffi.spec index 0af9ef1..f576d8f 100644 --- a/libffi.spec +++ b/libffi.spec @@ -13,6 +13,9 @@ Source0: https://github.com/libffi/libffi/releases/download/v3.4.2/libffi-3.4.2. Source1: ffi-multilib.h Source2: ffitarget-multilib.h +# https://github.com/libffi/libffi/pull/689 +Patch0: libffi-3.4.2-ppc.patch + BuildRequires: make BuildRequires: gcc %if %{without bootstrap} @@ -57,7 +60,7 @@ The %{name}-devel package contains libraries and header files for developing applications that use %{name}. %prep -%setup -q +%autosetup -p1 %build # For now we disable the static templates to avoid ghc and @@ -113,6 +116,9 @@ install -m644 %{SOURCE2} $RPM_BUILD_ROOT%{_includedir}/ffitarget.h %{_infodir}/libffi.info.* %changelog +* Mon Jan 31 2022 Dan HorĂ¡k - 3.4.2-8 +- Fix handling Float128 structs on ppc64le (#2045797) + * Thu Jan 20 2022 Fedora Release Engineering - 3.4.2-7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild