From ea7ab412b4a345265f70ddbe505c963a12a18b1b Mon Sep 17 00:00:00 2001 From: shixuantong Date: Mon, 13 Jan 2025 09:23:23 +0800 Subject: [PATCH] sync bugfix patches --- backport-Fix-floating-point-compare.patch | 45 ++++++ ...fy-floating-point-comparison-in-test.patch | 52 +++++++ ...lls-with-6-gp-and-some-sse-registers.patch | 130 ++++++++++++++++++ libffi.spec | 13 +- 4 files changed, 239 insertions(+), 1 deletion(-) create mode 100644 backport-Fix-floating-point-compare.patch create mode 100644 backport-Robustify-floating-point-comparison-in-test.patch create mode 100644 backport-fix-x86-ffi64-calls-with-6-gp-and-some-sse-registers.patch diff --git a/backport-Fix-floating-point-compare.patch b/backport-Fix-floating-point-compare.patch new file mode 100644 index 0000000..5f7fe71 --- /dev/null +++ b/backport-Fix-floating-point-compare.patch @@ -0,0 +1,45 @@ +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 90e3787..7271d42 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.33.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 0000000..2ae7bf3 --- /dev/null +++ b/backport-Robustify-floating-point-comparison-in-test.patch @@ -0,0 +1,52 @@ +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 4e2ba1a..90e3787 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.33.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 0000000..c8ed247 --- /dev/null +++ b/backport-fix-x86-ffi64-calls-with-6-gp-and-some-sse-registers.patch @@ -0,0 +1,130 @@ +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 438b374..e4eec9f 100644 +--- a/src/x86/ffi64.c ++++ b/src/x86/ffi64.c +@@ -650,7 +650,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.33.0 + + diff --git a/libffi.spec b/libffi.spec index 19ed4ef..1eabe78 100644 --- a/libffi.spec +++ b/libffi.spec @@ -1,6 +1,6 @@ Name: libffi Version: 3.4.2 -Release: 9 +Release: 10 Summary: A Portable Foreign Function Interface Library License: MIT URL: http://sourceware.org/libffi @@ -14,6 +14,9 @@ Patch2: libffi-Add-sw64-architecture.patch Patch3: backport-Fix-signed-vs-unsigned-comparison.patch Patch4: riscv-extend-return-types-smaller-than-ffi_arg-680.patch Patch5: fix-AARCH64EB-support.patch +Patch6: backport-fix-x86-ffi64-calls-with-6-gp-and-some-sse-registers.patch +Patch7: backport-Robustify-floating-point-comparison-in-test.patch +Patch8: backport-Fix-floating-point-compare.patch %ifarch loongarch64 Patch1000: 1000-libffi-add-loongarch64-support.patch %endif @@ -104,6 +107,14 @@ fi %{_infodir}/libffi.info.gz %changelog +* Mon Jan 13 2025 shixuantong - 3.4.2-10 +- 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 + * Mon Aug 14 2023 suwei - 3.4.2-9 - Type:enhancement - CVE:NA -- Gitee