From c451f119503eaccbb91787ef2f163a7438cad4fe Mon Sep 17 00:00:00 2001 From: Igor Pashev Date: Wed, 21 May 2014 00:03:51 +0400 Subject: Support detecting stack boundaries on illumos --- mono/metadata/sgen-gc.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/mono/metadata/sgen-gc.c b/mono/metadata/sgen-gc.c index 12e8ce69a4..cb4665d30c 100644 --- a/mono/metadata/sgen-gc.c +++ b/mono/metadata/sgen-gc.c @@ -4143,6 +4143,30 @@ sgen_thread_register (SgenThreadInfo* info, void *addr) info->stack_start_limit = staddr; info->stack_end = staddr + stsize; } +#elif (defined(__sun__) || defined(__illumos_kernel__)) +#include +#include + { + int rc; + stack_t s; + + do { + rc = thr_stksegment(&s); + } while (rc != 0 && errno == EAGAIN); + + info->stack_end = s.ss_sp; + + // Is stack "unlimited" ? + if (s.ss_size == RLIM_INFINITY) + { + // XXX Lower stack boundary + info->stack_start_limit = (void*)0xFFFF800000000000L; + } + else + { + info->stack_start_limit = (void*)((intptr_t)s.ss_sp - (intptr_t)s.ss_size); + } + } #else { /* FIXME: we assume the stack grows down */ -- cgit v1.2.3