}
#endif
+#if !defined(PLATFORM_ANDROID)
+ /* If GC_no_dls is set to true, GC_find_limit is not called. This causes a seg fault on Android. */
GC_no_dls = TRUE;
+#endif
GC_init ();
GC_oom_fn = mono_gc_out_of_memory;
GC_set_warn_proc (mono_gc_warning);
#else
if (mono_gc_is_gc_thread())
return TRUE;
-#if defined(USE_INCLUDED_LIBGC) && !defined(PLATFORM_WIN32)
+#if defined(USE_INCLUDED_LIBGC) && !defined(HOST_WIN32)
return GC_thread_register_foreign (baseptr);
#else
return FALSE;
void
mono_gc_deregister_root (char* addr)
{
-#ifndef PLATFORM_WIN32
+#ifndef HOST_WIN32
/* FIXME: libgc doesn't define this work win32 for some reason */
/* FIXME: No size info */
GC_remove_roots (addr, addr + sizeof (gpointer) + 1);
void
mono_gc_add_weak_track_handle (MonoObject *obj, guint32 handle)
{
- MonoDomain *domain = mono_object_get_domain (obj);
+ MonoDomain *domain;
+
+ if (!obj)
+ return;
+
+ domain = mono_object_get_domain (obj);
mono_domain_finalizers_lock (domain);
}
void
-mono_gc_wbarrier_arrayref_copy (MonoArray *arr, gpointer slot_ptr, int count)
+mono_gc_wbarrier_arrayref_copy (gpointer dest_ptr, gpointer src_ptr, int count)
{
- /* no need to do anything */
+ memmove (dest_ptr, src_ptr, count * sizeof (gpointer));
}
void
void
mono_gc_wbarrier_value_copy (gpointer dest, gpointer src, int count, MonoClass *klass)
{
+ memmove (dest, src, count * mono_class_value_size (klass, NULL));
}
void
-mono_gc_wbarrier_object (MonoObject *object)
+mono_gc_wbarrier_object_copy (MonoObject* obj, MonoObject *src)
{
+ /* do not copy the sync state */
+ memcpy ((char*)obj + sizeof (MonoObject), (char*)src + sizeof (MonoObject),
+ mono_object_class (obj)->instance_size - sizeof (MonoObject));
}
void
{
}
+int
+mono_gc_get_suspend_signal (void)
+{
+#ifdef USE_INCLUDED_GC
+ return GC_get_suspend_signal ();
+#else
+ return -1;
+#endif
+}
+
#if defined(USE_INCLUDED_LIBGC) && defined(USE_COMPILER_TLS) && defined(__linux__) && (defined(__i386__) || defined(__x86_64__))
extern __thread MONO_TLS_FAST void* GC_thread_tls;
#include "metadata-internals.h"
return mono_gc_get_managed_allocator_by_type (atype);
}
+MonoMethod*
+mono_gc_get_managed_array_allocator (MonoVTable *vtable, int rank)
+{
+ return NULL;
+}
+
/**
* mono_gc_get_managed_allocator_id:
*
return NULL;
}
+MonoMethod*
+mono_gc_get_managed_array_allocator (MonoVTable *vtable, int rank)
+{
+ return NULL;
+}
+
int
mono_gc_get_managed_allocator_type (MonoMethod *managed_alloc)
{