aboutsummaryrefslogtreecommitdiffstats
path: root/main/libffi
diff options
context:
space:
mode:
authorNils Andreas Svee <me@lochnair.net>2017-12-19 16:04:38 +0100
committerCarlo Landmeter <clandmeter@alpinelinux.org>2018-12-10 13:41:04 +0000
commit58abf3bc741dd735cb7570fb151cfc1a63eb8e33 (patch)
tree8ad73c8b7c335d8b77d5b5faa4ed8fc73c06446c /main/libffi
parent706c4511abb206dbc34f4ad5e0e72c5da6a8ef09 (diff)
downloadaports-58abf3bc741dd735cb7570fb151cfc1a63eb8e33.tar.bz2
aports-58abf3bc741dd735cb7570fb151cfc1a63eb8e33.tar.xz
main/libffi: add patch fixing compilation issue with mips softfloat
Taken from upstream: https://github.com/libffi/libffi/commit/7a0d2c83bf2b0422e2d0ed297f847fc1eeb88bb3
Diffstat (limited to 'main/libffi')
-rw-r--r--main/libffi/APKBUILD4
-rw-r--r--main/libffi/mips-softfloat.patch158
2 files changed, 161 insertions, 1 deletions
diff --git a/main/libffi/APKBUILD b/main/libffi/APKBUILD
index 24125f7706..a9a767a60a 100644
--- a/main/libffi/APKBUILD
+++ b/main/libffi/APKBUILD
@@ -16,6 +16,7 @@ source="ftp://sourceware.org/pub/$pkgname/$pkgname-$pkgver.tar.gz
gnu-linux-define.patch
pax-dlmmap.patch
use-stdc-compatible-linux-define.patch
+ mips-softfloat.patch
"
builddir="$srcdir"/$pkgname-$pkgver
@@ -48,4 +49,5 @@ package() {
sha512sums="980ca30a8d76f963fca722432b1fe5af77d7a4e4d2eac5144fbc5374d4c596609a293440573f4294207e1bdd9fda80ad1e1cafb2ffb543df5a275bc3bd546483 libffi-3.2.1.tar.gz
264af568ae5388d50f647f891a406945c73cc358692266f65ad341787c0bf5f6bf31203b86c39fa1b338101c1a6d2f4fec60f95a90d379951ff5153f8f9e178f gnu-linux-define.patch
72486b389db16055ae4d7d33ba0cb05840537e28fe7a86aa89e2cb922592125d99c18c26c5df7ffde6282742e79f2b9126353e58b58f091f0486589e14dd6474 pax-dlmmap.patch
-d15aaf7ecf6fe7a1532695a515a496d462c3930a50ec3e2a019713ecfc810a112250563c41f018834323f201f1c814e7c94d296f167706af300907264ee80924 use-stdc-compatible-linux-define.patch"
+d15aaf7ecf6fe7a1532695a515a496d462c3930a50ec3e2a019713ecfc810a112250563c41f018834323f201f1c814e7c94d296f167706af300907264ee80924 use-stdc-compatible-linux-define.patch
+e306a6cf0a3084e0ab519c291b70c57ab6d62d20879c224860d9a8969015877077b5180607fd407d8b80a0d2ce28239fc5f899a64305554eb7cf2f1f0792ce95 mips-softfloat.patch"
diff --git a/main/libffi/mips-softfloat.patch b/main/libffi/mips-softfloat.patch
new file mode 100644
index 0000000000..bf2ac5d34d
--- /dev/null
+++ b/main/libffi/mips-softfloat.patch
@@ -0,0 +1,158 @@
+diff --git a/src/mips/n32.S b/src/mips/n32.S
+index b402c88c..edc6905c 100644
+--- a/src/mips/n32.S
++++ b/src/mips/n32.S
+@@ -112,6 +112,16 @@ loadregs:
+
+ REG_L t6, 3*FFI_SIZEOF_ARG($fp) # load the flags word into t6.
+
++#ifdef __mips_soft_float
++ REG_L a0, 0*FFI_SIZEOF_ARG(t9)
++ REG_L a1, 1*FFI_SIZEOF_ARG(t9)
++ REG_L a2, 2*FFI_SIZEOF_ARG(t9)
++ REG_L a3, 3*FFI_SIZEOF_ARG(t9)
++ REG_L a4, 4*FFI_SIZEOF_ARG(t9)
++ REG_L a5, 5*FFI_SIZEOF_ARG(t9)
++ REG_L a6, 6*FFI_SIZEOF_ARG(t9)
++ REG_L a7, 7*FFI_SIZEOF_ARG(t9)
++#else
+ and t4, t6, ((1<<FFI_FLAG_BITS)-1)
+ REG_L a0, 0*FFI_SIZEOF_ARG(t9)
+ beqz t4, arg1_next
+@@ -198,6 +208,7 @@ arg7_next:
+ arg8_doublep:
+ l.d $f19, 7*FFI_SIZEOF_ARG(t9)
+ arg8_next:
++#endif
+
+ callit:
+ # Load the function pointer
+@@ -222,6 +233,7 @@ retint:
+ b epilogue
+
+ retfloat:
++#ifndef __mips_soft_float
+ bne t6, FFI_TYPE_FLOAT, retdouble
+ jal t9
+ REG_L t4, 4*FFI_SIZEOF_ARG($fp)
+@@ -280,6 +292,7 @@ retstruct_f_d:
+ s.s $f0, 0(t4)
+ s.d $f2, 8(t4)
+ b epilogue
++#endif
+
+ retstruct_d_soft:
+ bne t6, FFI_TYPE_STRUCT_D_SOFT, retstruct_f_soft
+@@ -483,6 +496,7 @@ $do_closure:
+ REG_S a6, A6_OFF2($sp)
+ REG_S a7, A7_OFF2($sp)
+
++#ifndef __mips_soft_float
+ # Store all possible float/double registers.
+ s.d $f12, F12_OFF2($sp)
+ s.d $f13, F13_OFF2($sp)
+@@ -492,6 +506,7 @@ $do_closure:
+ s.d $f17, F17_OFF2($sp)
+ s.d $f18, F18_OFF2($sp)
+ s.d $f19, F19_OFF2($sp)
++#endif
+
+ jalr t9
+
+@@ -506,6 +521,7 @@ cls_retint:
+ b cls_epilogue
+
+ cls_retfloat:
++#ifndef __mips_soft_float
+ bne v0, FFI_TYPE_FLOAT, cls_retdouble
+ l.s $f0, V0_OFF2($sp)
+ b cls_epilogue
+@@ -548,6 +564,7 @@ cls_retstruct_f_d:
+ l.s $f0, V0_OFF2($sp)
+ l.d $f2, V1_OFF2($sp)
+ b cls_epilogue
++#endif
+
+ cls_retstruct_small2:
+ REG_L v0, V0_OFF2($sp)
+diff --git a/src/mips/o32.S b/src/mips/o32.S
+index 69324e60..44e74cb9 100644
+--- a/src/mips/o32.S
++++ b/src/mips/o32.S
+@@ -82,13 +82,16 @@ sixteen:
+
+ ADDU $sp, 4 * FFI_SIZEOF_ARG # adjust $sp to new args
+
++#ifndef __mips_soft_float
+ bnez t0, pass_d # make it quick for int
++#endif
+ REG_L a0, 0*FFI_SIZEOF_ARG($sp) # just go ahead and load the
+ REG_L a1, 1*FFI_SIZEOF_ARG($sp) # four regs.
+ REG_L a2, 2*FFI_SIZEOF_ARG($sp)
+ REG_L a3, 3*FFI_SIZEOF_ARG($sp)
+ b call_it
+
++#ifndef __mips_soft_float
+ pass_d:
+ bne t0, FFI_ARGS_D, pass_f
+ l.d $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args
+@@ -130,6 +133,7 @@ pass_f_d:
+ # bne t0, FFI_ARGS_F_D, call_it
+ l.s $f12, 0*FFI_SIZEOF_ARG($sp) # load $fp regs from args
+ l.d $f14, 2*FFI_SIZEOF_ARG($sp) # passing double and float
++#endif
+
+ call_it:
+ # Load the static chain pointer
+@@ -161,14 +165,23 @@ retfloat:
+ bne t2, FFI_TYPE_FLOAT, retdouble
+ jalr t9
+ REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
++#ifndef __mips_soft_float
+ s.s $f0, 0(t0)
++#else
++ REG_S v0, 0(t0)
++#endif
+ b epilogue
+
+ retdouble:
+ bne t2, FFI_TYPE_DOUBLE, noretval
+ jalr t9
+ REG_L t0, SIZEOF_FRAME + 4*FFI_SIZEOF_ARG($fp)
++#ifndef __mips_soft_float
+ s.d $f0, 0(t0)
++#else
++ REG_S v1, 4(t0)
++ REG_S v0, 0(t0)
++#endif
+ b epilogue
+
+ noretval:
+@@ -324,9 +337,11 @@ $LCFI22:
+ li $13, 1 # FFI_O32
+ bne $16, $13, 1f # Skip fp save if FFI_O32_SOFT_FLOAT
+
++#ifndef __mips_soft_float
+ # Store all possible float/double registers.
+ s.d $f12, FA_0_0_OFF2($fp)
+ s.d $f14, FA_1_0_OFF2($fp)
++#endif
+ 1:
+ # prepare arguments for ffi_closure_mips_inner_O32
+ REG_L a0, 20($12) # cif pointer follows tramp.
+@@ -353,6 +368,7 @@ $do_closure:
+ li $13, 1 # FFI_O32
+ bne $16, $13, 1f # Skip fp restore if FFI_O32_SOFT_FLOAT
+
++#ifndef __mips_soft_float
+ li $9, FFI_TYPE_FLOAT
+ l.s $f0, V0_OFF2($fp)
+ beq $8, $9, closure_done
+@@ -360,6 +376,7 @@ $do_closure:
+ li $9, FFI_TYPE_DOUBLE
+ l.d $f0, V0_OFF2($fp)
+ beq $8, $9, closure_done
++#endif
+ 1:
+ REG_L $3, V1_OFF2($fp)
+ REG_L $2, V0_OFF2($fp)