On Sun, Jan 21, 2018 at 09:45:53PM +0100, Jeremie Courreges-Anglas wrote: > > +cc maintainer > > On Sun, Jan 21 2018, Brian Callahan <bcal...@devio.us> wrote: > > On 01/21/18 08:13, Peter Hessler wrote: > >> On 2018 Jan 21 (Sun) at 02:06:52 -0500 (-0500), Brian Callahan wrote: > >> :Finally, it looks like libffi needs libc++abi on arm for at least some > >> :functions, as > >> :experienced with lang/snobol4, its configure script didn't pick up libffi > >> and > >> :instead > >> :complained about this: > >> :/usr/local/lib/libffi.so.1.2: undefined reference to > >> `__aeabi_unwind_cpp_pr0' > >> :/usr/local/lib/libffi.so.1.2: undefined reference to > >> `__aeabi_unwind_cpp_pr1' > >> :Those functions are in libc++abi. > >> : > >> > >> Did you mean to include a patch to libffi.pc to address these issues? > >> > >> > > > > Ugh. No more 2am diffs more me. > > > > We just want this to be for arm, of course, to avoid breaking all gcc > > archs. Attached diff deals. > > I think it would be better to link libffi against -lc++abi, inter-libs deps > would be enough and would ensure that consumers don't need to use > pkg-config. static builds would still need the pkg-config goo, but we > don't have static archs any more. Do we have such ports?
Linking libffi against c++abi makes sense and matches how a similiar situation is handled with devel/luajit. > > The diff below also adds c++abi to WANTLIB. > > Test summary: > # of expected passes 1845 > # of unexpected failures 15 > > Now testing some consumer ports. > > > Index: Makefile > =================================================================== > RCS file: /d/cvs/ports/devel/libffi/Makefile,v > retrieving revision 1.35 > diff -u -p -r1.35 Makefile > --- Makefile 26 May 2016 20:48:50 -0000 1.35 > +++ Makefile 21 Jan 2018 19:41:05 -0000 > @@ -3,7 +3,7 @@ > COMMENT= Foreign Function Interface > > DISTNAME= libffi-3.2.1 > -REVISION= 2 > +REVISION= 3 > SHARED_LIBS += ffi 1.2 # .6.4 > CATEGORIES= devel > > @@ -15,6 +15,10 @@ HOMEPAGE= http://sourceware.org/libffi/ > PERMIT_PACKAGE_CDROM= Yes > > WANTLIB += pthread > +# needed for unwind symbols > +.if ${MACHINE_ARCH} == "arm" > +WANTLIB += c++abi > +.endif > > MASTER_SITES= ftp://sourceware.org/pub/libffi/ > > Index: patches/patch-configure > =================================================================== > RCS file: /d/cvs/ports/devel/libffi/patches/patch-configure,v > retrieving revision 1.7 > diff -u -p -r1.7 patch-configure > --- patches/patch-configure 28 Jan 2016 08:40:47 -0000 1.7 > +++ patches/patch-configure 21 Jan 2018 19:34:49 -0000 > @@ -1,14 +1,19 @@ > $OpenBSD: patch-configure,v 1.7 2016/01/28 08:40:47 jasper Exp $ > > -- Always link with -pthread for libffi > +- Always link with -pthread for libffi (XXX not needed any more?) > +- Link with libc++abi on arm (to access unwind symbols) > > ---- configure.orig Tue Jan 26 18:55:54 2016 > -+++ configure Tue Jan 26 18:56:20 2016 > -@@ -18522,6 +18522,12 @@ $as_echo "#define SYMBOL_UNDERSCORE 1" >>confdefs.h > +Index: configure > +--- configure.orig > ++++ configure > +@@ -18522,6 +18522,15 @@ $as_echo "#define SYMBOL_UNDERSCORE 1" >>confdefs.h > > fi > > +case "$target" in > ++ arm-*-openbsd*) > ++ LDFLAGS="-lpthread -lc++abi $LDFLAGS" > ++ ;; > + *-*-openbsd*) > + LDFLAGS="-lpthread $LDFLAGS" > + ;; > Index: patches/patch-src_arm_ffi_c > =================================================================== > RCS file: /d/cvs/ports/devel/libffi/patches/patch-src_arm_ffi_c,v > retrieving revision 1.7 > diff -u -p -r1.7 patch-src_arm_ffi_c > --- patches/patch-src_arm_ffi_c 15 Jul 2015 17:06:48 -0000 1.7 > +++ patches/patch-src_arm_ffi_c 21 Jan 2018 19:34:49 -0000 > @@ -1,15 +1,36 @@ > $OpenBSD: patch-src_arm_ffi_c,v 1.7 2015/07/15 17:06:48 jasper Exp $ > > -Fix warning: implicit declaration of function '__clear_cache' > +https://svnweb.freebsd.org/ports/head/devel/libffi/files/patch-src__arm__ffi.c?revision=337118&view=markup > > ---- src/arm/ffi.c.orig Fri Apr 25 19:45:13 2014 > -+++ src/arm/ffi.c Mon Sep 15 22:00:37 2014 > -@@ -37,6 +37,8 @@ > +Index: src/arm/ffi.c > +--- src/arm/ffi.c.orig > ++++ src/arm/ffi.c > +@@ -33,6 +33,11 @@ > + > + #include <stdlib.h> > + > ++#ifdef __arm__ > ++#include <machine/sysarch.h> > ++#include <stdint.h> > ++#endif > ++ > + /* Forward declares. */ > static int vfp_type_p (ffi_type *); > static void layout_vfp_args (ffi_cif *); > +@@ -750,6 +755,16 @@ ffi_closure_free (void *ptr) > + } > > -+extern void __clear_cache(char *beg, char *end); > + #else > + > - int ffi_prep_args_SYSV(char *stack, extended_cif *ecif, float *vfp_space); > - int ffi_prep_args_VFP(char *stack, extended_cif *ecif, float *vfp_space); > ++#ifdef __arm__ > ++#define __clear_cache(start, end) do { > \ > ++ struct arm_sync_icache_args ua; \ > ++ \ > ++ ua.addr = (uintptr_t)(start); \ > ++ ua.len = (char *)(end) - (char *)start; \ > ++ sysarch(ARM_SYNC_ICACHE, &ua); \ > ++ } while (0); > ++#endif > > + #define FFI_INIT_TRAMPOLINE(TRAMP,FUN,CTX) \ > + ({ unsigned char *__tramp = (unsigned char*)(TRAMP); > \ > Index: patches/patch-src_arm_sysv_S > =================================================================== > RCS file: patches/patch-src_arm_sysv_S > diff -N patches/patch-src_arm_sysv_S > --- /dev/null 1 Jan 1970 00:00:00 -0000 > +++ patches/patch-src_arm_sysv_S 21 Jan 2018 19:34:10 -0000 > @@ -0,0 +1,16 @@ > +$OpenBSD$ > + > +https://github.com/libffi/libffi/issues/162 > + > +Index: src/arm/sysv.S > +--- src/arm/sysv.S.orig > ++++ src/arm/sysv.S > +@@ -396,7 +396,7 @@ LSYM(Lbase_args): > + beq LSYM(Lepilogue_vfp) > + > + cmp r3, #FFI_TYPE_SINT64 > +- stmeqia r2, {r0, r1} > ++ stmiaeq r2, {r0, r1} > + beq LSYM(Lepilogue_vfp) > + > + cmp r3, #FFI_TYPE_FLOAT > > > -- > jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE >