This fixes it in a bulk build, and opens up a number of packages.

OK

On 2018 Dec 29 (Sat) at 23:22:51 +0100 (+0100), Pascal Stumpf wrote:
:Add aarch64 support to the internal copy of boehm-gc, taken from
:boehm-gc upstream and the OpenBSD port.
:
:
:Index: patches/patch-sigscheme_libgcroots_include_private_gcconfig_h
:===================================================================
:RCS file: patches/patch-sigscheme_libgcroots_include_private_gcconfig_h
:diff -N patches/patch-sigscheme_libgcroots_include_private_gcconfig_h
:--- /dev/null  1 Jan 1970 00:00:00 -0000
:+++ patches/patch-sigscheme_libgcroots_include_private_gcconfig_h      29 Dec 
2018 22:22:31 -0000
:@@ -0,0 +1,118 @@
:+$OpenBSD$
:+
:+Index: sigscheme/libgcroots/include/private/gcconfig.h
:+--- sigscheme/libgcroots/include/private/gcconfig.h.orig
:++++ sigscheme/libgcroots/include/private/gcconfig.h
:+@@ -62,6 +62,14 @@
:+ # endif
:+ 
:+ /* Determine the machine type: */
:++# if defined(__aarch64__)
:++#    define AARCH64
:++#    if !defined(LINUX) && !defined(DARWIN) && !defined(FREEBSD) \
:++        && !defined(OPENBSD)
:++#      define NOSYS
:++#      define mach_type_known
:++#    endif
:++# endif
:+ # if defined(__arm__) || defined(__thumb__)
:+ #    define ARM32
:+ #    if !defined(LINUX) && !defined(NETBSD)
:+@@ -75,6 +83,10 @@
:+ # if defined(hp9000s300)
:+ #    error M68K based HP machines no longer supported.
:+ # endif
:++# if defined(OPENBSD) && defined(__aarch64__)
:++#    define AARCH64
:++#    define mach_type_known
:++# endif
:+ # if defined(OPENBSD) && defined(m68k)
:+ #    define M68K
:+ #    define mach_type_known
:+@@ -1721,6 +1733,86 @@
:+ #   define DATAEND (_end)
:+ #   define CACHE_LINE_SIZE 256
:+ #   define GETPAGESIZE() 4096
:++#   endif
:++# endif
:++
:++# ifdef AARCH64
:++#   define MACH_TYPE "AARCH64"
:++#   ifdef __ILP32__
:++#     define CPP_WORDSZ 32
:++#     define ALIGNMENT 4
:++#   else
:++#     define CPP_WORDSZ 64
:++#     define ALIGNMENT 8
:++#   endif
:++#   ifndef HBLKSIZE
:++#     define HBLKSIZE 4096
:++#   endif
:++#   ifdef LINUX
:++#     define OS_TYPE "LINUX"
:++#     define LINUX_STACKBOTTOM
:++#     define DYNAMIC_LOADING
:++      extern int __data_start[];
:++      extern int _end[];
:++#     define DATASTART ((ptr_t)__data_start)
:++#     define DATAEND ((ptr_t)(&_end))
:++#   endif
:++#   ifdef DARWIN
:++      /* iOS */
:++#     define OS_TYPE "DARWIN"
:++#     define DARWIN_DONT_PARSE_STACK
:++#     ifndef GC_DONT_REGISTER_MAIN_STATIC_DATA
:++#       define DYNAMIC_LOADING
:++#     endif
:++#     define DATASTART ((ptr_t)get_etext())
:++#     define DATAEND   ((ptr_t)get_end())
:++#     define STACKBOTTOM ((ptr_t)0x16fdfffff)
:++#     ifndef USE_MMAP
:++#       define USE_MMAP
:++#     endif
:++#     define USE_MMAP_ANON
:++#     define MPROTECT_VDB
:++#     include <unistd.h>
:++#     define GETPAGESIZE() (unsigned)getpagesize()
:++      /* FIXME: There seems to be some issues with trylock hanging on   */
:++      /* darwin. This should be looked into some more.                  */
:++#     define NO_PTHREAD_TRYLOCK
:++#     if TARGET_OS_IPHONE && !defined(NO_DYLD_BIND_FULLY_IMAGE)
:++#       define NO_DYLD_BIND_FULLY_IMAGE
:++#     endif
:++#   endif
:++#   ifdef FREEBSD
:++#     define OS_TYPE "FREEBSD"
:++#     ifndef GC_FREEBSD_THREADS
:++#       define MPROTECT_VDB
:++#     endif
:++#     define FREEBSD_STACKBOTTOM
:++#     ifdef __ELF__
:++#       define DYNAMIC_LOADING
:++#     endif
:++      extern char etext[];
:++#     define DATASTART GC_FreeBSDGetDataStart(0x1000, (ptr_t)etext)
:++#     define DATASTART_USES_BSDGETDATASTART
:++#   endif
:++#   ifdef OPENBSD
:++#     define OS_TYPE "OPENBSD"
:++#     ifndef GC_OPENBSD_THREADS
:++#       include <sys/param.h>
:++#       include <uvm/uvm_extern.h>
:++#       define STACKBOTTOM ((ptr_t)USRSTACK)
:++#     endif
:++      extern int __data_start[];
:++#     define DATASTART ((ptr_t)__data_start)
:++      extern int _end[];
:++#     define DATAEND ((ptr_t)(&_end))
:++#     define DYNAMIC_LOADING
:++#   endif
:++#   ifdef NOSYS
:++      /* __data_start is usually defined in the target linker script.   */
:++      extern int __data_start[];
:++#     define DATASTART ((ptr_t)__data_start)
:++      extern void *__stack_base__;
:++#     define STACKBOTTOM ((ptr_t)__stack_base__)
:+ #   endif
:+ # endif
:+ 
:

Reply via email to