MONO_ARCH_SAVE_REGS;
mono_stack_walk_no_il (get_executing, &dest);
+ g_assert (dest);
return mono_assembly_get_object (mono_domain_get (), dest->klass->image->assembly);
}
*staddr = (guint8*)((gssize)*staddr & ~(mono_pagesize () - 1));
return;
/* FIXME: simplify the mess below */
-#elif !defined(HOST_WIN32)
+#elif defined(HOST_WIN32)
+ /* http://en.wikipedia.org/wiki/Win32_Thread_Information_Block */
+ void* tib = (void*)__readfsdword(0x18);
+ guint8 *stackTop = (guint8*)*(int*)((char*)tib + 4);
+ guint8 *stackBottom = (guint8*)*(int*)((char*)tib + 8);
+
+ *staddr = stackBottom;
+ *stsize = stackTop - stackBottom;
+ return;
+#else
pthread_attr_t attr;
guint8 *current = (guint8*)&attr;
+ *staddr = NULL;
+ *stsize = (size_t)-1;
+
pthread_attr_init (&attr);
# ifdef HAVE_PTHREAD_GETATTR_NP
pthread_getattr_np (pthread_self(), &attr);
# endif
pthread_attr_destroy (&attr);
-#else
- *staddr = NULL;
- *stsize = (size_t)-1;
#endif
/* When running under emacs, sometimes staddr is not aligned to a page size */