[coop] Protect copy_stack_data from GCC optimizations. (#3157)
[mono.git] / mono / utils / mono-threads-coop.c
index ddc3c6ebbe231b49371e86760e198272c3d08191..cd5d703a04a1095ffca4c1edbc2388f43a80b69f 100644 (file)
@@ -145,11 +145,14 @@ mono_threads_state_poll_with_info (MonoThreadInfo *info)
        }
 }
 
-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
@@ -157,7 +160,8 @@ copy_stack_data (MonoThreadInfo *info, gpointer *stackdata_begin)
 {
        MonoThreadUnwindState *state;
        int stackdata_size;
-       void* stackdata_end = return_stack_ptr ();
+       gpointer dummy;
+       void* stackdata_end = return_stack_ptr (&dummy);
 
        SAVE_REGS_ON_STACK;