[sgen] `GCObject*` instead of `void*`
authorMark Probst <mark.probst@gmail.com>
Fri, 22 May 2015 22:59:05 +0000 (15:59 -0700)
committerMark Probst <mark.probst@gmail.com>
Mon, 22 Jun 2015 19:07:00 +0000 (12:07 -0700)
mono/metadata/sgen-mono.c
mono/sgen/sgen-alloc.c
mono/sgen/sgen-copy-object.h
mono/sgen/sgen-gc.c
mono/sgen/sgen-gc.h
mono/sgen/sgen-marksweep.c
mono/sgen/sgen-simple-nursery.c
mono/sgen/sgen-split-nursery.c

index cea42173ae6b3a23a9fd5e466a86e9a869eb7646..936348752203892fa15151ac0f87acb96e290f86 100644 (file)
@@ -1712,7 +1712,7 @@ mono_gc_alloc_vector (MonoVTable *vtable, size_t size, uintptr_t max_length)
 
 #ifndef DISABLE_CRITICAL_REGION
        ENTER_CRITICAL_REGION;
-       arr = sgen_try_alloc_obj_nolock (vtable, size);
+       arr = (MonoArray*)sgen_try_alloc_obj_nolock (vtable, size);
        if (arr) {
                /*This doesn't require fencing since EXIT_CRITICAL_REGION already does it for us*/
                arr->max_length = (mono_array_size_t)max_length;
@@ -1724,7 +1724,7 @@ mono_gc_alloc_vector (MonoVTable *vtable, size_t size, uintptr_t max_length)
 
        LOCK_GC;
 
-       arr = sgen_alloc_obj_nolock (vtable, size);
+       arr = (MonoArray*)sgen_alloc_obj_nolock (vtable, size);
        if (G_UNLIKELY (!arr)) {
                UNLOCK_GC;
                return mono_gc_out_of_memory (size);
@@ -1754,7 +1754,7 @@ mono_gc_alloc_array (MonoVTable *vtable, size_t size, uintptr_t max_length, uint
 
 #ifndef DISABLE_CRITICAL_REGION
        ENTER_CRITICAL_REGION;
-       arr = sgen_try_alloc_obj_nolock (vtable, size);
+       arr = (MonoArray*)sgen_try_alloc_obj_nolock (vtable, size);
        if (arr) {
                /*This doesn't require fencing since EXIT_CRITICAL_REGION already does it for us*/
                arr->max_length = (mono_array_size_t)max_length;
@@ -1769,7 +1769,7 @@ mono_gc_alloc_array (MonoVTable *vtable, size_t size, uintptr_t max_length, uint
 
        LOCK_GC;
 
-       arr = sgen_alloc_obj_nolock (vtable, size);
+       arr = (MonoArray*)sgen_alloc_obj_nolock (vtable, size);
        if (G_UNLIKELY (!arr)) {
                UNLOCK_GC;
                return mono_gc_out_of_memory (size);
@@ -1801,7 +1801,7 @@ mono_gc_alloc_string (MonoVTable *vtable, size_t size, gint32 len)
 
 #ifndef DISABLE_CRITICAL_REGION
        ENTER_CRITICAL_REGION;
-       str = sgen_try_alloc_obj_nolock (vtable, size);
+       str = (MonoString*)sgen_try_alloc_obj_nolock (vtable, size);
        if (str) {
                /*This doesn't require fencing since EXIT_CRITICAL_REGION already does it for us*/
                str->length = len;
@@ -1813,7 +1813,7 @@ mono_gc_alloc_string (MonoVTable *vtable, size_t size, gint32 len)
 
        LOCK_GC;
 
-       str = sgen_alloc_obj_nolock (vtable, size);
+       str = (MonoString*)sgen_alloc_obj_nolock (vtable, size);
        if (G_UNLIKELY (!str)) {
                UNLOCK_GC;
                return mono_gc_out_of_memory (size);
index d7234830fbe38f35504f5545878706ecbda1fe9b..413388810f8b4ec8053fe82bd6acd65f235a9af1 100644 (file)
@@ -93,10 +93,10 @@ static __thread char **tlab_next_addr MONO_ATTR_USED;
 #define TLAB_REAL_END  (__thread_info__->tlab_real_end)
 #endif
 
-static void*
+static GCObject*
 alloc_degraded (GCVTable vtable, size_t size, gboolean for_mature)
 {
-       void *p;
+       GCObject *p;
 
        if (!for_mature) {
                sgen_client_degraded_allocation (size);
@@ -145,7 +145,7 @@ zero_tlab_if_necessary (void *p, size_t size)
  * so when we scan the thread stacks for pinned objects, we can start
  * a search for the pinned object in SGEN_SCAN_START_SIZE chunks.
  */
-void*
+GCObject*
 sgen_alloc_obj_nolock (GCVTable vtable, size_t size)
 {
        /* FIXME: handle OOM */
@@ -219,7 +219,7 @@ sgen_alloc_obj_nolock (GCVTable vtable, size_t size)
                        g_assert (*p == NULL);
                        mono_atomic_store_seq (p, vtable);
 
-                       return p;
+                       return (GCObject*)p;
                }
 
                /* Slow path */
@@ -326,10 +326,10 @@ sgen_alloc_obj_nolock (GCVTable vtable, size_t size)
                mono_atomic_store_seq (p, vtable);
        }
 
-       return p;
+       return (GCObject*)p;
 }
 
-void*
+GCObject*
 sgen_try_alloc_obj_nolock (GCVTable vtable, size_t size)
 {
        void **p;
@@ -414,13 +414,13 @@ sgen_try_alloc_obj_nolock (GCVTable vtable, size_t size)
 
        mono_atomic_store_seq (p, vtable);
 
-       return p;
+       return (GCObject*)p;
 }
 
-void*
+GCObject*
 sgen_alloc_obj (GCVTable vtable, size_t size)
 {
-       void *res;
+       GCObject *res;
        TLAB_ACCESS_INIT;
 
        if (!SGEN_CAN_ALIGN_UP (size))
@@ -465,10 +465,10 @@ sgen_alloc_obj (GCVTable vtable, size_t size)
  * To be used for interned strings and possibly MonoThread, reflection handles.
  * We may want to explicitly free these objects.
  */
-void*
+GCObject*
 sgen_alloc_obj_pinned (GCVTable vtable, size_t size)
 {
-       void **p;
+       GCObject *p;
 
        if (!SGEN_CAN_ALIGN_UP (size))
                return NULL;
@@ -491,10 +491,10 @@ sgen_alloc_obj_pinned (GCVTable vtable, size_t size)
        return p;
 }
 
-void*
+GCObject*
 sgen_alloc_obj_mature (GCVTable vtable, size_t size)
 {
-       void *res;
+       GCObject *res;
 
        if (!SGEN_CAN_ALIGN_UP (size))
                return NULL;
index 8484e8fdeeac9b5a2b3cc69c0a590076360f162d..847269d5d72b575174d6366fd6236e8652b6dc7b 100644 (file)
@@ -64,7 +64,7 @@ copy_object_no_checks (void *obj, SgenGrayQueue *queue)
        gboolean has_references = SGEN_VTABLE_HAS_REFERENCES (vt);
        mword objsize = SGEN_ALIGN_UP (sgen_client_par_object_get_size (vt, obj));
        /* FIXME: Does this not mark the newly allocated object? */
-       char *destination = COLLECTOR_SERIAL_ALLOC_FOR_PROMOTION (vt, obj, objsize, has_references);
+       void *destination = COLLECTOR_SERIAL_ALLOC_FOR_PROMOTION (vt, obj, objsize, has_references);
 
        if (G_UNLIKELY (!destination)) {
                /* FIXME: Is this path ever tested? */
index 291038d06d6c0775c99ef54c2ca20e7277c13705..a24badfaf7c185d8a870932a9ed92ad26f23face 100644 (file)
@@ -594,7 +594,7 @@ pin_objects_from_nursery_pin_queue (gboolean do_scan_objects, ScanCopyContext ct
        sgen_nursery_allocator_prepare_for_pinning ();
 
        while (start < end) {
-               void *obj_to_pin = NULL;
+               GCObject *obj_to_pin = NULL;
                size_t obj_to_pin_size = 0;
                SgenDescriptor desc;
 
@@ -669,7 +669,7 @@ pin_objects_from_nursery_pin_queue (gboolean do_scan_objects, ScanCopyContext ct
 
                                if (addr >= search_start && (char*)addr < (char*)search_start + obj_size) {
                                        /* This is the object we're looking for. */
-                                       obj_to_pin = search_start;
+                                       obj_to_pin = (GCObject*)search_start;
                                        obj_to_pin_size = canarified_obj_size;
                                        break;
                                }
@@ -695,7 +695,7 @@ pin_objects_from_nursery_pin_queue (gboolean do_scan_objects, ScanCopyContext ct
                 * If this is a dummy array marking the beginning of a nursery
                 * fragment, we don't pin it.
                 */
-               if (sgen_client_object_is_array_fill ((GCObject*)obj_to_pin))
+               if (sgen_client_object_is_array_fill (obj_to_pin))
                        goto next_pin_queue_entry;
 
                /*
@@ -744,7 +744,7 @@ pin_objects_in_nursery (gboolean do_scan_objects, ScanCopyContext ctx)
  * when we can't promote an object because we're out of memory.
  */
 void
-sgen_pin_object (void *object, GrayQueue *queue)
+sgen_pin_object (GCObject *object, GrayQueue *queue)
 {
        /*
         * All pinned objects are assumed to have been staged, so we need to stage as well.
@@ -1045,7 +1045,7 @@ scan_finalizer_entries (SgenPointerQueue *fin_queue, ScanCopyContext ctx)
        size_t i;
 
        for (i = 0; i < fin_queue->next_slot; ++i) {
-               void *obj = fin_queue->data [i];
+               GCObject *obj = fin_queue->data [i];
                if (!obj)
                        continue;
                SGEN_LOG (5, "Scan of fin ready object: %p (%s)\n", obj, sgen_client_vtable_get_name (SGEN_LOAD_VTABLE (obj)));
@@ -2468,7 +2468,7 @@ report_internal_mem_usage (void)
  * Return TRUE if @obj is ready to be finalized.
  */
 static inline gboolean
-sgen_is_object_alive (void *object)
+sgen_is_object_alive (GCObject *object)
 {
        if (ptr_in_nursery (object))
                return sgen_nursery_is_object_alive (object);
@@ -2495,7 +2495,7 @@ sgen_is_object_alive_and_on_current_collection (GCObject *object)
 
 
 gboolean
-sgen_gc_is_object_ready_for_finalization (void *object)
+sgen_gc_is_object_ready_for_finalization (GCObject *object)
 {
        return !sgen_is_object_alive (object);
 }
@@ -2511,7 +2511,7 @@ sgen_queue_finalization_entry (GCObject *obj)
 }
 
 gboolean
-sgen_object_is_live (void *obj)
+sgen_object_is_live (GCObject *obj)
 {
        return sgen_is_object_alive_and_on_current_collection (obj);
 }
@@ -2538,7 +2538,7 @@ sgen_gc_invoke_finalizers (void)
 
        /* FIXME: batch to reduce lock contention */
        while (sgen_have_pending_finalizers ()) {
-               void *obj;
+               GCObject *obj;
 
                LOCK_GC;
 
index eadeea339ca5a54a328ddcfbf9a68d61ceef4028..bc1b131f508a1a0adf327a9d07ad26a0f2a5a8e3 100644 (file)
@@ -535,7 +535,7 @@ sgen_nursery_is_object_alive (GCObject *obj)
 typedef struct {
        gboolean is_split;
 
-       char* (*alloc_for_promotion) (GCVTable vtable, GCObject *obj, size_t objsize, gboolean has_references);
+       GCObject* (*alloc_for_promotion) (GCVTable vtable, GCObject *obj, size_t objsize, gboolean has_references);
 
        SgenObjectOperations serial_ops;
 
@@ -560,7 +560,7 @@ void sgen_split_nursery_init (SgenMinorCollector *collector);
 #ifdef SGEN_CHECK_UPDATE_REFERENCE
 gboolean sgen_thread_pool_is_thread_pool_thread (MonoNativeThreadId some_thread) MONO_INTERNAL;
 static inline void
-sgen_update_reference (void **p, void *o, gboolean allow_null)
+sgen_update_reference (GCObject **p, GCObject *o, gboolean allow_null)
 {
        if (!allow_null)
                SGEN_ASSERT (0, o, "Cannot update a reference with a NULL pointer");
@@ -568,10 +568,10 @@ sgen_update_reference (void **p, void *o, gboolean allow_null)
        *p = o;
 }
 
-#define SGEN_UPDATE_REFERENCE_ALLOW_NULL(p,o)  sgen_update_reference ((void**)(p), (void*)(o), TRUE)
-#define SGEN_UPDATE_REFERENCE(p,o)             sgen_update_reference ((void**)(p), (void*)(o), FALSE)
+#define SGEN_UPDATE_REFERENCE_ALLOW_NULL(p,o)  sgen_update_reference ((GCObject**)(p), (GCObject*)(o), TRUE)
+#define SGEN_UPDATE_REFERENCE(p,o)             sgen_update_reference ((GCObject**)(p), (GCObject*)(o), FALSE)
 #else
-#define SGEN_UPDATE_REFERENCE_ALLOW_NULL(p,o)  (*(void**)(p) = (void*)(o))
+#define SGEN_UPDATE_REFERENCE_ALLOW_NULL(p,o)  (*(GCObject**)(p) = (GCObject*)(o))
 #define SGEN_UPDATE_REFERENCE(p,o)             SGEN_UPDATE_REFERENCE_ALLOW_NULL ((p), (o))
 #endif
 
@@ -613,15 +613,15 @@ struct _SgenMajorCollector {
 
        void* (*alloc_heap) (mword nursery_size, mword nursery_align, int nursery_bits);
        gboolean (*is_object_live) (GCObject *obj);
-       void* (*alloc_small_pinned_obj) (GCVTable vtable, size_t size, gboolean has_references);
-       void* (*alloc_degraded) (GCVTable vtable, size_t size);
+       GCObject* (*alloc_small_pinned_obj) (GCVTable vtable, size_t size, gboolean has_references);
+       GCObject* (*alloc_degraded) (GCVTable vtable, size_t size);
 
        SgenObjectOperations major_ops_serial;
        SgenObjectOperations major_ops_concurrent_start;
        SgenObjectOperations major_ops_concurrent;
        SgenObjectOperations major_ops_concurrent_finish;
 
-       void* (*alloc_object) (GCVTable vtable, size_t size, gboolean has_references);
+       GCObject* (*alloc_object) (GCVTable vtable, size_t size, gboolean has_references);
        void (*free_pinned_object) (GCObject *obj, size_t size);
 
        /*
@@ -763,7 +763,7 @@ sgen_safe_object_get_size_unaligned (GCObject *obj)
 #include "metadata/sgen-client-mono.h"
 #endif
 
-gboolean sgen_object_is_live (void *obj);
+gboolean sgen_object_is_live (GCObject *obj);
 
 void  sgen_init_fin_weak_hash (void);
 
@@ -781,7 +781,7 @@ typedef gboolean (*SgenObjectPredicateFunc) (GCObject *obj, void *user_data);
 
 void sgen_null_links_if (SgenObjectPredicateFunc predicate, void *data, int generation);
 
-gboolean sgen_gc_is_object_ready_for_finalization (void *object);
+gboolean sgen_gc_is_object_ready_for_finalization (GCObject *object);
 void sgen_gc_lock (void);
 void sgen_gc_unlock (void);
 
@@ -810,7 +810,7 @@ enum {
        SPACE_LOS
 };
 
-void sgen_pin_object (void *object, SgenGrayQueue *queue);
+void sgen_pin_object (GCObject *object, SgenGrayQueue *queue);
 void sgen_set_pinned_from_failed_allocation (mword objsize);
 
 void sgen_ensure_free_space (size_t size);
@@ -891,10 +891,10 @@ void sgen_nursery_retire_region (void *address, ptrdiff_t size);
 void sgen_nursery_alloc_prepare_for_minor (void);
 void sgen_nursery_alloc_prepare_for_major (void);
 
-char* sgen_alloc_for_promotion (GCObject *obj, size_t objsize, gboolean has_references);
+GCObject* sgen_alloc_for_promotion (GCObject *obj, size_t objsize, gboolean has_references);
 
-void* sgen_alloc_obj_nolock (GCVTable vtable, size_t size);
-void* sgen_try_alloc_obj_nolock (GCVTable vtable, size_t size);
+GCObject* sgen_alloc_obj_nolock (GCVTable vtable, size_t size);
+GCObject* sgen_try_alloc_obj_nolock (GCVTable vtable, size_t size);
 
 /* Threads */
 
@@ -980,9 +980,9 @@ typedef enum {
 void sgen_init_tlab_info (SgenThreadInfo* info);
 void sgen_clear_tlabs (void);
 
-void* sgen_alloc_obj (GCVTable vtable, size_t size);
-void* sgen_alloc_obj_pinned (GCVTable vtable, size_t size);
-void* sgen_alloc_obj_mature (GCVTable vtable, size_t size);
+GCObject* sgen_alloc_obj (GCVTable vtable, size_t size);
+GCObject* sgen_alloc_obj_pinned (GCVTable vtable, size_t size);
+GCObject* sgen_alloc_obj_mature (GCVTable vtable, size_t size);
 
 /* Debug support */
 
index 7aafced9d8e032a8201a532d1ad751b90afeee39..65467d4d13d4da70723c445415ab355316a4c90c 100644 (file)
@@ -642,7 +642,7 @@ unlink_slot_from_free_list_uncontested (MSBlockInfo * volatile *free_blocks, int
        return obj;
 }
 
-static void*
+static GCObject*
 alloc_obj (GCVTable vtable, size_t size, gboolean pinned, gboolean has_references)
 {
        int size_index = MS_BLOCK_OBJ_SIZE_INDEX (size);
@@ -662,7 +662,7 @@ alloc_obj (GCVTable vtable, size_t size, gboolean pinned, gboolean has_reference
        return obj;
 }
 
-static void*
+static GCObject*
 major_alloc_object (GCVTable vtable, size_t size, gboolean has_references)
 {
        return alloc_obj (vtable, size, FALSE, has_references);
@@ -711,7 +711,7 @@ major_free_non_pinned_object (GCObject *obj, size_t size)
 }
 
 /* size is a multiple of SGEN_ALLOC_ALIGN */
-static void*
+static GCObject*
 major_alloc_small_pinned_obj (GCVTable vtable, size_t size, gboolean has_references)
 {
        void *res;
@@ -736,10 +736,10 @@ free_pinned_object (GCObject *obj, size_t size)
 /*
  * size is already rounded up and we hold the GC lock.
  */
-static void*
+static GCObject*
 major_alloc_degraded (GCVTable vtable, size_t size)
 {
-       void *obj = alloc_obj (vtable, size, FALSE, SGEN_VTABLE_HAS_REFERENCES (vtable));
+       GCObject *obj = alloc_obj (vtable, size, FALSE, SGEN_VTABLE_HAS_REFERENCES (vtable));
        if (G_LIKELY (obj)) {
                HEAVY_STAT (++stat_objects_alloced_degraded);
                HEAVY_STAT (stat_bytes_alloced_degraded += size);
index d1497f6e18a72d6685b279e47e3b657d78028aa1..40639d7050b1db8d2793aa66cf7156285fe0bb9a 100644 (file)
@@ -30,7 +30,7 @@
 #include "mono/sgen/sgen-layout-stats.h"
 #include "mono/sgen/sgen-client.h"
 
-static inline char*
+static inline GCObject*
 alloc_for_promotion (GCVTable vtable, GCObject *obj, size_t objsize, gboolean has_references)
 {
        return major_collector.alloc_object (vtable, objsize, has_references);
index d323acaa872c1cf0f3cc31936bcea2630c70903f..ea427f6a21fee793d5738222aa793cdf3ee52bf8 100644 (file)
@@ -258,7 +258,7 @@ alloc_for_promotion_slow_path (int age, size_t objsize)
        return p;
 }
 
-static inline char*
+static inline GCObject*
 alloc_for_promotion (GCVTable vtable, GCObject *obj, size_t objsize, gboolean has_references)
 {
        char *p = NULL;
@@ -283,10 +283,10 @@ alloc_for_promotion (GCVTable vtable, GCObject *obj, size_t objsize, gboolean ha
        /* FIXME: assumes object layout */
        *(GCVTable*)p = vtable;
 
-       return p;
+       return (GCObject*)p;
 }
 
-static char*
+static GCObject*
 minor_alloc_for_promotion (GCVTable vtable, GCObject *obj, size_t objsize, gboolean has_references)
 {
        /*