diff --git a/backport-Fix-floating-point-compare.patch b/backport-Fix-floating-point-compare.patch new file mode 100644 index 0000000000000000000000000000000000000000..a06fd2a83290f251b7b7e549d12e09ff38600753 --- /dev/null +++ b/backport-Fix-floating-point-compare.patch @@ -0,0 +1,44 @@ +From 92d384df196a099fde384f9178864dbfe8c6b0fc Mon Sep 17 00:00:00 2001 +From: Anthony Green +Date: Sun, 15 Sep 2024 12:32:29 -0400 +Subject: [PATCH] Fix floating point compare + +Conflict:NA +Reference:https://github.com/libffi/libffi/commit/92d384df196a099fde384f9178864dbfe8c6b0fc +--- + testsuite/libffi.call/struct_int_float.c | 12 ++++++------ + 1 file changed, 6 insertions(+), 6 deletions(-) + +diff --git a/testsuite/libffi.call/struct_int_float.c b/testsuite/libffi.call/struct_int_float.c +index 079634e..13fef64 100644 +--- a/testsuite/libffi.call/struct_int_float.c ++++ b/testsuite/libffi.call/struct_int_float.c +@@ -16,11 +16,11 @@ typedef struct + } test_structure_int_float; + + static float ABI_ATTR struct_int_float(test_structure_int_float ts1, +- test_structure_int_float ts2, +- test_structure_int_float ts3, +- test_structure_int_float ts4, +- test_structure_int_float ts5, +- test_structure_int_float ts6) ++ test_structure_int_float ts2 __UNUSED__, ++ test_structure_int_float ts3 __UNUSED__, ++ test_structure_int_float ts4 __UNUSED__, ++ test_structure_int_float ts5 __UNUSED__, ++ test_structure_int_float ts6 __UNUSED__) + { + return ts1.f; + } +@@ -84,7 +84,7 @@ int main (void) + + printf ("%g\n", rfloat); + +- CHECK(fabs(rfloat - 11.11) < FLT_EPSILON); ++ CHECK(fabs(rfloat - 11.11) < 3 * FLT_EPSILON); + + exit(0); + } +-- +2.27.0 + diff --git a/backport-Robustify-floating-point-comparison-in-test.patch b/backport-Robustify-floating-point-comparison-in-test.patch new file mode 100644 index 0000000000000000000000000000000000000000..795c76522101860d5f384adc23cdbff68326773f --- /dev/null +++ b/backport-Robustify-floating-point-comparison-in-test.patch @@ -0,0 +1,51 @@ +From efb98a72d8b9bdb71b4f972efced073bee3b30fc Mon Sep 17 00:00:00 2001 +From: Anthony Green +Date: Sun, 15 Sep 2024 07:31:33 -0400 +Subject: [PATCH] Robustify floating point comparison in test + +Conflict:NA +Reference:https://github.com/libffi/libffi/commit/efb98a72d8b9bdb71b4f972efced073bee3b30fc +--- + testsuite/libffi.call/struct_int_float.c | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +diff --git a/testsuite/libffi.call/struct_int_float.c b/testsuite/libffi.call/struct_int_float.c +index 7014f13..079634e 100644 +--- a/testsuite/libffi.call/struct_int_float.c ++++ b/testsuite/libffi.call/struct_int_float.c +@@ -61,17 +61,17 @@ int main (void) + CHECK(ffi_prep_cif(&cif, 2, 6, &ffi_type_float, args) == FFI_OK); + + ts_arg[0].i = 1; +- ts_arg[0].f = 1.11f; ++ ts_arg[0].f = 11.11f; + ts_arg[1].i = 2; +- ts_arg[1].f = 2.22f; ++ ts_arg[1].f = 22.22f; + ts_arg[2].i = 3; +- ts_arg[2].f = 3.33f; ++ ts_arg[2].f = 33.33f; + ts_arg[3].i = 4; +- ts_arg[3].f = 4.44f; ++ ts_arg[3].f = 44.44f; + ts_arg[4].i = 5; +- ts_arg[4].f = 5.55f; ++ ts_arg[4].f = 55.55f; + ts_arg[5].i = 6; +- ts_arg[5].f = 6.66f; ++ ts_arg[5].f = 66.66f; + + printf ("%g\n", ts_arg[0].f); + printf ("%g\n", ts_arg[1].f); +@@ -84,7 +84,7 @@ int main (void) + + printf ("%g\n", rfloat); + +- CHECK(rfloat == 1.11f); ++ CHECK(fabs(rfloat - 11.11) < FLT_EPSILON); + + exit(0); + } +-- +2.27.0 + diff --git a/backport-fix-x86-ffi64-calls-with-6-gp-and-some-sse-registers.patch b/backport-fix-x86-ffi64-calls-with-6-gp-and-some-sse-registers.patch new file mode 100644 index 0000000000000000000000000000000000000000..68fa4c2dedf0bd6fa76f0d4ef6cdaacccf112652 --- /dev/null +++ b/backport-fix-x86-ffi64-calls-with-6-gp-and-some-sse-registers.patch @@ -0,0 +1,129 @@ +From d21881f55ed4a44d464c9091871e69b0bb47611a Mon Sep 17 00:00:00 2001 +From: kellda <59569234+kellda@users.noreply.github.com> +Date: Sun, 15 Sep 2024 13:29:42 +0200 +Subject: [PATCH] Fix x86/ffi64 calls with 6 gp and some sse registers (#848) + +Conflict:(1)add two header files. +(2)modify the incorrect parameters passed in. +Reference:https://github.com/libffi/libffi/commit/d21881f55ed4a44d464c9091871e69b0bb47611a +* Fix x86/ffi64 calls with 6 gp and some sse registers + +* Add test demonstating issue when mixing gp and sse registers +--- + src/x86/ffi64.c | 2 +- + testsuite/libffi.call/struct_int_float.c | 90 ++++++++++++++++++++++++ + 2 files changed, 91 insertions(+), 1 deletion(-) + create mode 100644 testsuite/libffi.call/struct_int_float.c + +diff --git a/src/x86/ffi64.c b/src/x86/ffi64.c +index 6a8e37f..39f0bfd 100644 +--- a/src/x86/ffi64.c ++++ b/src/x86/ffi64.c +@@ -651,7 +651,7 @@ ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue, + break; + default: + reg_args->gpr[gprcount] = 0; +- memcpy (®_args->gpr[gprcount], a, size); ++ memcpy (®_args->gpr[gprcount], a, sizeof(UINT64)); + } + gprcount++; + break; +diff --git a/testsuite/libffi.call/struct_int_float.c b/testsuite/libffi.call/struct_int_float.c +new file mode 100644 +index 0000000..7014f13 +--- /dev/null ++++ b/testsuite/libffi.call/struct_int_float.c +@@ -0,0 +1,90 @@ ++/* Area: ffi_call ++ Purpose: Demonstrate structures with integers corrupting earlier floats ++ Limitations: none. ++ PR: #848 ++ Originator: kellda */ ++ ++/* { dg-do run } */ ++#include "ffitest.h" ++#include ++#include ++ ++typedef struct ++{ ++ unsigned long i; ++ float f; ++} test_structure_int_float; ++ ++static float ABI_ATTR struct_int_float(test_structure_int_float ts1, ++ test_structure_int_float ts2, ++ test_structure_int_float ts3, ++ test_structure_int_float ts4, ++ test_structure_int_float ts5, ++ test_structure_int_float ts6) ++{ ++ return ts1.f; ++} ++ ++int main (void) ++{ ++ ffi_cif cif; ++ ffi_type *args[MAX_ARGS]; ++ void *values[MAX_ARGS]; ++ ffi_type ts_type; ++ ffi_type *ts_type_elements[3]; ++ float rfloat; ++ ++ test_structure_int_float ts_arg[6]; ++ ++ ts_type.size = 0; ++ ts_type.alignment = 0; ++ ts_type.type = FFI_TYPE_STRUCT; ++ ts_type.elements = ts_type_elements; ++ ts_type_elements[0] = &ffi_type_ulong; ++ ts_type_elements[1] = &ffi_type_float; ++ ts_type_elements[2] = NULL; ++ ++ args[0] = &ts_type; ++ values[0] = &ts_arg[0]; ++ args[1] = &ts_type; ++ values[1] = &ts_arg[1]; ++ args[2] = &ts_type; ++ values[2] = &ts_arg[2]; ++ args[3] = &ts_type; ++ values[3] = &ts_arg[3]; ++ args[4] = &ts_type; ++ values[4] = &ts_arg[4]; ++ args[5] = &ts_type; ++ values[5] = &ts_arg[5]; ++ ++ /* Initialize the cif */ ++ CHECK(ffi_prep_cif(&cif, 2, 6, &ffi_type_float, args) == FFI_OK); ++ ++ ts_arg[0].i = 1; ++ ts_arg[0].f = 1.11f; ++ ts_arg[1].i = 2; ++ ts_arg[1].f = 2.22f; ++ ts_arg[2].i = 3; ++ ts_arg[2].f = 3.33f; ++ ts_arg[3].i = 4; ++ ts_arg[3].f = 4.44f; ++ ts_arg[4].i = 5; ++ ts_arg[4].f = 5.55f; ++ ts_arg[5].i = 6; ++ ts_arg[5].f = 6.66f; ++ ++ printf ("%g\n", ts_arg[0].f); ++ printf ("%g\n", ts_arg[1].f); ++ printf ("%g\n", ts_arg[2].f); ++ printf ("%g\n", ts_arg[3].f); ++ printf ("%g\n", ts_arg[4].f); ++ printf ("%g\n", ts_arg[5].f); ++ ++ ffi_call(&cif, FFI_FN(struct_int_float), &rfloat, values); ++ ++ printf ("%g\n", rfloat); ++ ++ CHECK(rfloat == 1.11f); ++ ++ exit(0); ++} +-- +2.27.0 + diff --git a/libffi.spec b/libffi.spec index 5d65087c735f125d1317a576b273620f3b90e0fc..e9dd93bee3e159d9581535d2611141d0fc0ef827 100644 --- a/libffi.spec +++ b/libffi.spec @@ -1,6 +1,6 @@ Name: libffi Version: 3.4.6 -Release: 1 +Release: 2 Summary: A Portable Foreign Function Interface Library License: MIT URL: http://sourceware.org/libffi @@ -9,6 +9,9 @@ Source1: ffi-multilib.h Source2: ffitarget-multilib.h Patch1: fix-AARCH64EB-support.patch +Patch2: backport-fix-x86-ffi64-calls-with-6-gp-and-some-sse-registers.patch +Patch3: backport-Robustify-floating-point-comparison-in-test.patch +Patch4: backport-Fix-floating-point-compare.patch BuildRequires: gcc gcc-c++ dejagnu BuildRequires: make @@ -52,8 +55,7 @@ BuildArch: noarch The help package contains man files. %prep -%setup -q -%patch1 -p1 +%autosetup -p1 -n %{name}-%{version} %build %configure \ @@ -97,6 +99,14 @@ fi %{_infodir}/libffi.info.gz %changelog +* Tue Jan 14 2025 shixuantong - 3.4.6-2 +- Type:bugfix +- CVE:NA +- SUG:NA +- DESC:Fix x86/ffi64 calls with 6 gp and some sse registers + Robustify floating point comparison in test + Fix floating point compare + * Sun Jul 28 2024 dillon chen - 3.4.6-1 - Type:enhancement - ID:NA