mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-15 08:56:58 +02:00
dev-libs/libffi: Sync with Gentoo
It's from Gentoo commit 8ac8a253745bf7a024857d743a29ad7d6d942e9c.
This commit is contained in:
parent
90b92a2e5f
commit
5285ec1fee
@ -1,4 +1,4 @@
|
||||
DIST libffi-3.4.4.tar.gz 1362394 BLAKE2B 189fe1ffe9507f204581b0ab09995dc7e7b761bb4eac7e338e9f5ff81431aebcef6c182c1839c9f9acb2706697a260c67e6d1351cf7e2aed7c4eb5d694f6f8fd SHA512 88680aeb0fa0dc0319e5cd2ba45b4b5a340bc9b4bcf20b1e0613b39cd898f177a3863aa94034d8e23a7f6f44d858a53dcd36d1bb8dee13b751ef814224061889
|
||||
DIST libffi-3.4.6.tar.gz 1391684 BLAKE2B af8402a09bdbd59b4e9400d2d71bd5ce98f6f1d981d35d1ab40d77a831b13b32c5bd34ca54ff75999e39f0d8a9c066381fae7a8d6c5216d955e064f929f08b88 SHA512 033d2600e879b83c6bce0eb80f69c5f32aa775bf2e962c9d39fbd21226fa19d1e79173d8eaa0d0157014d54509ea73315ad86842356fc3a303c0831c94c6ab39
|
||||
DIST libffi-3.4.7.tar.gz 1393979 BLAKE2B 0dd17b4fd358beb9842889168437443137445a5dba1f0a7e8669ae420d8efb927815c08602c1b1b141acfdfdbaa12b417863402a5c8df5f36519fd3e772d3f37 SHA512 d19f59a5b5d61bd7d9e8a7a74b8bf2e697201a19c247c410c789e93ca8678a4eb9f13c9bee19f129be80ade8514f6b1acb38d66f44d86edd32644ed7bbe31dd6
|
||||
DIST libffi-3.4.8.tar.gz 1397992 BLAKE2B 10b3d970dc598fb8689bca49751cda499ddc5216baf89d38625385b0d42d57f10d15cce3c4c044c9c73a4fce384c26f2a8e1b99269e9db1174c2631201c6bfd4 SHA512 05344c6c1a1a5b44704f6cf99277098d1ea3ac1dc11c2a691c501786a214f76184ec0637135588630db609ce79e49df3dbd00282dd61e7f21137afba70e24ffe
|
||||
DIST libffi-3.5.0.tar.gz 1420475 BLAKE2B 19e278ef86d23c6955b53e2e1c0e1297fd603975d47763c5febd1eca28a475a6ba4dc3c3b1eef630f744c7d3e95cc1d0c6876ae242c21b666e2c2571a4c1132e SHA512 1d47980185abc91d81ba6dfa775b673e83d42bad31a5ca1407068b319113a1f7e79da241204e41f096e1d3072ada1364d64bb9641cfb0b82fbe3821da2feb6ac
|
||||
DIST libffi-3.5.1.tar.gz 1419757 BLAKE2B eaeb04beeb4ab6e0ef5652175d5c9d29a18b6f1edbf05db819a3a6ac9c8ed47de32c54fca4c3a9a476283c0771650d5a577e7868f16c671ee46e25db27369066 SHA512 3da9e21fdb920e7962ceb01ee671ef36196df4d5dad62e0cdd8e87cc60e350f241c204350560ae26ea04cc898161b5585c8a5a5125bdbcc84508efbb7ea61eb8
|
||||
|
@ -1,170 +0,0 @@
|
||||
https://github.com/libffi/libffi/commit/e58e22b22386ed0e0a95e97eb8eed016e3f01b02
|
||||
|
||||
From e58e22b22386ed0e0a95e97eb8eed016e3f01b02 Mon Sep 17 00:00:00 2001
|
||||
From: Anthony Green <green@moxielogic.com>
|
||||
Date: Thu, 2 Feb 2023 07:02:53 -0500
|
||||
Subject: [PATCH] From Dave Anglin:
|
||||
|
||||
A couple of years ago the 32-bit hppa targets were converted from using a trampoline executed on the stack to the function descriptor technique used by ia64. This is more efficient and avoids having to have an executable stack. However, function pointers on 32-bit need the PLABEL bit set in the pointer. It distinguishes between pointers that point directly to the executable code and pointer that point to a function descriptor. We need the later for libffi. But as a result, it is not possible to convert using casts data pointers to function pointers.
|
||||
|
||||
The solution at the time was to set the PLABEL bit in hppa closure pointers using FFI_CLOSURE_PTR. However, I realized recently that this was a bad choice. Packages like python-cffi allocate their own closure pointers, so this isn't going to work well there.
|
||||
|
||||
A better solution is to leave closure pointers unchanged and only set the PLABEL bit in pointers used to point to executable code.
|
||||
|
||||
The attached patch drops the FFI_CLOSURE_PTR and FFI_RESTORE_PTR defines. This allows some cleanup in the hppa closure routines. The FFI_FN define is now used to set the PLABEL bit on hppa. ffi_closure_alloc is modified to set the PLABEL bit in the value set in *code.
|
||||
|
||||
I also added a FFI_CL define to convert a function pointer to a closure pointer. It is only used in one test case.
|
||||
--- a/include/ffi.h.in
|
||||
+++ b/include/ffi.h.in
|
||||
@@ -361,14 +361,6 @@ typedef struct {
|
||||
FFI_API void *ffi_closure_alloc (size_t size, void **code);
|
||||
FFI_API void ffi_closure_free (void *);
|
||||
|
||||
-#if defined(PA_LINUX) || defined(PA_HPUX)
|
||||
-#define FFI_CLOSURE_PTR(X) ((void *)((unsigned int)(X) | 2))
|
||||
-#define FFI_RESTORE_PTR(X) ((void *)((unsigned int)(X) & ~3))
|
||||
-#else
|
||||
-#define FFI_CLOSURE_PTR(X) (X)
|
||||
-#define FFI_RESTORE_PTR(X) (X)
|
||||
-#endif
|
||||
-
|
||||
FFI_API ffi_status
|
||||
ffi_prep_closure (ffi_closure*,
|
||||
ffi_cif *,
|
||||
@@ -515,8 +507,14 @@ FFI_API
|
||||
ffi_status ffi_get_struct_offsets (ffi_abi abi, ffi_type *struct_type,
|
||||
size_t *offsets);
|
||||
|
||||
-/* Useful for eliminating compiler warnings. */
|
||||
+/* Convert between closure and function pointers. */
|
||||
+#if defined(PA_LINUX) || defined(PA_HPUX)
|
||||
+#define FFI_FN(f) ((void (*)(void))((unsigned int)(f) | 2))
|
||||
+#define FFI_CL(f) ((void *)((unsigned int)(f) & ~3))
|
||||
+#else
|
||||
#define FFI_FN(f) ((void (*)(void))f)
|
||||
+#define FFI_CL(f) ((void *)(f))
|
||||
+#endif
|
||||
|
||||
/* ---- Definitions shared with assembly code ---------------------------- */
|
||||
|
||||
--- a/src/closures.c
|
||||
+++ b/src/closures.c
|
||||
@@ -993,23 +993,23 @@ ffi_closure_alloc (size_t size, void **code)
|
||||
if (!code)
|
||||
return NULL;
|
||||
|
||||
- ptr = FFI_CLOSURE_PTR (dlmalloc (size));
|
||||
+ ptr = dlmalloc (size);
|
||||
|
||||
if (ptr)
|
||||
{
|
||||
msegmentptr seg = segment_holding (gm, ptr);
|
||||
|
||||
- *code = add_segment_exec_offset (ptr, seg);
|
||||
+ *code = FFI_FN (add_segment_exec_offset (ptr, seg));
|
||||
if (!ffi_tramp_is_supported ())
|
||||
return ptr;
|
||||
|
||||
ftramp = ffi_tramp_alloc (0);
|
||||
if (ftramp == NULL)
|
||||
{
|
||||
- dlfree (FFI_RESTORE_PTR (ptr));
|
||||
+ dlfree (ptr);
|
||||
return NULL;
|
||||
}
|
||||
- *code = ffi_tramp_get_addr (ftramp);
|
||||
+ *code = FFI_FN (ffi_tramp_get_addr (ftramp));
|
||||
((ffi_closure *) ptr)->ftramp = ftramp;
|
||||
}
|
||||
|
||||
@@ -1050,7 +1050,7 @@ ffi_closure_free (void *ptr)
|
||||
if (ffi_tramp_is_supported ())
|
||||
ffi_tramp_free (((ffi_closure *) ptr)->ftramp);
|
||||
|
||||
- dlfree (FFI_RESTORE_PTR (ptr));
|
||||
+ dlfree (ptr);
|
||||
}
|
||||
|
||||
int
|
||||
@@ -1070,16 +1070,20 @@ ffi_tramp_is_present (void *ptr)
|
||||
void *
|
||||
ffi_closure_alloc (size_t size, void **code)
|
||||
{
|
||||
+ void *c;
|
||||
+
|
||||
if (!code)
|
||||
return NULL;
|
||||
|
||||
- return *code = FFI_CLOSURE_PTR (malloc (size));
|
||||
+ c = malloc (size);
|
||||
+ *code = FFI_FN (c);
|
||||
+ return c;
|
||||
}
|
||||
|
||||
void
|
||||
ffi_closure_free (void *ptr)
|
||||
{
|
||||
- free (FFI_RESTORE_PTR (ptr));
|
||||
+ free (ptr);
|
||||
}
|
||||
|
||||
void *
|
||||
--- a/src/pa/ffi.c
|
||||
+++ b/src/pa/ffi.c
|
||||
@@ -445,7 +445,6 @@ ffi_status ffi_closure_inner_pa32(ffi_closure *closure, UINT32 *stack)
|
||||
int i, avn;
|
||||
unsigned int slot = FIRST_ARG_SLOT;
|
||||
register UINT32 r28 asm("r28");
|
||||
- ffi_closure *c = (ffi_closure *)FFI_RESTORE_PTR (closure);
|
||||
|
||||
cif = closure->cif;
|
||||
|
||||
@@ -548,7 +547,7 @@ ffi_status ffi_closure_inner_pa32(ffi_closure *closure, UINT32 *stack)
|
||||
}
|
||||
|
||||
/* Invoke the closure. */
|
||||
- (c->fun) (cif, rvalue, avalue, c->user_data);
|
||||
+ (closure->fun) (cif, rvalue, avalue, closure->user_data);
|
||||
|
||||
debug(3, "after calling function, ret[0] = %08x, ret[1] = %08x\n", u.ret[0],
|
||||
u.ret[1]);
|
||||
@@ -649,8 +648,6 @@ ffi_prep_closure_loc (ffi_closure* closure,
|
||||
void *user_data,
|
||||
void *codeloc)
|
||||
{
|
||||
- ffi_closure *c = (ffi_closure *)FFI_RESTORE_PTR (closure);
|
||||
-
|
||||
/* The layout of a function descriptor. A function pointer with the PLABEL
|
||||
bit set points to a function descriptor. */
|
||||
struct pa32_fd
|
||||
@@ -676,14 +673,14 @@ ffi_prep_closure_loc (ffi_closure* closure,
|
||||
fd = (struct pa32_fd *)((UINT32)ffi_closure_pa32 & ~3);
|
||||
|
||||
/* Setup trampoline. */
|
||||
- tramp = (struct ffi_pa32_trampoline_struct *)c->tramp;
|
||||
+ tramp = (struct ffi_pa32_trampoline_struct *)closure->tramp;
|
||||
tramp->code_pointer = fd->code_pointer;
|
||||
tramp->fake_gp = (UINT32)codeloc & ~3;
|
||||
tramp->real_gp = fd->gp;
|
||||
|
||||
- c->cif = cif;
|
||||
- c->user_data = user_data;
|
||||
- c->fun = fun;
|
||||
+ closure->cif = cif;
|
||||
+ closure->user_data = user_data;
|
||||
+ closure->fun = fun;
|
||||
|
||||
return FFI_OK;
|
||||
}
|
||||
--- a/testsuite/libffi.closures/closure_loc_fn0.c
|
||||
+++ b/testsuite/libffi.closures/closure_loc_fn0.c
|
||||
@@ -85,7 +85,7 @@ int main (void)
|
||||
|
||||
#ifndef FFI_EXEC_STATIC_TRAMP
|
||||
/* With static trampolines, the codeloc does not point to closure */
|
||||
- CHECK(memcmp(pcl, codeloc, sizeof(*pcl)) == 0);
|
||||
+ CHECK(memcmp(pcl, FFI_CL(codeloc), sizeof(*pcl)) == 0);
|
||||
#endif
|
||||
|
||||
res = (*((closure_loc_test_type0)codeloc))
|
||||
|
@ -1,289 +0,0 @@
|
||||
https://github.com/libffi/libffi/commit/222abd0c65babe2174b21753217145f5031a8b91
|
||||
|
||||
From 222abd0c65babe2174b21753217145f5031a8b91 Mon Sep 17 00:00:00 2001
|
||||
From: Anthony Green <green@moxielogic.com>
|
||||
Date: Thu, 2 Feb 2023 07:04:55 -0500
|
||||
Subject: [PATCH] From Dave Anglin:
|
||||
|
||||
This patch is derived from the work done in implementing libffi for 64-bit hppa64-hpux target. Currently, the 32-bit hppa targets do a linear search for the return type of an ffi_call. This is slow and inefficient. A jump table can used to jump directly to the code used to process the return value. In most common cases, the return value can be processed in the jump table itself.
|
||||
|
||||
The patch also fixes return handling for FFI_TYPE_UINT8, FFI_TYPE_SINT8, FFI_TYPE_UINT16 and FFI_TYPE_SINT16.
|
||||
--- a/src/pa/ffi.c
|
||||
+++ b/src/pa/ffi.c
|
||||
@@ -56,27 +56,12 @@ static inline int ffi_struct_type(ffi_type *t)
|
||||
size_t sz = t->size;
|
||||
|
||||
/* Small structure results are passed in registers,
|
||||
- larger ones are passed by pointer. Note that
|
||||
- small structures of size 2, 4 and 8 differ from
|
||||
- the corresponding integer types in that they have
|
||||
- different alignment requirements. */
|
||||
-
|
||||
- if (sz <= 1)
|
||||
- return FFI_TYPE_UINT8;
|
||||
- else if (sz == 2)
|
||||
- return FFI_TYPE_SMALL_STRUCT2;
|
||||
- else if (sz == 3)
|
||||
- return FFI_TYPE_SMALL_STRUCT3;
|
||||
- else if (sz == 4)
|
||||
- return FFI_TYPE_SMALL_STRUCT4;
|
||||
- else if (sz == 5)
|
||||
- return FFI_TYPE_SMALL_STRUCT5;
|
||||
- else if (sz == 6)
|
||||
- return FFI_TYPE_SMALL_STRUCT6;
|
||||
- else if (sz == 7)
|
||||
- return FFI_TYPE_SMALL_STRUCT7;
|
||||
- else if (sz <= 8)
|
||||
- return FFI_TYPE_SMALL_STRUCT8;
|
||||
+ larger ones are passed by pointer. Note that small
|
||||
+ structures differ from the corresponding integer
|
||||
+ types in that they have different alignment requirements. */
|
||||
+
|
||||
+ if (sz <= 8)
|
||||
+ return -sz;
|
||||
else
|
||||
return FFI_TYPE_STRUCT; /* else, we pass it by pointer. */
|
||||
}
|
||||
@@ -556,16 +541,16 @@ ffi_status ffi_closure_inner_pa32(ffi_closure *closure, UINT32 *stack)
|
||||
switch (cif->flags)
|
||||
{
|
||||
case FFI_TYPE_UINT8:
|
||||
- *(stack - FIRST_ARG_SLOT) = (UINT8)(u.ret[0] >> 24);
|
||||
+ *(stack - FIRST_ARG_SLOT) = (UINT8)u.ret[0];
|
||||
break;
|
||||
case FFI_TYPE_SINT8:
|
||||
- *(stack - FIRST_ARG_SLOT) = (SINT8)(u.ret[0] >> 24);
|
||||
+ *(stack - FIRST_ARG_SLOT) = (SINT8)u.ret[0];
|
||||
break;
|
||||
case FFI_TYPE_UINT16:
|
||||
- *(stack - FIRST_ARG_SLOT) = (UINT16)(u.ret[0] >> 16);
|
||||
+ *(stack - FIRST_ARG_SLOT) = (UINT16)u.ret[0];
|
||||
break;
|
||||
case FFI_TYPE_SINT16:
|
||||
- *(stack - FIRST_ARG_SLOT) = (SINT16)(u.ret[0] >> 16);
|
||||
+ *(stack - FIRST_ARG_SLOT) = (SINT16)u.ret[0];
|
||||
break;
|
||||
case FFI_TYPE_INT:
|
||||
case FFI_TYPE_SINT32:
|
||||
@@ -590,6 +575,7 @@ ffi_status ffi_closure_inner_pa32(ffi_closure *closure, UINT32 *stack)
|
||||
/* Don't need a return value, done by caller. */
|
||||
break;
|
||||
|
||||
+ case FFI_TYPE_SMALL_STRUCT1:
|
||||
case FFI_TYPE_SMALL_STRUCT2:
|
||||
case FFI_TYPE_SMALL_STRUCT3:
|
||||
case FFI_TYPE_SMALL_STRUCT4:
|
||||
--- a/src/pa/ffitarget.h
|
||||
+++ b/src/pa/ffitarget.h
|
||||
@@ -73,11 +73,22 @@ typedef enum ffi_abi {
|
||||
#define FFI_TRAMPOLINE_SIZE 12
|
||||
#endif
|
||||
|
||||
-#define FFI_TYPE_SMALL_STRUCT2 -1
|
||||
-#define FFI_TYPE_SMALL_STRUCT3 -2
|
||||
-#define FFI_TYPE_SMALL_STRUCT4 -3
|
||||
-#define FFI_TYPE_SMALL_STRUCT5 -4
|
||||
-#define FFI_TYPE_SMALL_STRUCT6 -5
|
||||
-#define FFI_TYPE_SMALL_STRUCT7 -6
|
||||
-#define FFI_TYPE_SMALL_STRUCT8 -7
|
||||
+#define FFI_TYPE_SMALL_STRUCT1 -1
|
||||
+#define FFI_TYPE_SMALL_STRUCT2 -2
|
||||
+#define FFI_TYPE_SMALL_STRUCT3 -3
|
||||
+#define FFI_TYPE_SMALL_STRUCT4 -4
|
||||
+#define FFI_TYPE_SMALL_STRUCT5 -5
|
||||
+#define FFI_TYPE_SMALL_STRUCT6 -6
|
||||
+#define FFI_TYPE_SMALL_STRUCT7 -7
|
||||
+#define FFI_TYPE_SMALL_STRUCT8 -8
|
||||
+
|
||||
+/* linux.S and hpux32.S expect FFI_TYPE_COMPLEX is the last generic type. */
|
||||
+#define FFI_PA_TYPE_LAST FFI_TYPE_COMPLEX
|
||||
+
|
||||
+/* If new generic types are added, the jump tables in linux.S and hpux32.S
|
||||
+ likely need updating. */
|
||||
+#if FFI_TYPE_LAST != FFI_PA_TYPE_LAST
|
||||
+# error "You likely have broken jump tables"
|
||||
+#endif
|
||||
+
|
||||
#endif
|
||||
|
||||
--- a/src/pa/linux.S
|
||||
+++ b/src/pa/linux.S
|
||||
@@ -103,51 +103,103 @@ ffi_call_pa32:
|
||||
|
||||
/* Prepare to store the result; we need to recover flags and rvalue. */
|
||||
ldw -48(%r3), %r21 /* r21 <- flags */
|
||||
- ldw -52(%r3), %r20 /* r20 <- rvalue */
|
||||
|
||||
- /* Store the result according to the return type. */
|
||||
+ /* Adjust flags range from [-8, 15] to [0, 23]. */
|
||||
+ addi 8, %r21, %r21
|
||||
|
||||
-.Lcheckint:
|
||||
- comib,<>,n FFI_TYPE_INT, %r21, .Lcheckint8
|
||||
- b .Ldone
|
||||
- stw %ret0, 0(%r20)
|
||||
+ blr %r21, %r0
|
||||
+ ldw -52(%r3), %r20 /* r20 <- rvalue */
|
||||
|
||||
-.Lcheckint8:
|
||||
- comib,<>,n FFI_TYPE_UINT8, %r21, .Lcheckint16
|
||||
+ /* Giant jump table */
|
||||
+ /* 8-byte small struct */
|
||||
+ b,n .Lsmst8
|
||||
+ nop
|
||||
+ /* 7-byte small struct */
|
||||
+ b,n .Lsmst7
|
||||
+ nop
|
||||
+ /* 6-byte small struct */
|
||||
+ b,n .Lsmst6
|
||||
+ nop
|
||||
+ /* 5-byte small struct */
|
||||
+ b,n .Lsmst5
|
||||
+ nop
|
||||
+ /* 4-byte small struct */
|
||||
+ b,n .Lsmst4
|
||||
+ nop
|
||||
+ /* 3-byte small struct */
|
||||
+ b,n .Lsmst3
|
||||
+ nop
|
||||
+ /* 2-byte small struct */
|
||||
+ b,n .Lsmst2
|
||||
+ nop
|
||||
+ /* 1-byte small struct */
|
||||
b .Ldone
|
||||
stb %ret0, 0(%r20)
|
||||
-
|
||||
-.Lcheckint16:
|
||||
- comib,<>,n FFI_TYPE_UINT16, %r21, .Lcheckdbl
|
||||
+ /* void */
|
||||
+ b,n .Ldone
|
||||
+ nop
|
||||
+ /* int */
|
||||
b .Ldone
|
||||
- sth %ret0, 0(%r20)
|
||||
-
|
||||
-.Lcheckdbl:
|
||||
- comib,<>,n FFI_TYPE_DOUBLE, %r21, .Lcheckfloat
|
||||
+ stw %ret0, 0(%r20)
|
||||
+ /* float */
|
||||
+ b .Ldone
|
||||
+ fstw %fr4L,0(%r20)
|
||||
+ /* double */
|
||||
b .Ldone
|
||||
fstd %fr4,0(%r20)
|
||||
-
|
||||
-.Lcheckfloat:
|
||||
- comib,<>,n FFI_TYPE_FLOAT, %r21, .Lcheckll
|
||||
+ /* long double */
|
||||
b .Ldone
|
||||
- fstw %fr4L,0(%r20)
|
||||
+ fstd %fr4,0(%r20)
|
||||
+ /* unsigned int8 */
|
||||
+ b .Ldone
|
||||
+ stw %ret0, 0(%r20)
|
||||
+ /* sint8 */
|
||||
+ b .Ldone
|
||||
+ stw %ret0, 0(%r20)
|
||||
+ /* unsigned int16 */
|
||||
+ b .Ldone
|
||||
+ stw %ret0, 0(%r20)
|
||||
+ /* sint16 */
|
||||
+ b .Ldone
|
||||
+ stw %ret0, 0(%r20)
|
||||
+ /* unsigned int32 */
|
||||
+ b .Ldone
|
||||
+ stw %ret0, 0(%r20)
|
||||
+ /* sint32 */
|
||||
+ b .Ldone
|
||||
+ stw %ret0, 0(%r20)
|
||||
+ /* unsigned int64 */
|
||||
+ b,n .Luint64
|
||||
+ nop
|
||||
+ /* signed int64 */
|
||||
+ b,n .Lsint64
|
||||
+ nop
|
||||
+ /* large struct */
|
||||
+ b,n .Ldone
|
||||
+ nop
|
||||
+ /* pointer */
|
||||
+ b .Ldone
|
||||
+ stw %ret0, 0(%r20)
|
||||
+ /* complex */
|
||||
+ b,n .Ldone
|
||||
+ nop
|
||||
+
|
||||
+ /* Store the result according to the return type. */
|
||||
|
||||
-.Lcheckll:
|
||||
- comib,<>,n FFI_TYPE_UINT64, %r21, .Lchecksmst2
|
||||
+.Luint64:
|
||||
+.Lsint64:
|
||||
stw %ret0, 0(%r20)
|
||||
b .Ldone
|
||||
stw %ret1, 4(%r20)
|
||||
|
||||
-.Lchecksmst2:
|
||||
- comib,<>,n FFI_TYPE_SMALL_STRUCT2, %r21, .Lchecksmst3
|
||||
+.Lsmst2:
|
||||
/* 2-byte structs are returned in ret0 as ????xxyy. */
|
||||
extru %ret0, 23, 8, %r22
|
||||
stbs,ma %r22, 1(%r20)
|
||||
b .Ldone
|
||||
stb %ret0, 0(%r20)
|
||||
|
||||
-.Lchecksmst3:
|
||||
- comib,<>,n FFI_TYPE_SMALL_STRUCT3, %r21, .Lchecksmst4
|
||||
+.Lsmst3:
|
||||
/* 3-byte structs are returned in ret0 as ??xxyyzz. */
|
||||
extru %ret0, 15, 8, %r22
|
||||
stbs,ma %r22, 1(%r20)
|
||||
@@ -156,8 +208,7 @@ ffi_call_pa32:
|
||||
b .Ldone
|
||||
stb %ret0, 0(%r20)
|
||||
|
||||
-.Lchecksmst4:
|
||||
- comib,<>,n FFI_TYPE_SMALL_STRUCT4, %r21, .Lchecksmst5
|
||||
+.Lsmst4:
|
||||
/* 4-byte structs are returned in ret0 as wwxxyyzz. */
|
||||
extru %ret0, 7, 8, %r22
|
||||
stbs,ma %r22, 1(%r20)
|
||||
@@ -168,8 +219,7 @@ ffi_call_pa32:
|
||||
b .Ldone
|
||||
stb %ret0, 0(%r20)
|
||||
|
||||
-.Lchecksmst5:
|
||||
- comib,<>,n FFI_TYPE_SMALL_STRUCT5, %r21, .Lchecksmst6
|
||||
+.Lsmst5:
|
||||
/* 5 byte values are returned right justified:
|
||||
ret0 ret1
|
||||
5: ??????aa bbccddee */
|
||||
@@ -183,8 +233,7 @@ ffi_call_pa32:
|
||||
b .Ldone
|
||||
stb %ret1, 0(%r20)
|
||||
|
||||
-.Lchecksmst6:
|
||||
- comib,<>,n FFI_TYPE_SMALL_STRUCT6, %r21, .Lchecksmst7
|
||||
+.Lsmst6:
|
||||
/* 6 byte values are returned right justified:
|
||||
ret0 ret1
|
||||
6: ????aabb ccddeeff */
|
||||
@@ -200,8 +249,7 @@ ffi_call_pa32:
|
||||
b .Ldone
|
||||
stb %ret1, 0(%r20)
|
||||
|
||||
-.Lchecksmst7:
|
||||
- comib,<>,n FFI_TYPE_SMALL_STRUCT7, %r21, .Lchecksmst8
|
||||
+.Lsmst7:
|
||||
/* 7 byte values are returned right justified:
|
||||
ret0 ret1
|
||||
7: ??aabbcc ddeeffgg */
|
||||
@@ -219,8 +267,7 @@ ffi_call_pa32:
|
||||
b .Ldone
|
||||
stb %ret1, 0(%r20)
|
||||
|
||||
-.Lchecksmst8:
|
||||
- comib,<>,n FFI_TYPE_SMALL_STRUCT8, %r21, .Ldone
|
||||
+.Lsmst8:
|
||||
/* 8 byte values are returned right justified:
|
||||
ret0 ret1
|
||||
8: aabbccdd eeffgghh */
|
@ -1,36 +0,0 @@
|
||||
https://github.com/libffi/libffi/commit/c50c16d0bcb58952840184aa83e62c6d912bf779
|
||||
|
||||
From c50c16d0bcb58952840184aa83e62c6d912bf779 Mon Sep 17 00:00:00 2001
|
||||
From: Anthony Green <green@moxielogic.com>
|
||||
Date: Sun, 20 Nov 2022 12:20:40 -0500
|
||||
Subject: [PATCH] Fix large struct passing on PA-RISC
|
||||
|
||||
--- a/src/pa/ffi.c
|
||||
+++ b/src/pa/ffi.c
|
||||
@@ -376,10 +376,26 @@ extern void ffi_call_pa32(void (*)(UINT32 *, extended_cif *, unsigned),
|
||||
void ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
|
||||
{
|
||||
extended_cif ecif;
|
||||
+ size_t i, nargs = cif->nargs;
|
||||
+ ffi_type **arg_types = cif->arg_types;
|
||||
|
||||
ecif.cif = cif;
|
||||
ecif.avalue = avalue;
|
||||
|
||||
+ /* If we have any large structure arguments, make a copy so we are passing
|
||||
+ by value. */
|
||||
+ for (i = 0; i < nargs; i++)
|
||||
+ {
|
||||
+ ffi_type *at = arg_types[i];
|
||||
+ int size = at->size;
|
||||
+ if (at->type == FFI_TYPE_STRUCT && size > 8)
|
||||
+ {
|
||||
+ char *argcopy = alloca (size);
|
||||
+ memcpy (argcopy, avalue[i], size);
|
||||
+ avalue[i] = argcopy;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
/* If the return value is a struct and we don't have a return
|
||||
value address then we need to make one. */
|
||||
|
@ -1,34 +0,0 @@
|
||||
https://bugs.gentoo.org/915086
|
||||
https://github.com/libffi/libffi/pull/800
|
||||
|
||||
From 65f6869fd74630a9252ef89971b725b921f17061 Mon Sep 17 00:00:00 2001
|
||||
From: Alfred Wingate <parona@protonmail.com>
|
||||
Date: Tue, 10 Oct 2023 06:32:02 +0300
|
||||
Subject: [PATCH] Put optional symbols behind ifdefs
|
||||
|
||||
Signed-off-by: Alfred Wingate <parona@protonmail.com>
|
||||
--- a/libffi.map.in
|
||||
+++ b/libffi.map.in
|
||||
@@ -33,7 +33,10 @@ LIBFFI_BASE_8.0 {
|
||||
ffi_raw_to_ptrarray;
|
||||
ffi_raw_size;
|
||||
|
||||
+#if !FFI_NATIVE_RAW_API
|
||||
ffi_java_raw_call;
|
||||
+#endif
|
||||
+
|
||||
ffi_java_ptrarray_to_raw;
|
||||
ffi_java_raw_to_ptrarray;
|
||||
ffi_java_raw_size;
|
||||
@@ -62,8 +65,10 @@ LIBFFI_CLOSURE_8.0 {
|
||||
ffi_prep_closure_loc;
|
||||
ffi_prep_raw_closure;
|
||||
ffi_prep_raw_closure_loc;
|
||||
+#if !FFI_NATIVE_RAW_API
|
||||
ffi_prep_java_raw_closure;
|
||||
ffi_prep_java_raw_closure_loc;
|
||||
+#endif
|
||||
} LIBFFI_BASE_8.0;
|
||||
#endif
|
||||
|
||||
|
@ -1,28 +0,0 @@
|
||||
https://github.com/libffi/libffi/issues/778
|
||||
https://bugs.gentoo.org/882071
|
||||
|
||||
Fix incorrect type for passing floats. Thanks to Petr Sumbera and Richard Henderson
|
||||
for figuring it out on the upstream bug.
|
||||
--- a/src/sparc/ffi64.c
|
||||
+++ b/src/sparc/ffi64.c
|
||||
@@ -382,13 +382,19 @@ ffi_prep_args_v9(ffi_cif *cif, unsigned long *argp, void *rvalue, void **avalue)
|
||||
*argp++ = *(SINT32 *)a;
|
||||
break;
|
||||
case FFI_TYPE_UINT32:
|
||||
- case FFI_TYPE_FLOAT:
|
||||
*argp++ = *(UINT32 *)a;
|
||||
break;
|
||||
case FFI_TYPE_SINT64:
|
||||
case FFI_TYPE_UINT64:
|
||||
case FFI_TYPE_POINTER:
|
||||
+ *argp++ = *(UINT64 *)a;
|
||||
+ break;
|
||||
+ case FFI_TYPE_FLOAT:
|
||||
+ flags |= SPARC_FLAG_FP_ARGS;
|
||||
+ *argp++ = *(UINT32 *)a;
|
||||
+ break;
|
||||
case FFI_TYPE_DOUBLE:
|
||||
+ flags |= SPARC_FLAG_FP_ARGS;
|
||||
*argp++ = *(UINT64 *)a;
|
||||
break;
|
||||
|
@ -1,39 +0,0 @@
|
||||
https://github.com/libffi/libffi/issues/760
|
||||
https://github.com/libffi/libffi/commit/ce077e5565366171aa1b4438749b0922fce887a4
|
||||
|
||||
From ce077e5565366171aa1b4438749b0922fce887a4 Mon Sep 17 00:00:00 2001
|
||||
From: serge-sans-paille <serge.guelton@telecom-bretagne.eu>
|
||||
Date: Thu, 2 Feb 2023 14:46:29 +0000
|
||||
Subject: [PATCH] Forward declare open_temp_exec_file (#764)
|
||||
|
||||
It's defined in closures.c and used in tramp.c.
|
||||
Also declare it as an hidden symbol, as it should be.
|
||||
|
||||
Co-authored-by: serge-sans-paille <sguelton@mozilla.com>
|
||||
--- a/include/ffi_common.h
|
||||
+++ b/include/ffi_common.h
|
||||
@@ -128,6 +128,10 @@ void *ffi_data_to_code_pointer (void *data) FFI_HIDDEN;
|
||||
static trampoline. */
|
||||
int ffi_tramp_is_present (void *closure) FFI_HIDDEN;
|
||||
|
||||
+/* Return a file descriptor of a temporary zero-sized file in a
|
||||
+ writable and executable filesystem. */
|
||||
+int open_temp_exec_file(void) FFI_HIDDEN;
|
||||
+
|
||||
/* Extended cif, used in callback from assembly routine */
|
||||
typedef struct
|
||||
{
|
||||
--- a/src/tramp.c
|
||||
+++ b/src/tramp.c
|
||||
@@ -39,6 +39,10 @@
|
||||
#ifdef __linux__
|
||||
#define _GNU_SOURCE 1
|
||||
#endif
|
||||
+
|
||||
+#include <ffi.h>
|
||||
+#include <ffi_common.h>
|
||||
+
|
||||
#include <stdio.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -1,104 +0,0 @@
|
||||
https://github.com/libffi/libffi/commit/efb98a72d8b9bdb71b4f972efced073bee3b30fc
|
||||
https://github.com/libffi/libffi/commit/92d384df196a099fde384f9178864dbfe8c6b0fc
|
||||
|
||||
From efb98a72d8b9bdb71b4f972efced073bee3b30fc Mon Sep 17 00:00:00 2001
|
||||
From: Anthony Green <green@moxielogic.com>
|
||||
Date: Sun, 15 Sep 2024 07:31:33 -0400
|
||||
Subject: [PATCH] Robustify floating point comparison in test
|
||||
|
||||
---
|
||||
testsuite/libffi.call/struct_int_float.c | 24 ++++++++++++------------
|
||||
1 file changed, 12 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/testsuite/libffi.call/struct_int_float.c b/testsuite/libffi.call/struct_int_float.c
|
||||
index dab1d1fed..82685814c 100644
|
||||
--- a/testsuite/libffi.call/struct_int_float.c
|
||||
+++ b/testsuite/libffi.call/struct_int_float.c
|
||||
@@ -54,35 +54,35 @@ int main (void)
|
||||
values[4] = &ts_arg[4];
|
||||
args[5] = &ts_type;
|
||||
values[5] = &ts_arg[5];
|
||||
-
|
||||
+
|
||||
/* Initialize the cif */
|
||||
CHECK(ffi_prep_cif(&cif, ABI_NUM, 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);
|
||||
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);
|
||||
+
|
||||
+ CHECK(fabs(rfloat - 11.11) < FLT_EPSILON);
|
||||
|
||||
exit(0);
|
||||
}
|
||||
|
||||
From 92d384df196a099fde384f9178864dbfe8c6b0fc Mon Sep 17 00:00:00 2001
|
||||
From: Anthony Green <green@moxielogic.com>
|
||||
Date: Sun, 15 Sep 2024 12:32:29 -0400
|
||||
Subject: [PATCH] Fix floating point compare
|
||||
|
||||
---
|
||||
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 82685814..66ef6c45 100644
|
||||
--- a/testsuite/libffi.call/struct_int_float.c
|
||||
+++ b/testsuite/libffi.call/struct_int_float.c
|
||||
@@ -14,11 +14,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;
|
||||
}
|
||||
@@ -82,7 +82,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);
|
||||
}
|
@ -1,124 +0,0 @@
|
||||
https://github.com/libffi/libffi/commit/d21881f55ed4a44d464c9091871e69b0bb47611a
|
||||
|
||||
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)
|
||||
|
||||
* 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 | 88 ++++++++++++++++++++++++
|
||||
2 files changed, 89 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 6a8e37fc5..39f0bfd33 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 000000000..dab1d1fed
|
||||
--- /dev/null
|
||||
+++ b/testsuite/libffi.call/struct_int_float.c
|
||||
@@ -0,0 +1,88 @@
|
||||
+/* Area: ffi_call
|
||||
+ Purpose: Demonstrate structures with integers corrupting earlier floats
|
||||
+ Limitations: none.
|
||||
+ PR: #848
|
||||
+ Originator: kellda */
|
||||
+
|
||||
+/* { dg-do run } */
|
||||
+#include "ffitest.h"
|
||||
+
|
||||
+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, ABI_NUM, 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);
|
||||
+}
|
||||
|
@ -1,38 +0,0 @@
|
||||
From 4354fe1434a37b781ff19f5a6be51ec4e982ad5a Mon Sep 17 00:00:00 2001
|
||||
Message-ID: <4354fe1434a37b781ff19f5a6be51ec4e982ad5a.1739062746.git.sam@gentoo.org>
|
||||
From: Sam James <sam@gentoo.org>
|
||||
Date: Sun, 9 Feb 2025 00:54:28 +0000
|
||||
Subject: [PATCH] Revert "Fix x86/ffi64 calls with 6 gp and some sse registers
|
||||
(#848)"
|
||||
|
||||
This reverts commit d21881f55ed4a44d464c9091871e69b0bb47611a.
|
||||
|
||||
Bug: https://github.com/libffi/libffi/issues/879
|
||||
Bug: https://bugs.gentoo.org/949051
|
||||
Signed-off-by: Sam James <sam@gentoo.org>
|
||||
--- a/src/x86/ffi64.c
|
||||
+++ b/src/x86/ffi64.c
|
||||
@@ -654,7 +654,7 @@ ffi_call_int (ffi_cif *cif, void (*fn)(void), void *rvalue,
|
||||
break;
|
||||
default:
|
||||
reg_args->gpr[gprcount] = 0;
|
||||
- memcpy (®_args->gpr[gprcount], a, sizeof(UINT64));
|
||||
+ memcpy (®_args->gpr[gprcount], a, size);
|
||||
}
|
||||
gprcount++;
|
||||
break;
|
||||
--- a/testsuite/libffi.call/struct_int_float.c
|
||||
+++ b/testsuite/libffi.call/struct_int_float.c
|
||||
@@ -5,6 +5,7 @@
|
||||
Originator: kellda */
|
||||
|
||||
/* { dg-do run } */
|
||||
+/* { dg-skip-if "libffi bug #879" { *-*-* } { "*" } } */
|
||||
#include "ffitest.h"
|
||||
|
||||
typedef struct
|
||||
|
||||
base-commit: 1716f81e9a115d340429504563bc8e7fb2eeef2b
|
||||
--
|
||||
2.48.1
|
||||
|
@ -1,83 +0,0 @@
|
||||
# Copyright 1999-2024 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit multilib-minimal preserve-libs
|
||||
|
||||
MY_PV=${PV/_rc/-rc}
|
||||
MY_P=${PN}-${MY_PV}
|
||||
|
||||
DESCRIPTION="Portable, high level programming interface to various calling conventions"
|
||||
HOMEPAGE="https://sourceware.org/libffi/"
|
||||
SRC_URI="https://github.com/libffi/libffi/releases/download/v${MY_PV}/${MY_P}.tar.gz"
|
||||
S="${WORKDIR}"/${MY_P}
|
||||
|
||||
LICENSE="MIT"
|
||||
# This is a core package which is depended on by e.g. Python
|
||||
# Please use preserve-libs.eclass in pkg_{pre,post}inst to cover users
|
||||
# with FEATURES="-preserved-libs" or another package manager if SONAME
|
||||
# changes.
|
||||
SLOT="0/8" # SONAME=libffi.so.8
|
||||
KEYWORDS="~alpha amd64 arm arm64 hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
|
||||
IUSE="debug exec-static-trampoline pax-kernel static-libs test"
|
||||
|
||||
RESTRICT="!test? ( test )"
|
||||
BDEPEND="test? ( dev-util/dejagnu )"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/${P}-hppa-large-struct.patch
|
||||
"${FILESDIR}"/${P}-hppa-closure-function-ptrs.patch
|
||||
"${FILESDIR}"/${P}-hppa-jump-table.patch
|
||||
"${FILESDIR}"/${P}-sparc-float-typo.patch
|
||||
"${FILESDIR}"/${P}-lld-17.patch
|
||||
"${FILESDIR}"/${P}-trampoline-c99.patch
|
||||
)
|
||||
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
if [[ ${CHOST} == arm64-*-darwin* ]] ; then
|
||||
# ensure we use aarch64 asm, not x86 on arm64
|
||||
sed -i -e 's/aarch64\*-\*-\*/arm64*-*-*|&/' \
|
||||
configure configure.host || die
|
||||
fi
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
# --includedir= path maintains a few properties:
|
||||
# 1. have stable name across libffi versions: some packages like
|
||||
# dev-lang/ghc or kde-frameworks/networkmanager-qt embed
|
||||
# ${includedir} at build-time. Don't require those to be
|
||||
# rebuilt unless SONAME changes. bug #695788
|
||||
#
|
||||
# We use /usr/.../${PN} (instead of former /usr/.../${P}).
|
||||
#
|
||||
# 2. have ${ABI}-specific location as ffi.h is target-dependent.
|
||||
#
|
||||
# We use /usr/$(get_libdir)/... to have ABI identifier.
|
||||
ECONF_SOURCE="${S}" econf \
|
||||
--includedir="${EPREFIX}"/usr/$(get_libdir)/${PN}/include \
|
||||
--disable-multi-os-directory \
|
||||
$(use_enable static-libs static) \
|
||||
$(use_enable exec-static-trampoline exec-static-tramp) \
|
||||
$(use_enable pax-kernel pax_emutramp) \
|
||||
$(use_enable debug)
|
||||
}
|
||||
|
||||
multilib_src_test() {
|
||||
emake -Onone check
|
||||
}
|
||||
|
||||
multilib_src_install_all() {
|
||||
einstalldocs
|
||||
find "${ED}" -name "*.la" -delete || die
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
||||
preserve_old_lib /usr/$(get_libdir)/libffi.so.7
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
preserve_old_lib_notify /usr/$(get_libdir)/libffi.so.7
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit multilib-minimal preserve-libs
|
||||
inherit dot-a multilib-minimal preserve-libs
|
||||
|
||||
MY_PV=${PV/_rc/-rc}
|
||||
MY_P=${PN}-${MY_PV}
|
||||
@ -17,7 +17,7 @@ if [[ ${PV} == 9999 ]] ; then
|
||||
else
|
||||
SRC_URI="https://github.com/libffi/libffi/releases/download/v${MY_PV}/${MY_P}.tar.gz"
|
||||
|
||||
KEYWORDS="~alpha amd64 arm arm64 hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
|
||||
KEYWORDS="~alpha amd64 arm arm64 hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
|
||||
fi
|
||||
|
||||
S="${WORKDIR}"/${MY_P}
|
||||
@ -55,6 +55,11 @@ src_prepare() {
|
||||
fi
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
use static-libs && lto-guarantee-fat
|
||||
multilib-minimal_src_configure
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
# --includedir= path maintains a few properties:
|
||||
# 1. have stable name across libffi versions: some packages like
|
||||
@ -83,6 +88,7 @@ multilib_src_test() {
|
||||
multilib_src_install_all() {
|
||||
einstalldocs
|
||||
find "${ED}" -name "*.la" -delete || die
|
||||
strip-lto-bytecode
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
||||
|
@ -1,73 +0,0 @@
|
||||
# Copyright 1999-2024 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit multilib-minimal preserve-libs
|
||||
|
||||
MY_PV=${PV/_rc/-rc}
|
||||
MY_P=${PN}-${MY_PV}
|
||||
|
||||
DESCRIPTION="Portable, high level programming interface to various calling conventions"
|
||||
HOMEPAGE="https://sourceware.org/libffi/"
|
||||
SRC_URI="https://github.com/libffi/libffi/releases/download/v${MY_PV}/${MY_P}.tar.gz"
|
||||
S="${WORKDIR}"/${MY_P}
|
||||
|
||||
LICENSE="MIT"
|
||||
# This is a core package which is depended on by e.g. Python.
|
||||
# Please use preserve-libs.eclass in pkg_{pre,post}inst to cover users
|
||||
# with FEATURES="-preserved-libs" or another package manager if SONAME changes.
|
||||
SLOT="0/8" # SONAME=libffi.so.8
|
||||
KEYWORDS="~alpha amd64 arm arm64 hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
|
||||
IUSE="debug exec-static-trampoline pax-kernel static-libs test"
|
||||
|
||||
RESTRICT="!test? ( test )"
|
||||
BDEPEND="test? ( dev-util/dejagnu )"
|
||||
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
if [[ ${CHOST} == arm64-*-darwin* ]] ; then
|
||||
# ensure we use aarch64 asm, not x86 on arm64
|
||||
sed -i -e 's/aarch64\*-\*-\*/arm64*-*-*|&/' \
|
||||
configure configure.host || die
|
||||
fi
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
# --includedir= path maintains a few properties:
|
||||
# 1. have stable name across libffi versions: some packages like
|
||||
# dev-lang/ghc or kde-frameworks/networkmanager-qt embed
|
||||
# ${includedir} at build-time. Don't require those to be
|
||||
# rebuilt unless SONAME changes. bug #695788
|
||||
#
|
||||
# We use /usr/.../${PN} (instead of former /usr/.../${P}).
|
||||
#
|
||||
# 2. have ${ABI}-specific location as ffi.h is target-dependent.
|
||||
#
|
||||
# We use /usr/$(get_libdir)/... to have ABI identifier.
|
||||
ECONF_SOURCE="${S}" econf \
|
||||
--includedir="${EPREFIX}"/usr/$(get_libdir)/${PN}/include \
|
||||
--disable-multi-os-directory \
|
||||
$(use_enable static-libs static) \
|
||||
$(use_enable exec-static-trampoline exec-static-tramp) \
|
||||
$(use_enable pax-kernel pax_emutramp) \
|
||||
$(use_enable debug)
|
||||
}
|
||||
|
||||
multilib_src_test() {
|
||||
emake -Onone check
|
||||
}
|
||||
|
||||
multilib_src_install_all() {
|
||||
einstalldocs
|
||||
find "${ED}" -name "*.la" -delete || die
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
||||
preserve_old_lib /usr/$(get_libdir)/libffi.so.7
|
||||
}
|
||||
|
||||
pkg_postinst() {
|
||||
preserve_old_lib_notify /usr/$(get_libdir)/libffi.so.7
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit multilib-minimal preserve-libs
|
||||
inherit dot-a multilib-minimal preserve-libs
|
||||
|
||||
MY_PV=${PV/_rc/-rc}
|
||||
MY_P=${PN}-${MY_PV}
|
||||
@ -15,9 +15,10 @@ if [[ ${PV} == 9999 ]] ; then
|
||||
EGIT_REPO_URI="https://github.com/libffi/libffi"
|
||||
inherit autotools git-r3
|
||||
else
|
||||
inherit libtool
|
||||
SRC_URI="https://github.com/libffi/libffi/releases/download/v${MY_PV}/${MY_P}.tar.gz"
|
||||
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
|
||||
KEYWORDS="~alpha amd64 arm arm64 ~hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
|
||||
fi
|
||||
|
||||
S="${WORKDIR}"/${MY_P}
|
||||
@ -39,7 +40,11 @@ PATCHES=(
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
[[ ${PV} == 9999 ]] && eautoreconf
|
||||
if [[ ${PV} == 9999 ]] ; then
|
||||
eautoreconf
|
||||
else
|
||||
elibtoolize
|
||||
fi
|
||||
|
||||
if [[ ${CHOST} == arm64-*-darwin* ]] ; then
|
||||
# ensure we use aarch64 asm, not x86 on arm64
|
||||
@ -48,6 +53,11 @@ src_prepare() {
|
||||
fi
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
use static-libs && lto-guarantee-fat
|
||||
multilib-minimal_src_configure
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
# --includedir= path maintains a few properties:
|
||||
# 1. have stable name across libffi versions: some packages like
|
||||
@ -76,6 +86,7 @@ multilib_src_test() {
|
||||
multilib_src_install_all() {
|
||||
einstalldocs
|
||||
find "${ED}" -name "*.la" -delete || die
|
||||
strip-lto-bytecode
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit multilib-minimal preserve-libs
|
||||
inherit dot-a multilib-minimal preserve-libs
|
||||
|
||||
MY_PV=${PV/_rc/-rc}
|
||||
MY_P=${PN}-${MY_PV}
|
||||
@ -15,6 +15,7 @@ if [[ ${PV} == 9999 ]] ; then
|
||||
EGIT_REPO_URI="https://github.com/libffi/libffi"
|
||||
inherit autotools git-r3
|
||||
else
|
||||
inherit libtool
|
||||
SRC_URI="https://github.com/libffi/libffi/releases/download/v${MY_PV}/${MY_P}.tar.gz"
|
||||
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
|
||||
@ -33,13 +34,17 @@ RESTRICT="!test? ( test )"
|
||||
BDEPEND="test? ( dev-util/dejagnu )"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/${PN}-3.4.7-Revert-Fix-x86-ffi64-calls-with-6-gp-and-some-sse-re.patch
|
||||
"${FILESDIR}"/${PN}-3.4.8-pa-add-.note.GNU-stack-marker-to-linux.S.patch
|
||||
)
|
||||
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
[[ ${PV} == 9999 ]] && eautoreconf
|
||||
if [[ ${PV} == 9999 ]] ; then
|
||||
eautoreconf
|
||||
else
|
||||
elibtoolize
|
||||
fi
|
||||
|
||||
if [[ ${CHOST} == arm64-*-darwin* ]] ; then
|
||||
# ensure we use aarch64 asm, not x86 on arm64
|
||||
@ -48,6 +53,11 @@ src_prepare() {
|
||||
fi
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
use static-libs && lto-guarantee-fat
|
||||
multilib-minimal_src_configure
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
# --includedir= path maintains a few properties:
|
||||
# 1. have stable name across libffi versions: some packages like
|
||||
@ -63,6 +73,7 @@ multilib_src_configure() {
|
||||
ECONF_SOURCE="${S}" econf \
|
||||
--includedir="${EPREFIX}"/usr/$(get_libdir)/${PN}/include \
|
||||
--disable-multi-os-directory \
|
||||
--with-pic \
|
||||
$(use_enable static-libs static) \
|
||||
$(use_enable exec-static-trampoline exec-static-tramp) \
|
||||
$(use_enable pax-kernel pax_emutramp) \
|
||||
@ -76,6 +87,7 @@ multilib_src_test() {
|
||||
multilib_src_install_all() {
|
||||
einstalldocs
|
||||
find "${ED}" -name "*.la" -delete || die
|
||||
strip-lto-bytecode
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
@ -3,7 +3,7 @@
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit multilib-minimal preserve-libs
|
||||
inherit dot-a multilib-minimal preserve-libs
|
||||
|
||||
MY_PV=${PV/_rc/-rc}
|
||||
MY_P=${PN}-${MY_PV}
|
||||
@ -15,9 +15,12 @@ if [[ ${PV} == 9999 ]] ; then
|
||||
EGIT_REPO_URI="https://github.com/libffi/libffi"
|
||||
inherit autotools git-r3
|
||||
else
|
||||
inherit libtool
|
||||
SRC_URI="https://github.com/libffi/libffi/releases/download/v${MY_PV}/${MY_P}.tar.gz"
|
||||
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
|
||||
if [[ ${PV} != *@(alpha|beta|pre|rc)* ]] ; then
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
|
||||
fi
|
||||
fi
|
||||
|
||||
S="${WORKDIR}"/${MY_P}
|
||||
@ -35,7 +38,11 @@ BDEPEND="test? ( dev-util/dejagnu )"
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
[[ ${PV} == 9999 ]] && eautoreconf
|
||||
if [[ ${PV} == 9999 ]] ; then
|
||||
eautoreconf
|
||||
else
|
||||
elibtoolize
|
||||
fi
|
||||
|
||||
if [[ ${CHOST} == arm64-*-darwin* ]] ; then
|
||||
# ensure we use aarch64 asm, not x86 on arm64
|
||||
@ -44,6 +51,11 @@ src_prepare() {
|
||||
fi
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
use static-libs && lto-guarantee-fat
|
||||
multilib-minimal_src_configure
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
# --includedir= path maintains a few properties:
|
||||
# 1. have stable name across libffi versions: some packages like
|
||||
@ -59,6 +71,7 @@ multilib_src_configure() {
|
||||
ECONF_SOURCE="${S}" econf \
|
||||
--includedir="${EPREFIX}"/usr/$(get_libdir)/${PN}/include \
|
||||
--disable-multi-os-directory \
|
||||
--with-pic \
|
||||
$(use_enable static-libs static) \
|
||||
$(use_enable exec-static-trampoline exec-static-tramp) \
|
||||
$(use_enable pax-kernel pax_emutramp) \
|
||||
@ -72,6 +85,7 @@ multilib_src_test() {
|
||||
multilib_src_install_all() {
|
||||
einstalldocs
|
||||
find "${ED}" -name "*.la" -delete || die
|
||||
strip-lto-bytecode
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
@ -3,7 +3,7 @@
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit multilib-minimal preserve-libs
|
||||
inherit dot-a multilib-minimal preserve-libs
|
||||
|
||||
MY_PV=${PV/_rc/-rc}
|
||||
MY_P=${PN}-${MY_PV}
|
||||
@ -13,11 +13,14 @@ HOMEPAGE="https://sourceware.org/libffi/"
|
||||
|
||||
if [[ ${PV} == 9999 ]] ; then
|
||||
EGIT_REPO_URI="https://github.com/libffi/libffi"
|
||||
inherit git-r3
|
||||
inherit autotools git-r3
|
||||
else
|
||||
inherit libtool
|
||||
SRC_URI="https://github.com/libffi/libffi/releases/download/v${MY_PV}/${MY_P}.tar.gz"
|
||||
|
||||
KEYWORDS="~alpha amd64 arm arm64 hppa ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 ~sparc x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
|
||||
if [[ ${PV} != *@(alpha|beta|pre|rc)* ]] ; then
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
|
||||
fi
|
||||
fi
|
||||
|
||||
S="${WORKDIR}"/${MY_P}
|
||||
@ -27,29 +30,20 @@ LICENSE="MIT"
|
||||
# Please use preserve-libs.eclass in pkg_{pre,post}inst to cover users
|
||||
# with FEATURES="-preserved-libs" or another package manager if SONAME changes.
|
||||
SLOT="0/8" # SONAME=libffi.so.8
|
||||
IUSE="debug exec-static-trampoline pax-kernel static-libs test"
|
||||
IUSE="debug +exec-static-trampoline pax-kernel static-libs test"
|
||||
|
||||
RESTRICT="!test? ( test )"
|
||||
BDEPEND="test? ( dev-util/dejagnu )"
|
||||
|
||||
PATCHES=(
|
||||
"${FILESDIR}"/${P}-arm64-bti.patch
|
||||
"${FILESDIR}"/${P}-arm64-bti-spelling.patch
|
||||
"${FILESDIR}"/${P}-arm64-support-pac.patch
|
||||
"${FILESDIR}"/${P}-arm64-fix-build.patch
|
||||
"${FILESDIR}"/${P}-sparc-struct-targs.patch
|
||||
"${FILESDIR}"/${P}-test-typo.patch
|
||||
"${FILESDIR}"/${P}-x86-sse.patch
|
||||
"${FILESDIR}"/${P}-arm64-cfi.patch
|
||||
"${FILESDIR}"/${P}-asan.patch
|
||||
"${FILESDIR}"/${P}-tests.patch
|
||||
"${FILESDIR}"/${P}-regenerate-autotools.patch
|
||||
"${FILESDIR}"/${P}-c23-tests.patch
|
||||
)
|
||||
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
if [[ ${PV} == 9999 ]] ; then
|
||||
eautoreconf
|
||||
else
|
||||
elibtoolize
|
||||
fi
|
||||
|
||||
if [[ ${CHOST} == arm64-*-darwin* ]] ; then
|
||||
# ensure we use aarch64 asm, not x86 on arm64
|
||||
sed -i -e 's/aarch64\*-\*-\*/arm64*-*-*|&/' \
|
||||
@ -57,6 +51,11 @@ src_prepare() {
|
||||
fi
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
use static-libs && lto-guarantee-fat
|
||||
multilib-minimal_src_configure
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
# --includedir= path maintains a few properties:
|
||||
# 1. have stable name across libffi versions: some packages like
|
||||
@ -72,6 +71,7 @@ multilib_src_configure() {
|
||||
ECONF_SOURCE="${S}" econf \
|
||||
--includedir="${EPREFIX}"/usr/$(get_libdir)/${PN}/include \
|
||||
--disable-multi-os-directory \
|
||||
--with-pic \
|
||||
$(use_enable static-libs static) \
|
||||
$(use_enable exec-static-trampoline exec-static-tramp) \
|
||||
$(use_enable pax-kernel pax_emutramp) \
|
||||
@ -85,6 +85,7 @@ multilib_src_test() {
|
||||
multilib_src_install_all() {
|
||||
einstalldocs
|
||||
find "${ED}" -name "*.la" -delete || die
|
||||
strip-lto-bytecode
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
@ -3,7 +3,7 @@
|
||||
|
||||
EAPI=8
|
||||
|
||||
inherit multilib-minimal preserve-libs
|
||||
inherit dot-a multilib-minimal preserve-libs
|
||||
|
||||
MY_PV=${PV/_rc/-rc}
|
||||
MY_P=${PN}-${MY_PV}
|
||||
@ -15,9 +15,12 @@ if [[ ${PV} == 9999 ]] ; then
|
||||
EGIT_REPO_URI="https://github.com/libffi/libffi"
|
||||
inherit autotools git-r3
|
||||
else
|
||||
inherit libtool
|
||||
SRC_URI="https://github.com/libffi/libffi/releases/download/v${MY_PV}/${MY_P}.tar.gz"
|
||||
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
|
||||
if [[ ${PV} != *@(alpha|beta|pre|rc)* ]] ; then
|
||||
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
|
||||
fi
|
||||
fi
|
||||
|
||||
S="${WORKDIR}"/${MY_P}
|
||||
@ -35,7 +38,11 @@ BDEPEND="test? ( dev-util/dejagnu )"
|
||||
src_prepare() {
|
||||
default
|
||||
|
||||
[[ ${PV} == 9999 ]] && eautoreconf
|
||||
if [[ ${PV} == 9999 ]] ; then
|
||||
eautoreconf
|
||||
else
|
||||
elibtoolize
|
||||
fi
|
||||
|
||||
if [[ ${CHOST} == arm64-*-darwin* ]] ; then
|
||||
# ensure we use aarch64 asm, not x86 on arm64
|
||||
@ -44,6 +51,11 @@ src_prepare() {
|
||||
fi
|
||||
}
|
||||
|
||||
src_configure() {
|
||||
use static-libs && lto-guarantee-fat
|
||||
multilib-minimal_src_configure
|
||||
}
|
||||
|
||||
multilib_src_configure() {
|
||||
# --includedir= path maintains a few properties:
|
||||
# 1. have stable name across libffi versions: some packages like
|
||||
@ -59,6 +71,7 @@ multilib_src_configure() {
|
||||
ECONF_SOURCE="${S}" econf \
|
||||
--includedir="${EPREFIX}"/usr/$(get_libdir)/${PN}/include \
|
||||
--disable-multi-os-directory \
|
||||
--with-pic \
|
||||
$(use_enable static-libs static) \
|
||||
$(use_enable exec-static-trampoline exec-static-tramp) \
|
||||
$(use_enable pax-kernel pax_emutramp) \
|
||||
@ -72,6 +85,7 @@ multilib_src_test() {
|
||||
multilib_src_install_all() {
|
||||
einstalldocs
|
||||
find "${ED}" -name "*.la" -delete || die
|
||||
strip-lto-bytecode
|
||||
}
|
||||
|
||||
pkg_preinst() {
|
||||
|
Loading…
Reference in New Issue
Block a user