On Wed, Jul 29, 2020 at 11:05:31PM -0400, George Koehler wrote:
> On Wed, 29 Jul 2020 01:25:00 -0400
> Kurt Mosiejczuk <kurt@cranky.work> wrote:
> > I gave building it a try, it died early on with:
> > /usr/ports/pobj/ecl-20.4.24/ecl-20.4.24/build/ecl/ecl_atomics.h:39:4: error: #er
> > ror "ECL needs AO_fetch_compare_and_swap or an equivalent"
> > # error "ECL needs AO_fetch_compare_and_swap or an equivalent"
> Thank you for the speedy test. libatomic_ops in devel/boehm-gc is
> missing AO_fetch_compare_and_swap for sparc. It's still missing
> upstream:
> https://github.com/ivmai/libatomic_ops/blob/master/src/atomic_ops/sysdeps/gcc/sparc.h#L64
> In this diff to devel/boehm-gc, I have tried to provide the missing
> function (by copying AO_compare_and_swap_full, guessing, and referring
> to SPARCV9.pdf, A.9 Compare and Swap, page 129), but I don't know
> whether it compiles. Even if it compiles, if sparc64 will have the
> ecl_symbol_value bug, we won't know if it works. I left my other
> local changes (mmap and powerpc64) in the diff.
> I describe the 64-bit big-endian ecl_symbol_value bug at
> https://gitlab.com/embeddable-common-lisp/ecl/-/issues/604
Unfortunately, even with boehm-gc compiled with this, ecl fails to
build with the same message.
--Kurt
> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/boehm-gc/Makefile,v
> retrieving revision 1.74
> diff -u -p -r1.74 Makefile
> --- Makefile 4 Apr 2020 20:59:41 -0000 1.74
> +++ Makefile 30 Jul 2020 02:37:28 -0000
> @@ -12,7 +12,7 @@ DISTNAME= gc-${VERSION}
>
> PKGNAME-atomic= libatomic_ops-${LIBAO_VERSION}
> PKGNAME-main= boehm-gc-${VERSION}
> -REVISION= 5
> +REVISION= 6
>
> DISTFILES= ${DISTNAME}${EXTRACT_SUFX} \
> libatomic_ops-${LIBAO_VERSION}${EXTRACT_SUFX}
> Index: patches/patch-include_private_gcconfig_h
> ===================================================================
> RCS file: /cvs/ports/devel/boehm-gc/patches/patch-include_private_gcconfig_h,v
> retrieving revision 1.22
> diff -u -p -r1.22 patch-include_private_gcconfig_h
> --- patches/patch-include_private_gcconfig_h 15 Apr 2017 14:02:46 -0000 1.22
> +++ patches/patch-include_private_gcconfig_h 30 Jul 2020 02:37:28 -0000
> @@ -1,12 +1,25 @@
> $OpenBSD: patch-include_private_gcconfig_h,v 1.22 2017/04/15 14:02:46 naddy Exp $
>
> +- use mmap, not sbrk, on OpenBSD
> - All OpenBSD mips platforms are 64-bit, so correct the wordsize and alignment
> - use __data_start instead of _fdata on OpenBSD/mips64
> -- add support for OpenBSD/aarch64
> +- add support for OpenBSD/aarch64 and powerpc64
>
> ---- include/private/gcconfig.h.orig Tue Aug 2 21:36:14 2016
> -+++ include/private/gcconfig.h Fri Apr 14 17:44:40 2017
> -@@ -102,7 +102,8 @@
> +Index: include/private/gcconfig.h
> +--- include/private/gcconfig.h.orig
> ++++ include/private/gcconfig.h
> +@@ -76,6 +76,10 @@
> + /* And one for OpenBSD: */
> + # if defined(__OpenBSD__)
> + # define OPENBSD
> ++# ifndef USE_MMAP
> ++# define USE_MMAP
> ++# endif
> ++# define USE_MMAP_ANON
> + # endif
> +
> + /* And one for FreeBSD: */
> +@@ -102,7 +106,8 @@
> # endif
> # if defined(__aarch64__)
> # define AARCH64
> @@ -16,7 +29,7 @@ $OpenBSD: patch-include_private_gcconfig
> # define NOSYS
> # define mach_type_known
> # endif
> -@@ -137,6 +138,10 @@
> +@@ -137,6 +142,10 @@
> # define ARM32
> # define mach_type_known
> # endif
> @@ -27,7 +40,21 @@ $OpenBSD: patch-include_private_gcconfig
> # if defined(OPENBSD) && defined(__sh__)
> # define SH
> # define mach_type_known
> -@@ -1712,14 +1717,15 @@
> +@@ -962,7 +971,12 @@
> + # endif
> + # ifdef OPENBSD
> + # define OS_TYPE "OPENBSD"
> +-# define ALIGNMENT 4
> ++# if defined(__powerpc64__)
> ++# define ALIGNMENT 8
> ++# define CPP_WORDSZ 64
> ++# else
> ++# define ALIGNMENT 4
> ++# endif
> + # ifndef GC_OPENBSD_THREADS
> + # include <sys/param.h>
> + # include <uvm/uvm_extern.h>
> +@@ -1712,14 +1726,15 @@
> # endif
> # ifdef OPENBSD
> # define OS_TYPE "OPENBSD"
> @@ -46,7 +73,7 @@ $OpenBSD: patch-include_private_gcconfig
> extern int _end[];
> # define DATAEND ((ptr_t)(&_end))
> # define DYNAMIC_LOADING
> -@@ -2165,6 +2171,19 @@
> +@@ -2165,6 +2180,19 @@
> extern char etext[];
> # define DATASTART GC_FreeBSDGetDataStart(0x1000, (ptr_t)etext)
> # define DATASTART_USES_BSDGETDATASTART
> Index: patches/patch-libatomic_ops_src_atomic_ops_sysdeps_gcc_sparc_h
> ===================================================================
> RCS file: /cvs/ports/devel/boehm-gc/patches/patch-libatomic_ops_src_atomic_ops_sysdeps_gcc_sparc_h,v
> retrieving revision 1.3
> diff -u -p -r1.3 patch-libatomic_ops_src_atomic_ops_sysdeps_gcc_sparc_h
> --- patches/patch-libatomic_ops_src_atomic_ops_sysdeps_gcc_sparc_h 4 Apr 2020 20:59:41 -0000 1.3
> +++ patches/patch-libatomic_ops_src_atomic_ops_sysdeps_gcc_sparc_h 30 Jul 2020 02:37:28 -0000
> @@ -2,6 +2,8 @@ $OpenBSD: patch-libatomic_ops_src_atomic
>
> Use the same type for input and output inline asm operands.
>
> +Provide AO_fetch_compare_and_swap, needed by lang/ecl 20.4.24.
> +
> Index: libatomic_ops/src/atomic_ops/sysdeps/gcc/sparc.h
> --- libatomic_ops/src/atomic_ops/sysdeps/gcc/sparc.h.orig
> +++ libatomic_ops/src/atomic_ops/sysdeps/gcc/sparc.h
> @@ -14,3 +16,26 @@ Index: libatomic_ops/src/atomic_ops/sysd
> __asm__ __volatile__ ("membar #StoreLoad | #LoadLoad\n\t"
> # if defined(__arch64__)
> "casx [%2],%0,%1\n\t"
> +@@ -61,7 +61,21 @@ AO_compare_and_swap_full(volatile AO_t *addr, AO_t old
> + }
> + #define AO_HAVE_compare_and_swap_full
> +
> +-/* TODO: implement AO_fetch_compare_and_swap. */
> ++AO_INLINE AO_t
> ++AO_fetch_compare_and_swap_full(volatile AO_t *addr, AO_t old, AO_t new_val) {
> ++ __asm__ __volatile__ ("membar #StoreLoad | #LoadLoad\n\t"
> ++# if defined(__arch64__)
> ++ "casx [%1],%2,%0\n\t"
> ++# else
> ++ "cas [%1],%2,%0\n\t" /* 32-bit version */
> ++# endif
> ++ "membar #StoreLoad | #StoreStore\n\t"
> ++ : "+r" (new_val)
> ++ : "r" (addr), "r" (old)
> ++ : "memory");
> ++ return new_val;
> ++}
> ++#define AO_HAVE_fetch_compare_and_swap_full
> +
No comments:
Post a Comment