openbsd-ports/lang/mono/patches/patch-mono_metadata_threads_c
robert 40cfd19ee0 - use pthread_stackseg_np to get the stack boundaries on OpenBSD
- remove some scripts that we don't use from BASH_SCRIPTS
- ignore one of the regression tests and continue if it fails
2010-04-01 21:53:51 +00:00

43 lines
1.2 KiB
Plaintext

$OpenBSD: patch-mono_metadata_threads_c,v 1.1 2010/04/01 21:53:51 robert Exp $
--- mono/metadata/threads.c.orig Thu Apr 1 21:28:08 2010
+++ mono/metadata/threads.c Thu Apr 1 21:36:45 2010
@@ -15,6 +15,10 @@
#include <glib.h>
#include <signal.h>
#include <string.h>
+#if defined(__OpenBSD__)
+#include <pthread.h>
+#include <pthread_np.h>
+#endif
#include <mono/metadata/object.h>
#include <mono/metadata/domain-internals.h>
@@ -855,6 +859,15 @@ mono_thread_get_stack_bounds (guint8 **staddr, size_t
# elif defined(sun)
*staddr = NULL;
pthread_attr_getstacksize (&attr, &stsize);
+# elif defined(__OpenBSD__)
+ stack_t ss;
+ int rslt;
+
+ rslt = pthread_stackseg_np(pthread_self(), &ss);
+ g_assert (rslt == 0);
+
+ *staddr = (guint8*)((size_t)ss.ss_sp - ss.ss_size);
+ *stsize = ss.ss_size;
# else
*staddr = NULL;
*stsize = 0;
@@ -862,8 +875,10 @@ mono_thread_get_stack_bounds (guint8 **staddr, size_t
# endif
# endif
-# ifndef sun
+# if !defined(sun)
+# if !defined(__OpenBSD__)
pthread_attr_getstack (&attr, (void**)staddr, stsize);
+# endif
if (*staddr)
g_assert ((current > *staddr) && (current < *staddr + *stsize));
# endif