[coop] Protect copy_stack_data from GCC optimizations.
GCC 5.3.1 (Debian sid/amd64) "optimizied" the previous incarnation of
`void *stackdata_end = return_stack_ptr ()` to
`void *stackdata_end = 0`.
}
}
-static void *
-return_stack_ptr ()
+static volatile gpointer* dummy_global;
+
+static MONO_NEVER_INLINE
+void*
+return_stack_ptr (gpointer *i)
{
- gpointer i;
- return &i;
+ dummy_global = i;
+ return i;
}
static void
{
MonoThreadUnwindState *state;
int stackdata_size;
- void* stackdata_end = return_stack_ptr ();
+ gpointer dummy;
+ void* stackdata_end = return_stack_ptr (&dummy);
SAVE_REGS_ON_STACK;