From af9254fc333659c1957ee7c3fca08a0089e63800 Mon Sep 17 00:00:00 2001 From: laokz Date: Sun, 15 Jan 2023 16:36:42 +0800 Subject: [PATCH] Backport upstream patch to fix riscv %check error --- libffi.spec | 9 +++- ...eturn-types-smaller-than-ffi_arg-680.patch | 51 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 riscv-extend-return-types-smaller-than-ffi_arg-680.patch diff --git a/libffi.spec b/libffi.spec index b79def6..0ce15e5 100644 --- a/libffi.spec +++ b/libffi.spec @@ -1,6 +1,6 @@ Name: libffi Version: 3.4.2 -Release: 6 +Release: 7 Summary: A Portable Foreign Function Interface Library License: MIT URL: http://sourceware.org/libffi @@ -12,6 +12,7 @@ Patch0: backport-x86-64-Always-double-jump-table-slot-size-for-CET-71.patch Patch1: backport-Fix-check-for-invalid-varargs-arguments-707.patch 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 BuildRequires: gcc gcc-c++ dejagnu BuildRequires: make @@ -99,6 +100,12 @@ fi %{_infodir}/libffi.info.gz %changelog +* Wed Mar 29 2023 laokz - 3.4.2-7 +- Type:bugfix +- CVE:NA +- SUG:NA +- DESC:Backport upstream patch to fix riscv %check error + * Thu Mar 23 2023 fuanan - 3.4.2-6 - Type:bugfix - CVE:NA diff --git a/riscv-extend-return-types-smaller-than-ffi_arg-680.patch b/riscv-extend-return-types-smaller-than-ffi_arg-680.patch new file mode 100644 index 0000000..aa25269 --- /dev/null +++ b/riscv-extend-return-types-smaller-than-ffi_arg-680.patch @@ -0,0 +1,51 @@ +From aa3fce08ba620c50db17215a9f14dd0f1facf741 Mon Sep 17 00:00:00 2001 +From: Andreas Schwab +Date: Sun, 13 Feb 2022 21:04:33 +0100 +Subject: [PATCH] riscv: extend return types smaller than ffi_arg (#680) + +Co-authored-by: Andreas Schwab +--- + src/riscv/ffi.c | 27 ++++++++++++++++++++++++++- + 1 file changed, 26 insertions(+), 1 deletion(-) + +diff --git a/src/riscv/ffi.c b/src/riscv/ffi.c +index c910858..ebd05ba 100644 +--- a/src/riscv/ffi.c ++++ b/src/riscv/ffi.c +@@ -373,7 +373,32 @@ ffi_call_int (ffi_cif *cif, void (*fn) (void), void *rvalue, void **avalue, + + cb.used_float = cb.used_integer = 0; + if (!return_by_ref && rvalue) +- unmarshal(&cb, cif->rtype, 0, rvalue); ++ { ++ if (IS_INT(cif->rtype->type) ++ && cif->rtype->size < sizeof (ffi_arg)) ++ { ++ /* Integer types smaller than ffi_arg need to be extended. */ ++ switch (cif->rtype->type) ++ { ++ case FFI_TYPE_SINT8: ++ case FFI_TYPE_SINT16: ++ case FFI_TYPE_SINT32: ++ unmarshal_atom (&cb, (sizeof (ffi_arg) > 4 ++ ? FFI_TYPE_SINT64 : FFI_TYPE_SINT32), ++ rvalue); ++ break; ++ case FFI_TYPE_UINT8: ++ case FFI_TYPE_UINT16: ++ case FFI_TYPE_UINT32: ++ unmarshal_atom (&cb, (sizeof (ffi_arg) > 4 ++ ? FFI_TYPE_UINT64 : FFI_TYPE_UINT32), ++ rvalue); ++ break; ++ } ++ } ++ else ++ unmarshal(&cb, cif->rtype, 0, rvalue); ++ } + } + + void +-- +2.39.2 + -- Gitee