diff --git a/lang/mono/patches/patch-external_bdwgc_include_private_gcconfig_h b/lang/mono/patches/patch-external_bdwgc_include_private_gcconfig_h new file mode 100644 index 00000000000..52c5fb51e81 --- /dev/null +++ b/lang/mono/patches/patch-external_bdwgc_include_private_gcconfig_h @@ -0,0 +1,51 @@ +$OpenBSD: patch-external_bdwgc_include_private_gcconfig_h,v 1.1 2021/04/10 15:31:33 patrick Exp $ + +Index: external/bdwgc/include/private/gcconfig.h +--- external/bdwgc/include/private/gcconfig.h.orig ++++ external/bdwgc/include/private/gcconfig.h +@@ -155,7 +155,7 @@ EXTERN_C_BEGIN + # if defined(__aarch64__) + # define AARCH64 + # if !defined(LINUX) && !defined(DARWIN) && !defined(FREEBSD) \ +- && !defined(NN_BUILD_TARGET_PLATFORM_NX) ++ && !defined(OPENBSD) && !defined(NN_BUILD_TARGET_PLATFORM_NX) + # define NOSYS + # define mach_type_known + # endif +@@ -348,6 +348,10 @@ EXTERN_C_BEGIN + # define X86_64 + # define mach_type_known + # endif ++# if defined(OPENBSD) && defined(__aarch64__) ++# define AARCH64 ++# define mach_type_known ++# endif + # if defined(LINUX) && (defined(i386) || defined(__i386__)) + # define I386 + # define mach_type_known +@@ -2298,6 +2302,25 @@ EXTERN_C_BEGIN + 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 ++ EXTERN_C_END ++# include ++# include ++ EXTERN_C_BEGIN ++# ifdef USRSTACK ++# define STACKBOTTOM ((ptr_t)USRSTACK) ++# else ++# define HEURISTIC2 ++# endif ++# endif ++ extern int __data_start[]; ++ extern int _end[]; ++# define DATASTART ((ptr_t)__data_start) ++# define DATAEND ((ptr_t)(&_end)) ++# define DYNAMIC_LOADING + # endif + # ifdef NINTENDO_SWITCH + static int zero_fd = -1; diff --git a/lang/mono/patches/patch-external_boringssl_crypto_cpu-aarch64-linux_c b/lang/mono/patches/patch-external_boringssl_crypto_cpu-aarch64-linux_c new file mode 100644 index 00000000000..ad2df6a0e5f --- /dev/null +++ b/lang/mono/patches/patch-external_boringssl_crypto_cpu-aarch64-linux_c @@ -0,0 +1,31 @@ +$OpenBSD: patch-external_boringssl_crypto_cpu-aarch64-linux_c,v 1.1 2021/04/10 15:31:33 patrick Exp $ + +Index: external/boringssl/crypto/cpu-aarch64-linux.c +--- external/boringssl/crypto/cpu-aarch64-linux.c.orig ++++ external/boringssl/crypto/cpu-aarch64-linux.c +@@ -16,7 +16,9 @@ + + #if defined(OPENSSL_AARCH64) && !defined(OPENSSL_STATIC_ARMCAP) + ++#if !defined(__OpenBSD__) + #include ++#endif + + #include + +@@ -63,6 +65,15 @@ void OPENSSL_cpuid_setup(void) { + if (ID_AA64ISAR0_SHA2_VAL(isar0_val) >= ID_AA64ISAR0_SHA2_BASE) { + OPENSSL_armcap_P |= ARMV8_SHA256; + } ++} ++ ++#elif defined(__OpenBSD__) ++ ++#include ++#include ++ ++void OPENSSL_cpuid_setup(void) { ++ OPENSSL_armcap_P |= ARMV7_NEON; + } + + #else // linux diff --git a/lang/mono/patches/patch-mono_utils_mono-sigcontext_h b/lang/mono/patches/patch-mono_utils_mono-sigcontext_h new file mode 100644 index 00000000000..3efa1c747b0 --- /dev/null +++ b/lang/mono/patches/patch-mono_utils_mono-sigcontext_h @@ -0,0 +1,18 @@ +$OpenBSD: patch-mono_utils_mono-sigcontext_h,v 1.8 2021/04/10 15:31:33 patrick Exp $ + +Index: mono/utils/mono-sigcontext.h +--- mono/utils/mono-sigcontext.h.orig ++++ mono/utils/mono-sigcontext.h +@@ -472,6 +472,12 @@ typedef struct ucontext { + #define UCONTEXT_REG_SP(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_gpregs.gp_sp) + #define UCONTEXT_REG_R0(ctx) (((ucontext_t*)(ctx))->uc_mcontext.mc_gpregs.gp_x [ARMREG_R0]) + #define UCONTEXT_GREGS(ctx) (&(((ucontext_t*)(ctx))->uc_mcontext.mc_gpregs.gp_x)) ++#elif defined(__OpenBSD__) ++ /* ucontext_t == sigcontext */ ++ #define UCONTEXT_REG_PC(ctx) (((ucontext_t*)(ctx))->sc_elr) ++ #define UCONTEXT_REG_SP(ctx) (((ucontext_t*)(ctx))->sc_sp) ++ #define UCONTEXT_REG_R0(ctx) (((ucontext_t*)(ctx))->sc_x [ARMREG_R0]) ++ #define UCONTEXT_GREGS(ctx) (&(((ucontext_t*)(ctx))->sc_x)) + #else + #include + #define UCONTEXT_REG_PC(ctx) (((ucontext_t*)(ctx))->uc_mcontext.pc)