Hi,

George emitted the hypothesis that libffi may be partly broken on
macppc. He was right :)

After searching around, i found out that upstream has already a fix for
that [0]. Tests results have improved a lot:

Before the below diff:

   # of expected passes            440
   # of unexpected failures        104

After the below diff:

   # of expected passes            530
   # of unexpected failures        14

I have been able to build gforth on macppc and make it run with that
patched libffi. Finally. I'll send a diff for gforth after that one,
some extra bits are required.

I think no further consumer testing is really needed, given the
spectacular change in tests results, we should assume the libffi we're
shipping on macppc currently is in a pretty bad shape anyway.

Comments/feedback are welcome,

Charlène.


[0] https://github.com/libffi/libffi/commit/4d6d2866


Index: Makefile
===================================================================
RCS file: /cvs/ports/devel/libffi/Makefile,v
retrieving revision 1.43
diff -u -p -u -p -r1.43 Makefile
--- Makefile    11 Jun 2021 15:37:14 -0000      1.43
+++ Makefile    29 Jul 2021 13:54:53 -0000
@@ -3,7 +3,7 @@
 COMMENT=               Foreign Function Interface
 
 DISTNAME=              libffi-3.3
-REVISION=              0
+REVISION=              1
 SHARED_LIBS +=  ffi                  1.2      # .6.4
 CATEGORIES=            devel
 
Index: patches/patch-src_powerpc_sysv_S
===================================================================
RCS file: patches/patch-src_powerpc_sysv_S
diff -N patches/patch-src_powerpc_sysv_S
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_powerpc_sysv_S    29 Jul 2021 13:54:53 -0000
@@ -0,0 +1,48 @@
+$OpenBSD$
+
+From 4d6d2866ae43e55325e8ee96561221804602cd7a Mon Sep 17 00:00:00 2001
+From: Samuel Holland <sam...@sholland.org>
+Date: Fri, 21 Feb 2020 21:06:15 -0600
+Subject: [PATCH] Update powerpc sysv assembly for ffi_powerpc.h changes (#541)
+
+Some of the flag bits were moved when adding powerpc64 vector support.
+
+Fixes #536
+
+Index: src/powerpc/sysv.S
+--- src/powerpc/sysv.S.orig
++++ src/powerpc/sysv.S
+@@ -104,17 +104,16 @@ ENTRY(ffi_call_SYSV)
+       bctrl
+ 
+       /* Now, deal with the return value.  */
+-      mtcrf   0x01,%r31 /* cr7  */
++      mtcrf   0x03,%r31 /* cr6-cr7  */
+       bt-     31,L(small_struct_return_value)
+       bt-     30,L(done_return_value)
+ #ifndef __NO_FPRS__
+       bt-     29,L(fp_return_value)
+ #endif
+       stw     %r3,0(%r30)
+-      bf+     28,L(done_return_value)
++      bf+     27,L(done_return_value)
+       stw     %r4,4(%r30)
+-      mtcrf   0x02,%r31 /* cr6  */
+-      bf      27,L(done_return_value)
++      bf      26,L(done_return_value)
+       stw     %r5,8(%r30)
+       stw     %r6,12(%r30)
+       /* Fall through...  */
+@@ -145,10 +144,9 @@ L(done_return_value):
+ #ifndef __NO_FPRS__
+ L(fp_return_value):
+       .cfi_restore_state
+-      bf      28,L(float_return_value)
++      bf      27,L(float_return_value)
+       stfd    %f1,0(%r30)
+-      mtcrf   0x02,%r31 /* cr6  */
+-      bf      27,L(done_return_value)
++      bf      26,L(done_return_value)
+       stfd    %f2,8(%r30)
+       b       L(done_return_value)
+ L(float_return_value):

Reply via email to