package/libffi: bump to version 3.4.8

Patches 0002-arc-Fix-warnings.patch and
0003-arc-Do-not-use-mov_s-and-movl_s-instructions.patch are upstream
as part of commit 30e887f84e70c16df5c421983f074d07a93b4e58 (yes they
have been squashed into a single commit upstream).

Patches 0004-src-or1k-ffi.c-fix-prototype-of-ffi_call_SYSV.patch and
0005-src-or1k-ffi.c-fix-incompatible-pointer-type.patch are upstream
as part of commit 8a0d029244d9b0393db19898e603f24febfb53ee (here as
well, they have been squashed into a single commit upstream).

Changes 3.4.6..3.4.7:

    Add static trampoline support for Linux on s390x.
    Fix BTI support for ARM64.
    Support pointer authentication for ARM64.
    Fix ASAN compatibility.
    Fix x86-64 calls with 6 GP registers and some SSE registers.
    Miscellaneous fixes for ARC and Darwin ARM64.
    Fix OpenRISC or1k and Solaris 10 builds.
    Remove nios2 port.

Changes 3.4.7..3.4.8:

    aarch64: add PAC to GNU Notes by @billatarm in #882
    MIPS: Dont import asm/sgidefs.h on linux by @fossdd in #885
    Update the Simple Example from the Docs to fix a compile error by @Nikitf777 in #886
    Fix bugs in the x86-64 and x32 target (#887) by @mikulas-patocka in #889
    Add the "ABI_ATTR" attribute to called functions (#891) by @mikulas-patocka in #892
    powerpc: Add static trampoline support (#894) by @peter-bergner in #895
    testsuite: add two tests to Makefile.am by @thesamesam in #893

Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Signed-off-by: Julien Olivain <ju.o@free.fr>
This commit is contained in:
Thomas Petazzoni
2025-04-15 22:53:23 +02:00
committed by Julien Olivain
parent 83f865963a
commit 2f1c46b6cb
6 changed files with 2 additions and 200 deletions

View File

@@ -1,56 +0,0 @@
From 4f25e5be1a8a429b6925527c1cb94b6acd05642b Mon Sep 17 00:00:00 2001
From: Yuriy Kolerov <ykolerov@synopsys.com>
Date: Wed, 17 Jul 2024 18:56:52 +0300
Subject: [PATCH] arc: Fix warnings
These warnings are fixed:
1. A series of "unused variables".
2. Implicit conversion from a pointer to uint32_t.
Signed-off-by: Yuriy Kolerov <ykolerov@synopsys.com>
Upstream: https://github.com/libffi/libffi/pull/844
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
src/arc/ffi.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/arc/ffi.c b/src/arc/ffi.c
index d729274..0632319 100644
--- a/src/arc/ffi.c
+++ b/src/arc/ffi.c
@@ -192,9 +192,10 @@ static void unmarshal_atom(call_builder *cb, int type, void *data) {
/* for arguments passed by reference returns the pointer, otherwise the arg is copied (up to MAXCOPYARG bytes) */
static void *unmarshal(call_builder *cb, ffi_type *type, int var, void *data) {
size_t realign[2];
- void *pointer;
#if defined(__ARC64_ARCH64__)
+ void *pointer;
+
if (type->size > 2 * __SIZEOF_POINTER__) {
/* pass by reference */
unmarshal_atom(cb, FFI_TYPE_POINTER, (char*)&pointer);
@@ -348,7 +349,10 @@ ffi_prep_closure_loc (ffi_closure * closure, ffi_cif * cif,
void *user_data, void *codeloc)
{
uint32_t *tramp = (uint32_t *) & (closure->tramp[0]);
+
+#if defined(__ARC64_ARCH64__)
size_t address_ffi_closure = (size_t) ffi_closure_asm;
+#endif
switch (cif->abi)
{
@@ -367,7 +371,7 @@ ffi_prep_closure_loc (ffi_closure * closure, ffi_cif * cif,
FFI_ASSERT (tramp == codeloc);
tramp[0] = CODE_ENDIAN (0x200a1fc0); /* mov r8, pcl */
tramp[1] = CODE_ENDIAN (0x20200f80); /* j [long imm] */
- tramp[2] = CODE_ENDIAN (ffi_closure_asm);
+ tramp[2] = CODE_ENDIAN ((uint32_t) ffi_closure_asm);
break;
#endif
--
2.46.0

View File

@@ -1,45 +0,0 @@
From 97c273519e41a7ef2841cb7531c6eda01fc69dc2 Mon Sep 17 00:00:00 2001
From: Yuriy Kolerov <ykolerov@synopsys.com>
Date: Wed, 17 Jul 2024 19:19:30 +0300
Subject: [PATCH] arc: Do not use mov_s and movl_s instructions
mov_s and movl_s instructions use a restricted set of registers.
However, a list of available registers for such instructions for
one ARC target may not match a list for another ARC targets. For
example, it is applicable to ARC700 and ARC HS3x/4x - build
fails because mov_s formats may be incompatible in some cases.
The easiest and the most straightforward way to fix this issue
is to use mov and movl instead of mov_s and movl_s.
Signed-off-by: Yuriy Kolerov <ykolerov@synopsys.com>
Upstream: https://github.com/libffi/libffi/pull/844
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
src/arc/arcompact.S | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/arc/arcompact.S b/src/arc/arcompact.S
index 1d7f1a1..e749341 100644
--- a/src/arc/arcompact.S
+++ b/src/arc/arcompact.S
@@ -39,14 +39,14 @@
#define LARG ldl
#define SARG stl
#define ADDPTR addl
-#define MOVPTR movl_s
+#define MOVPTR movl
#else
#define PTRS 4
#define FLTS 4
#define LARG ld
#define SARG st
#define ADDPTR add
-#define MOVPTR mov_s
+#define MOVPTR mov
#endif
#define FRAME_LEN (8 * PTRS + 16)
--
2.46.0

View File

@@ -1,47 +0,0 @@
From 4506e943289ed1363f3921bc201d5da76f750229 Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Date: Sat, 17 Aug 2024 12:56:22 +0200
Subject: [PATCH] src/or1k/ffi.c: fix prototype of ffi_call_SYSV()
The current code base of libffi on OpenRISC (or1k) fails to build with
GCC 14.x with the following error:
../src/or1k/ffi.c: In function 'ffi_call':
../src/or1k/ffi.c:167:34: error: passing argument 3 of 'ffi_call_SYSV' from incompatible pointer type [-Wincompatible-pointer-types]
167 | ffi_call_SYSV(size, &ecif, ffi_prep_args, rvalue, fn, cif->flags);
| ^~~~~~~~~~~~~
| |
| void * (*)(char *, extended_cif *)
../src/or1k/ffi.c:113:27: note: expected 'void * (*)(int *, extended_cif *)' but argument is of type 'void * (*)(char *, extended_cif *)'
113 | void *(*)(int *, extended_cif *),
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This is due to the fact that ffi_prep_args() is in fact defined as:
void* ffi_prep_args(char *stack, extended_cif *ecif)
so, let's fix the prototype of the function pointer, which anyway gets
passed to assembly code, so the typing gets lost.
Upstream: https://github.com/libffi/libffi/pull/854
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
src/or1k/ffi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/or1k/ffi.c b/src/or1k/ffi.c
index 9451d4e..157388e 100644
--- a/src/or1k/ffi.c
+++ b/src/or1k/ffi.c
@@ -110,7 +110,7 @@ void* ffi_prep_args(char *stack, extended_cif *ecif)
extern void ffi_call_SYSV(unsigned,
extended_cif *,
- void *(*)(int *, extended_cif *),
+ void *(*)(char *, extended_cif *),
unsigned *,
void (*fn)(void),
unsigned);
--
2.46.0

View File

@@ -1,50 +0,0 @@
From ec39b03d891a77552ad7729ff79bf21bf3591842 Mon Sep 17 00:00:00 2001
From: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Date: Sat, 17 Aug 2024 13:52:45 +0200
Subject: [PATCH] src/or1k/ffi.c: fix incompatible pointer type
The current code base of libffi on OpenRISC (or1k) fails to build with
GCC 14.x with the following error:
../src/or1k/ffi.c: In function 'ffi_closure_SYSV':
../src/or1k/ffi.c:183:22: error: initialization of 'char *' from incompatible pointer type 'int *' [-Wincompatible-pointer-types]
183 | char *stack_args = sp;
| ^~
Indeed:
register int *sp __asm__ ("r17");
[..]
char *stack_args = sp;
Adopt the same logic used for:
char *ptr = (char *) register_args;
which consists in casting to the desired pointer type. Indeed, later
in the code stack_args is assigned to ptr (so they need to be the same
pointer type), and some arithmetic is done on ptr, so changing its
pointer type would change the behavior.
Upstream: https://github.com/libffi/libffi/pull/854
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
---
src/or1k/ffi.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/or1k/ffi.c b/src/or1k/ffi.c
index 157388e..7a6d28c 100644
--- a/src/or1k/ffi.c
+++ b/src/or1k/ffi.c
@@ -180,7 +180,7 @@ void ffi_closure_SYSV(unsigned long r3, unsigned long r4, unsigned long r5,
register int *r13 __asm__ ("r13");
ffi_closure* closure = (ffi_closure*) r13;
- char *stack_args = sp;
+ char *stack_args = (char*) sp;
/* Lay the register arguments down in a continuous chunk of memory. */
unsigned register_args[6] =
--
2.46.0

View File

@@ -1,4 +1,4 @@
# Locally calculated
sha256 b0dea9df23c863a7a50e825440f3ebffabd65df1497108e5d437747843895a4e libffi-3.4.6.tar.gz
sha256 bc9842a18898bfacb0ed1252c4febcc7e78fa139fd27fdc7a3e30d9d9356119b libffi-3.4.8.tar.gz
# License files, locally calculated
sha256 67894089811f93fca47a76f85e017da6f8582d4ba0905963c6e0f1ad6df7a195 LICENSE

View File

@@ -4,7 +4,7 @@
#
################################################################################
LIBFFI_VERSION = 3.4.6
LIBFFI_VERSION = 3.4.8
LIBFFI_SITE = \
https://github.com/libffi/libffi/releases/download/v$(LIBFFI_VERSION)
LIBFFI_LICENSE = MIT