+#define MONO_ENTER_GC_UNSAFE \
+ do { \
+ gpointer __gc_unsafe_dummy; \
+ gpointer __gc_unsafe_cookie = mono_threads_enter_gc_unsafe_region (&__gc_unsafe_dummy)
+
+#define MONO_EXIT_GC_UNSAFE \
+ mono_threads_exit_gc_unsafe_region (__gc_unsafe_cookie, &__gc_unsafe_dummy); \
+ } while (0)
+
+#define MONO_ENTER_GC_UNSAFE_UNBALANCED \
+ do { \
+ gpointer __gc_unsafe_unbalanced_dummy; \
+ gpointer __gc_unsafe_unbalanced_cookie = mono_threads_enter_gc_unsafe_region_unbalanced (&__gc_unsafe_unbalanced_dummy)
+
+#define MONO_EXIT_GC_UNSAFE_UNBALANCED \
+ mono_threads_exit_gc_unsafe_region_unbalanced (__gc_unsafe_unbalanced_cookie, &__gc_unsafe_unbalanced_dummy); \
+ } while (0)
+
+#define MONO_ENTER_GC_SAFE \