diff --git a/lang/mono/Makefile b/lang/mono/Makefile index 58643c0c84b..d132f908cd8 100644 --- a/lang/mono/Makefile +++ b/lang/mono/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.22 2010/03/22 16:56:13 robert Exp $ +# $OpenBSD: Makefile,v 1.23 2010/03/23 08:25:26 robert Exp $ # sync with net/avahi,-mono ONLY_FOR_ARCHS= amd64 i386 powerpc # arm @@ -6,7 +6,7 @@ ONLY_FOR_ARCHS= amd64 i386 powerpc # arm COMMENT= cross platform, open source .NET developement framework DISTNAME= mono-2.6.3 -PKGNAME= ${DISTNAME}p3 +PKGNAME= ${DISTNAME}p4 CATEGORIES= lang devel diff --git a/lang/mono/patches/patch-mono_mini_exceptions-amd64_c b/lang/mono/patches/patch-mono_mini_exceptions-amd64_c new file mode 100644 index 00000000000..4de8ee24459 --- /dev/null +++ b/lang/mono/patches/patch-mono_mini_exceptions-amd64_c @@ -0,0 +1,105 @@ +$OpenBSD: patch-mono_mini_exceptions-amd64_c,v 1.3 2010/03/23 08:25:26 robert Exp $ +--- mono/mini/exceptions-amd64.c.orig Tue Mar 23 08:56:35 2010 ++++ mono/mini/exceptions-amd64.c Tue Mar 23 08:59:41 2010 +@@ -711,7 +711,7 @@ mono_arch_handle_exception (void *sigctx, gpointer obj + return TRUE; + } + +-#ifdef MONO_ARCH_USE_SIGACTION ++#if defined(MONO_ARCH_USE_SIGACTION) && defined(UCONTEXT_GREGS) + static inline guint64* + gregs_from_ucontext (ucontext_t *ctx) + { +@@ -721,7 +721,7 @@ gregs_from_ucontext (ucontext_t *ctx) + void + mono_arch_sigctx_to_monoctx (void *sigctx, MonoContext *mctx) + { +-#ifdef MONO_ARCH_USE_SIGACTION ++#if defined(MONO_ARCH_USE_SIGACTION) && defined(UCONTEXT_GREGS) + ucontext_t *ctx = (ucontext_t*)sigctx; + + guint64 *gregs = gregs_from_ucontext (ctx); +@@ -739,6 +739,22 @@ mono_arch_sigctx_to_monoctx (void *sigctx, MonoContext + mctx->r13 = gregs [REG_R13]; + mctx->r14 = gregs [REG_R14]; + mctx->r15 = gregs [REG_R15]; ++#elif defined(MONO_ARCH_USE_SIGACTION) ++ ucontext_t *ctx = (ucontext_t*)sigctx; ++ ++ mctx->rax = UCONTEXT_REG_RAX (ctx); ++ mctx->rbx = UCONTEXT_REG_RBX (ctx); ++ mctx->rcx = UCONTEXT_REG_RCX (ctx); ++ mctx->rdx = UCONTEXT_REG_RDX (ctx); ++ mctx->rbp = UCONTEXT_REG_RBP (ctx); ++ mctx->rsp = UCONTEXT_REG_RSP (ctx); ++ mctx->rsi = UCONTEXT_REG_RSI (ctx); ++ mctx->rdi = UCONTEXT_REG_RDI (ctx); ++ mctx->rip = UCONTEXT_REG_RIP (ctx); ++ mctx->r12 = UCONTEXT_REG_R12 (ctx); ++ mctx->r13 = UCONTEXT_REG_R13 (ctx); ++ mctx->r14 = UCONTEXT_REG_R14 (ctx); ++ mctx->r15 = UCONTEXT_REG_R15 (ctx); + #else + MonoContext *ctx = (MonoContext *)sigctx; + +@@ -761,7 +777,7 @@ mono_arch_sigctx_to_monoctx (void *sigctx, MonoContext + void + mono_arch_monoctx_to_sigctx (MonoContext *mctx, void *sigctx) + { +-#ifdef MONO_ARCH_USE_SIGACTION ++#if defined(MONO_ARCH_USE_SIGACTION) && defined(UCONTEXT_GREGS) + ucontext_t *ctx = (ucontext_t*)sigctx; + + guint64 *gregs = gregs_from_ucontext (ctx); +@@ -779,6 +795,22 @@ mono_arch_monoctx_to_sigctx (MonoContext *mctx, void * + gregs [REG_R13] = mctx->r13; + gregs [REG_R14] = mctx->r14; + gregs [REG_R15] = mctx->r15; ++#elif defined(MONO_ARCH_USE_SIGACTION) ++ ucontext_t *ctx = (ucontext_t*)sigctx; ++ ++ UCONTEXT_REG_RAX (ctx) = mctx->rax; ++ UCONTEXT_REG_RBX (ctx) = mctx->rbx; ++ UCONTEXT_REG_RCX (ctx) = mctx->rcx; ++ UCONTEXT_REG_RDX (ctx) = mctx->rdx; ++ UCONTEXT_REG_RBP (ctx) = mctx->rbp; ++ UCONTEXT_REG_RSP (ctx) = mctx->rsp; ++ UCONTEXT_REG_RSI (ctx) = mctx->rsi; ++ UCONTEXT_REG_RDI (ctx) = mctx->rdi; ++ UCONTEXT_REG_RIP (ctx) = mctx->rip; ++ UCONTEXT_REG_R12 (ctx) = mctx->r12; ++ UCONTEXT_REG_R13 (ctx) = mctx->r13; ++ UCONTEXT_REG_R14 (ctx) = mctx->r14; ++ UCONTEXT_REG_R15 (ctx) = mctx->r15; + #else + MonoContext *ctx = (MonoContext *)sigctx; + +@@ -801,14 +833,16 @@ mono_arch_monoctx_to_sigctx (MonoContext *mctx, void * + gpointer + mono_arch_ip_from_context (void *sigctx) + { +- +-#ifdef MONO_ARCH_USE_SIGACTION +- ++#if defined(MONO_ARCH_USE_SIGACTION) && defined(UCONTEXT_GREGS) + ucontext_t *ctx = (ucontext_t*)sigctx; + + guint64 *gregs = gregs_from_ucontext (ctx); + + return (gpointer)gregs [REG_RIP]; ++#elif defined(MONO_ARCH_USE_SIGACTION) ++ ucontext_t *ctx = (ucontext_t*)sigctx; ++ ++ return (gpointer)UCONTEXT_REG_RIP (ctx); + #else + MonoContext *ctx = sigctx; + return (gpointer)ctx->rip; +@@ -865,7 +899,7 @@ altstack_handle_and_restore (void *sigctx, gpointer ob + void + mono_arch_handle_altstack_exception (void *sigctx, gpointer fault_addr, gboolean stack_ovf) + { +-#ifdef MONO_ARCH_USE_SIGACTION ++#if defined(MONO_ARCH_USE_SIGACTION) && defined(UCONTEXT_GREGS) + MonoException *exc = NULL; + ucontext_t *ctx = (ucontext_t*)sigctx; + guint64 *gregs = gregs_from_ucontext (ctx); diff --git a/lang/mono/patches/patch-mono_mini_mini-amd64_h b/lang/mono/patches/patch-mono_mini_mini-amd64_h new file mode 100644 index 00000000000..b1b3bc22e0c --- /dev/null +++ b/lang/mono/patches/patch-mono_mini_mini-amd64_h @@ -0,0 +1,27 @@ +$OpenBSD: patch-mono_mini_mini-amd64_h,v 1.4 2010/03/23 08:25:26 robert Exp $ +--- mono/mini/mini-amd64.h.orig Tue Mar 23 08:59:52 2010 ++++ mono/mini/mini-amd64.h Tue Mar 23 09:00:38 2010 +@@ -254,10 +254,6 @@ typedef struct { + + #endif + +-#ifdef __OpenBSD__ +-#undef MONO_ARCH_USE_SIGACTION +-#endif +- + #endif /* PLATFORM_WIN32 */ + + #if defined (__NetBSD__) +@@ -282,7 +278,11 @@ typedef struct { + + #define MONO_ARCH_NOMAP32BIT + +-#elif defined (__FreeBSD__) || defined (__OpenBSD__) ++#elif defined (__OpenBSD__) ++ ++#define MONO_ARCH_NOMAP32BIT ++ ++#elif defined (__FreeBSD__) + + #define REG_RAX 7 + #define REG_RCX 4 diff --git a/lang/mono/patches/patch-mono_utils_mono-sigcontext_h b/lang/mono/patches/patch-mono_utils_mono-sigcontext_h index f03eef9a7b8..0075a81508e 100644 --- a/lang/mono/patches/patch-mono_utils_mono-sigcontext_h +++ b/lang/mono/patches/patch-mono_utils_mono-sigcontext_h @@ -1,6 +1,6 @@ -$OpenBSD: patch-mono_utils_mono-sigcontext_h,v 1.1 2010/03/22 16:56:13 robert Exp $ ---- mono/utils/mono-sigcontext.h.orig Mon Mar 22 17:35:25 2010 -+++ mono/utils/mono-sigcontext.h Mon Mar 22 17:38:49 2010 +$OpenBSD: patch-mono_utils_mono-sigcontext_h,v 1.2 2010/03/23 08:25:26 robert Exp $ +--- mono/utils/mono-sigcontext.h.orig Fri Sep 25 16:58:11 2009 ++++ mono/utils/mono-sigcontext.h Tue Mar 23 08:56:28 2010 @@ -54,6 +54,16 @@ #define UCONTEXT_REG_ESI(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_ESI]) #define UCONTEXT_REG_EDI(ctx) (((ucontext_t*)(ctx))->uc_mcontext.__gregs [_REG_EDI]) @@ -18,3 +18,25 @@ $OpenBSD: patch-mono_utils_mono-sigcontext_h,v 1.1 2010/03/22 16:56:13 robert Ex #else #define UCONTEXT_REG_EAX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [REG_EAX]) #define UCONTEXT_REG_EBX(ctx) (((ucontext_t*)(ctx))->uc_mcontext.gregs [REG_EBX]) +@@ -70,6 +80,21 @@ + + #ifdef __FreeBSD__ + #define UCONTEXT_GREGS(ctx) &(((ucontext_t*)(ctx))->uc_mcontext) ++#elif defined(__OpenBSD__) ++ /* OpenBSD/amd64 has no gregs array, ucontext_t == sigcontext */ ++ #define UCONTEXT_REG_RAX(ctx) ((ctx)->sc_rax) ++ #define UCONTEXT_REG_RBX(ctx) ((ctx)->sc_rbx) ++ #define UCONTEXT_REG_RCX(ctx) ((ctx)->sc_rcx) ++ #define UCONTEXT_REG_RDX(ctx) ((ctx)->sc_rdx) ++ #define UCONTEXT_REG_RBP(ctx) ((ctx)->sc_rbp) ++ #define UCONTEXT_REG_RSP(ctx) ((ctx)->sc_rsp) ++ #define UCONTEXT_REG_RSI(ctx) ((ctx)->sc_rsi) ++ #define UCONTEXT_REG_RDI(ctx) ((ctx)->sc_rdi) ++ #define UCONTEXT_REG_RIP(ctx) ((ctx)->sc_rip) ++ #define UCONTEXT_REG_R12(ctx) ((ctx)->sc_r12) ++ #define UCONTEXT_REG_R13(ctx) ((ctx)->sc_r13) ++ #define UCONTEXT_REG_R14(ctx) ((ctx)->sc_r14) ++ #define UCONTEXT_REG_R15(ctx) ((ctx)->sc_r15) + #else + #define UCONTEXT_GREGS(ctx) &(((ucontext_t*)(ctx))->uc_mcontext.gregs) + #endif