-/*
- * null-gc.c: GC implementation using malloc: will leak everything, just for testing.
+/**
+ * \file
+ * GC implementation using malloc: will leak everything, just for testing.
*
* Copyright 2001-2003 Ximian, Inc (http://www.ximian.com)
* Copyright 2004-2011 Novell, Inc (http://www.novell.com)
#include <mono/metadata/mono-gc.h>
#include <mono/metadata/gc-internals.h>
#include <mono/metadata/runtime.h>
+#include <mono/metadata/w32handle.h>
#include <mono/utils/atomic.h>
#include <mono/utils/mono-threads.h>
#include <mono/utils/mono-counters.h>
+#include <mono/metadata/null-gc-handles.h>
#ifdef HAVE_NULL_GC
+static gboolean gc_inited = FALSE;
+
void
mono_gc_base_init (void)
{
- MonoThreadInfoCallbacks cb;
- int dummy;
+ if (gc_inited)
+ return;
mono_counters_init ();
mono_w32handle_init ();
#endif
- 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;
+ mono_thread_callbacks_init ();
+ mono_thread_info_init (sizeof (MonoThreadInfo));
+
+ mono_thread_info_attach ();
- mono_threads_init (&cb, sizeof (MonoThreadInfo));
+ null_gc_handles_init ();
- mono_thread_info_attach (&dummy);
+ gc_inited = TRUE;
}
void
return TRUE;
}
-gboolean
-mono_gc_register_thread (void *baseptr)
-{
- return TRUE;
-}
-
int
mono_gc_walk_heap (int flags, MonoGCReferences callback, void *data)
{
{
}
-void
-mono_gc_weak_link_add (void **link_addr, MonoObject *obj, gboolean track)
-{
- *link_addr = obj;
-}
-
-void
-mono_gc_weak_link_remove (void **link_addr, gboolean track)
-{
- *link_addr = NULL;
-}
-
-MonoObject*
-mono_gc_weak_link_get (void **link_addr)
-{
- return *link_addr;
-}
-
void*
mono_gc_make_descr_for_string (gsize *bitmap, int numbits)
{
return NULL;
}
+void*
+mono_gc_make_vector_descr (void)
+{
+ return NULL;
+}
+
void*
mono_gc_make_root_descr_all_refs (int numbits)
{
return FALSE;
}
+gpointer
+mono_gc_thread_attach (MonoThreadInfo* info)
+{
+ info->handle_stack = mono_handle_stack_alloc ();
+ return info;
+}
+
+void
+mono_gc_thread_detach_with_lock (MonoThreadInfo *p)
+{
+ mono_handle_stack_free (p->handle_stack);
+}
+
+gboolean
+mono_gc_thread_in_critical_region (MonoThreadInfo *info)
+{
+ return FALSE;
+}
+
int
mono_gc_get_aligned_size_for_allocator (int size)
{
return "null";
}
-void
-mono_gc_add_weak_track_handle (MonoObject *obj, guint32 gchandle)
-{
-}
-
-void
-mono_gc_change_weak_track_handle (MonoObject *old_obj, MonoObject *obj, guint32 gchandle)
-{
-}
-
-void
-mono_gc_remove_weak_track_handle (guint32 gchandle)
-{
-}
-
-GSList*
-mono_gc_remove_weak_track_object (MonoDomain *domain, MonoObject *obj)
-{
- return NULL;
-}
-
void
mono_gc_clear_domain (MonoDomain *domain)
{
}
void
-mono_gc_wbarrier_value_copy_bitmap (gpointer _dest, gpointer _src, int size, unsigned bitmap)
+mono_gc_wbarrier_range_copy (gpointer _dest, gpointer _src, int size)
{
g_assert_not_reached ();
}
+void*
+mono_gc_get_range_copy_func (void)
+{
+ return &mono_gc_wbarrier_range_copy;
+}
+
guint8*
mono_gc_get_card_table (int *shift_bits, gpointer *card_mask)
{
{
return TRUE;
}
+
+int
+mono_gc_invoke_finalizers (void)
+{
+ return 0;
+}
+
+MonoBoolean
+mono_gc_pending_finalizers (void)
+{
+ return FALSE;
+}
+
#else
-#ifdef _MSC_VER
-// Quiet Visual Studio linker warning, LNK4221, in cases when this source file intentional ends up empty.
-void __mono_win32_null_gc_quiet_lnk4221(void) {}
-#endif
+MONO_EMPTY_SOURCE_FILE (null_gc);
#endif /* HAVE_NULL_GC */