#include <mono/metadata/runtime.h>
#include <mono/utils/atomic.h>
#include <mono/utils/mono-threads.h>
+#include <mono/utils/mono-counters.h>
#ifdef HAVE_NULL_GC
MonoThreadInfoCallbacks cb;
int dummy;
+ mono_counters_init ();
+
memset (&cb, 0, sizeof (cb));
/* TODO: This casts away an incompatible pointer type warning in the same
manner that boehm-gc does it. This is probably worth investigating
more carefully. */
cb.mono_method_is_critical = (gpointer)mono_runtime_is_critical_method;
- cb.mono_gc_pthread_create = (gpointer)mono_gc_pthread_create;
- cb.thread_exit = mono_gc_pthread_exit;
mono_threads_init (&cb, sizeof (MonoThreadInfo));
mono_thread_info_attach (&dummy);
}
+void
+mono_gc_base_cleanup (void)
+{
+}
+
void
mono_gc_collect (int generation)
{
{
}
+void
+mono_gc_enable_alloc_events (void)
+{
+}
+
int
-mono_gc_register_root (char *start, size_t size, void *descr)
+mono_gc_register_root (char *start, size_t size, void *descr, MonoGCRootSource source, const char *msg)
{
return TRUE;
}
}
void*
-mono_gc_alloc_fixed (size_t size, void *descr)
+mono_gc_alloc_fixed (size_t size, void *descr, MonoGCRootSource source, const char *msg)
{
return g_malloc0 (size);
}
g_free (addr);
}
+void *
+mono_gc_alloc_obj (MonoVTable *vtable, size_t size)
+{
+ MonoObject *obj = calloc (1, size);
+
+ obj->vtable = vtable;
+
+ return obj;
+}
+
+void *
+mono_gc_alloc_vector (MonoVTable *vtable, size_t size, uintptr_t max_length)
+{
+ MonoArray *obj = calloc (1, size);
+
+ obj->obj.vtable = vtable;
+ obj->max_length = max_length;
+
+ return obj;
+}
+
+void *
+mono_gc_alloc_array (MonoVTable *vtable, size_t size, uintptr_t max_length, uintptr_t bounds_size)
+{
+ MonoArray *obj = calloc (1, size);
+
+ obj->obj.vtable = vtable;
+ obj->max_length = max_length;
+
+ if (bounds_size)
+ obj->bounds = (MonoArrayBounds *) ((char *) obj + size - bounds_size);
+
+ return obj;
+}
+
+void *
+mono_gc_alloc_string (MonoVTable *vtable, size_t size, gint32 len)
+{
+ MonoString *obj = calloc (1, size);
+
+ obj->object.vtable = vtable;
+ obj->length = len;
+ obj->chars [len] = 0;
+
+ return obj;
+}
+
void
mono_gc_wbarrier_set_field (MonoObject *obj, gpointer field_ptr, MonoObject* value)
{
return FALSE;
}
+int
+mono_gc_get_aligned_size_for_allocator (int size)
+{
+ return size;
+}
+
MonoMethod*
-mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box)
+mono_gc_get_managed_allocator (MonoClass *klass, gboolean for_box, gboolean known_instance_size)
{
return NULL;
}
}
MonoMethod*
-mono_gc_get_managed_allocator_by_type (int atype)
+mono_gc_get_managed_allocator_by_type (int atype, gboolean slowpath)
{
return NULL;
}
return -1;
}
+MonoMethod*
+mono_gc_get_specific_write_barrier (gboolean is_concurrent)
+{
+ g_assert_not_reached ();
+ return NULL;
+}
+
MonoMethod*
mono_gc_get_write_barrier (void)
{
}
#ifndef HOST_WIN32
-
int
mono_gc_pthread_create (pthread_t *new_thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)
{
return pthread_create (new_thread, attr, start_routine, arg);
}
-
-int
-mono_gc_pthread_join (pthread_t thread, void **retval)
-{
- return pthread_join (thread, retval);
-}
-
-int
-mono_gc_pthread_detach (pthread_t thread)
-{
- return pthread_detach (thread);
-}
-
-void
-mono_gc_pthread_exit (void *retval)
-{
- pthread_exit (retval);
-}
+#endif
void mono_gc_set_skip_thread (gboolean value)
{
}
-#endif
#ifdef HOST_WIN32
BOOL APIENTRY mono_gc_dllmain (HMODULE module_handle, DWORD reason, LPVOID reserved)
return TRUE;
}
+gboolean
+mono_gc_is_null (void)
+{
+ return TRUE;
+}
+
#endif