From: Mark Probst Date: Fri, 15 May 2015 22:32:04 +0000 (-0700) Subject: [sgen] Typedef for GC descriptors. X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=commitdiff_plain;h=31e37fdc0acfc1603fc942538616965907b850bf;p=mono.git [sgen] Typedef for GC descriptors. --- diff --git a/mono/metadata/sgen-client-mono.h b/mono/metadata/sgen-client-mono.h index 05645383d42..2847011dc22 100644 --- a/mono/metadata/sgen-client-mono.h +++ b/mono/metadata/sgen-client-mono.h @@ -33,10 +33,10 @@ SGEN_LOAD_VTABLE_UNCHECKED (GCObject *obj) return obj->vtable; } -static inline mword +static inline SgenDescriptor sgen_vtable_get_descriptor (GCVTable vtable) { - return (mword)vtable->gc_descr; + return (SgenDescriptor)vtable->gc_descr; } typedef struct _SgenClientThreadInfo SgenClientThreadInfo; @@ -140,7 +140,7 @@ sgen_client_slow_object_get_size (GCVTable vtable, GCObject* o) static MONO_NEVER_INLINE mword sgen_client_par_object_get_size (GCVTable vtable, GCObject* o) { - mword descr = sgen_vtable_get_descriptor (vtable); + SgenDescriptor descr = sgen_vtable_get_descriptor (vtable); mword type = descr & DESC_TYPE_MASK; if (type == DESC_TYPE_RUN_LENGTH || type == DESC_TYPE_SMALL_PTRFREE) { diff --git a/mono/metadata/sgen-mono.c b/mono/metadata/sgen-mono.c index 05133715550..7d8e12dc8ee 100644 --- a/mono/metadata/sgen-mono.c +++ b/mono/metadata/sgen-mono.c @@ -2404,13 +2404,13 @@ mono_gc_set_stack_end (void *stack_end) int mono_gc_register_root (char *start, size_t size, void *descr) { - return sgen_register_root (start, size, descr, descr ? ROOT_TYPE_NORMAL : ROOT_TYPE_PINNED); + return sgen_register_root (start, size, (SgenDescriptor)descr, descr ? ROOT_TYPE_NORMAL : ROOT_TYPE_PINNED); } int mono_gc_register_root_wbarrier (char *start, size_t size, void *descr) { - return sgen_register_root (start, size, descr, ROOT_TYPE_WBARRIER); + return sgen_register_root (start, size, (SgenDescriptor)descr, ROOT_TYPE_WBARRIER); } void @@ -2541,7 +2541,7 @@ mono_gc_get_heap_size (void) void* mono_gc_make_root_descr_user (MonoGCRootMarkFunc marker) { - return sgen_make_user_root_descriptor ((SgenUserRootMarkFunc)marker); + return (void*)sgen_make_user_root_descriptor ((SgenUserRootMarkFunc)marker); } void* diff --git a/mono/sgen/sgen-debug.c b/mono/sgen/sgen-debug.c index 07d423012f2..5b4f7fe3ce4 100644 --- a/mono/sgen/sgen-debug.c +++ b/mono/sgen/sgen-debug.c @@ -68,7 +68,7 @@ static void describe_pointer (char *ptr, gboolean need_setup) { GCVTable vtable; - mword desc; + SgenDescriptor desc; int type; char *start; char *forwarded; @@ -180,7 +180,7 @@ check_consistency_callback (GCObject *obj, size_t size, void *dummy) { char *start = (char*)obj; GCVTable vt = LOAD_VTABLE (obj); - mword desc = sgen_vtable_get_descriptor (vt); + SgenDescriptor desc = sgen_vtable_get_descriptor (vt); SGEN_LOG (8, "Scanning object %p, vtable: %p (%s)", start, vt, sgen_client_vtable_get_name (vt)); #include "sgen-scan-object.h" @@ -239,7 +239,7 @@ check_mod_union_callback (GCObject *obj, size_t size, void *dummy) char *start = (char*)obj; gboolean in_los = (gboolean) (size_t) dummy; GCVTable vt = LOAD_VTABLE (obj); - mword desc = sgen_vtable_get_descriptor (vt); + SgenDescriptor desc = sgen_vtable_get_descriptor (vt); guint8 *cards; SGEN_LOG (8, "Scanning object %p, vtable: %p (%s)", obj, vt, sgen_client_vtable_get_name (vt)); @@ -279,7 +279,7 @@ static void check_major_refs_callback (GCObject *obj, size_t size, void *dummy) { char *start = (char*)obj; - mword desc = sgen_obj_get_descriptor (obj); + SgenDescriptor desc = sgen_obj_get_descriptor (obj); #include "sgen-scan-object.h" } @@ -309,7 +309,7 @@ void check_object (GCObject *obj) { char *start = (char*)obj; - mword desc; + SgenDescriptor desc; if (!start) return; @@ -453,7 +453,7 @@ verify_object_pointers_callback (GCObject *obj, size_t size, void *data) { char *start = (char*)obj; gboolean allow_missing_pinned = (gboolean) (size_t) data; - mword desc = sgen_obj_get_descriptor (obj); + SgenDescriptor desc = sgen_obj_get_descriptor (obj); #include "sgen-scan-object.h" } @@ -578,7 +578,7 @@ check_marked_callback (GCObject *obj, size_t size, void *dummy) { char *start = (char*)obj; gboolean flag = (gboolean) (size_t) dummy; - mword desc; + SgenDescriptor desc; if (sgen_ptr_in_nursery (start)) { if (flag) @@ -740,7 +740,7 @@ scan_object_for_specific_ref (GCObject *obj, GCObject *key) if (scan_object_for_specific_ref_precise) { char *start = (char*)obj; - mword desc = sgen_obj_get_descriptor_safe (obj); + SgenDescriptor desc = sgen_obj_get_descriptor_safe (obj); #include "sgen-scan-object.h" } else { mword *words = (mword*)obj; @@ -787,7 +787,7 @@ scan_roots_for_specific_ref (GCObject *key, int root_type) check_key = key; SGEN_HASH_TABLE_FOREACH (&roots_hash [root_type], start_root, root) { - mword desc = root->root_desc; + SgenDescriptor desc = root->root_desc; check_root = root; @@ -888,7 +888,7 @@ sgen_scan_for_registered_roots_in_domain (MonoDomain *domain, int root_type) RootRecord *root; check_domain = domain; SGEN_HASH_TABLE_FOREACH (&roots_hash [root_type], start_root, root) { - mword desc = root->root_desc; + SgenDescriptor desc = root->root_desc; /* The MonoDomain struct is allowed to hold references to objects in its own domain. */ @@ -1030,7 +1030,7 @@ scan_object_for_xdomain_refs (GCObject *obj, mword size, void *data) char *start = (char*)obj; MonoVTable *vt = SGEN_LOAD_VTABLE (obj); MonoDomain *domain = vt->domain; - mword desc = sgen_vtable_get_descriptor (vt); + SgenDescriptor desc = sgen_vtable_get_descriptor (vt); #include "sgen-scan-object.h" } diff --git a/mono/sgen/sgen-descriptor.c b/mono/sgen/sgen-descriptor.c index 4747c7ce292..2e7b42fbd39 100644 --- a/mono/sgen/sgen-descriptor.c +++ b/mono/sgen/sgen-descriptor.c @@ -110,7 +110,7 @@ alloc_complex_descriptor (gsize *bitmap, int numbits) } gsize* -sgen_get_complex_descriptor (mword desc) +sgen_get_complex_descriptor (SgenDescriptor desc) { return complex_descriptors + (desc >> LOW_TYPE_BITS); } @@ -122,7 +122,7 @@ void* mono_gc_make_descr_for_object (gsize *bitmap, int numbits, size_t obj_size) { int first_set = -1, num_set = 0, last_set = -1, i; - mword desc = 0; + SgenDescriptor desc = 0; size_t stored_size = obj_size; stored_size += SGEN_ALLOC_ALIGN - 1; @@ -177,7 +177,7 @@ void* mono_gc_make_descr_for_array (int vector, gsize *elem_bitmap, int numbits, size_t elem_size) { int first_set = -1, num_set = 0, last_set = -1, i; - mword desc = DESC_TYPE_VECTOR | (vector ? VECTOR_KIND_SZARRAY : VECTOR_KIND_ARRAY); + SgenDescriptor desc = DESC_TYPE_VECTOR | (vector ? VECTOR_KIND_SZARRAY : VECTOR_KIND_ARRAY); for (i = 0; i < numbits; ++i) { if (elem_bitmap [i / GC_BITS_PER_WORD] & ((gsize)1 << (i % GC_BITS_PER_WORD))) { if (first_set < 0) @@ -218,7 +218,7 @@ mono_gc_make_descr_for_array (int vector, gsize *elem_bitmap, int numbits, size_ gsize* mono_gc_get_bitmap_for_descr (void *descr, int *numbits) { - mword d = (mword)descr; + SgenDescriptor d = (SgenDescriptor)descr; gsize *bitmap; switch (d & DESC_TYPE_MASK) { @@ -278,7 +278,7 @@ mono_gc_make_descr_from_bitmap (gsize *bitmap, int numbits) } else if (numbits < ((sizeof (*bitmap) * 8) - ROOT_DESC_TYPE_SHIFT)) { return (void*)MAKE_ROOT_DESC (ROOT_DESC_BITMAP, bitmap [0]); } else { - mword complex = alloc_complex_descriptor (bitmap, numbits); + SgenDescriptor complex = alloc_complex_descriptor (bitmap, numbits); return (void*)MAKE_ROOT_DESC (ROOT_DESC_COMPLEX, complex); } } @@ -310,33 +310,33 @@ mono_gc_make_root_descr_all_refs (int numbits) return descr; } -void* +SgenDescriptor sgen_make_user_root_descriptor (SgenUserRootMarkFunc marker) { - void *descr; + SgenDescriptor descr; g_assert (user_descriptors_next < MAX_USER_DESCRIPTORS); - descr = (void*)MAKE_ROOT_DESC (ROOT_DESC_USER, (mword)user_descriptors_next); + descr = MAKE_ROOT_DESC (ROOT_DESC_USER, (SgenDescriptor)user_descriptors_next); user_descriptors [user_descriptors_next ++] = marker; return descr; } void* -sgen_get_complex_descriptor_bitmap (mword desc) +sgen_get_complex_descriptor_bitmap (SgenDescriptor desc) { return complex_descriptors + (desc >> ROOT_DESC_TYPE_SHIFT); } SgenUserRootMarkFunc -sgen_get_user_descriptor_func (mword desc) +sgen_get_user_descriptor_func (SgenDescriptor desc) { return user_descriptors [desc >> ROOT_DESC_TYPE_SHIFT]; } #ifdef HEAVY_STATISTICS void -sgen_descriptor_count_scanned_object (mword desc) +sgen_descriptor_count_scanned_object (SgenDescriptor desc) { int type = desc & DESC_TYPE_MASK; SGEN_ASSERT (0, type, "Descriptor type can't be zero"); @@ -344,7 +344,7 @@ sgen_descriptor_count_scanned_object (mword desc) } void -sgen_descriptor_count_copied_object (mword desc) +sgen_descriptor_count_copied_object (SgenDescriptor desc) { int type = desc & DESC_TYPE_MASK; SGEN_ASSERT (0, type, "Descriptor type can't be zero"); diff --git a/mono/sgen/sgen-descriptor.h b/mono/sgen/sgen-descriptor.h index e5958181513..c61fa5f74d6 100644 --- a/mono/sgen/sgen-descriptor.h +++ b/mono/sgen/sgen-descriptor.h @@ -25,7 +25,6 @@ #include - /* * ###################################################################### * ######## GC descriptors @@ -134,21 +133,21 @@ enum { typedef void (*SgenUserMarkFunc) (GCObject **addr, void *gc_data); typedef void (*SgenUserRootMarkFunc) (void *addr, SgenUserMarkFunc mark_func, void *gc_data); -void* sgen_make_user_root_descriptor (SgenUserRootMarkFunc marker); +SgenDescriptor sgen_make_user_root_descriptor (SgenUserRootMarkFunc marker); -gsize* sgen_get_complex_descriptor (mword desc); -void* sgen_get_complex_descriptor_bitmap (mword desc); -SgenUserRootMarkFunc sgen_get_user_descriptor_func (mword desc); +gsize* sgen_get_complex_descriptor (SgenDescriptor desc); +void* sgen_get_complex_descriptor_bitmap (SgenDescriptor desc); +SgenUserRootMarkFunc sgen_get_user_descriptor_func (SgenDescriptor desc); void sgen_init_descriptors (void); #ifdef HEAVY_STATISTICS -void sgen_descriptor_count_scanned_object (mword desc); -void sgen_descriptor_count_copied_object (mword desc); +void sgen_descriptor_count_scanned_object (SgenDescriptor desc); +void sgen_descriptor_count_copied_object (SgenDescriptor desc); #endif static inline gboolean -sgen_gc_descr_has_references (mword desc) +sgen_gc_descr_has_references (SgenDescriptor desc) { /* This covers SMALL_PTRFREE and COMPLEX_PTRFREE */ if ((desc & DESC_TYPE_PTRFREE_MASK) == DESC_TYPE_PTRFREE_BITS) diff --git a/mono/sgen/sgen-gc.c b/mono/sgen/sgen-gc.c index 666d0ef8722..291038d06d6 100644 --- a/mono/sgen/sgen-gc.c +++ b/mono/sgen/sgen-gc.c @@ -555,7 +555,7 @@ sgen_drain_gray_stack (int max_objs, ScanCopyContext ctx) int i; for (i = 0; i != max_objs; ++i) { GCObject *obj; - mword desc; + SgenDescriptor desc; GRAY_OBJECT_DEQUEUE (queue, &obj, &desc); if (!obj) return TRUE; @@ -596,7 +596,7 @@ pin_objects_from_nursery_pin_queue (gboolean do_scan_objects, ScanCopyContext ct while (start < end) { void *obj_to_pin = NULL; size_t obj_to_pin_size = 0; - mword desc; + SgenDescriptor desc; addr = *start; @@ -890,7 +890,7 @@ unpin_objects_from_queue (SgenGrayQueue *queue) { for (;;) { GCObject *addr; - mword desc; + SgenDescriptor desc; GRAY_OBJECT_DEQUEUE (queue, &addr, &desc); if (!addr) break; @@ -915,7 +915,7 @@ single_arg_user_copy_or_mark (GCObject **obj, void *gc_data) * This function is not thread-safe! */ static void -precisely_scan_objects_from (void** start_root, void** end_root, char* n_start, char *n_end, mword desc, ScanCopyContext ctx) +precisely_scan_objects_from (void** start_root, void** end_root, char* n_start, char *n_end, SgenDescriptor desc, ScanCopyContext ctx) { CopyOrMarkObjectFunc copy_func = ctx.ops->copy_or_mark_object; SgenGrayQueue *queue = ctx.queue; @@ -2596,7 +2596,7 @@ sgen_have_pending_finalizers (void) * We do not coalesce roots. */ int -sgen_register_root (char *start, size_t size, void *descr, int root_type) +sgen_register_root (char *start, size_t size, SgenDescriptor descr, int root_type) { RootRecord new_root; int i; @@ -2607,9 +2607,8 @@ sgen_register_root (char *start, size_t size, void *descr, int root_type) if (root) { size_t old_size = root->end_root - start; root->end_root = start + size; - g_assert (((root->root_desc != 0) && (descr != NULL)) || - ((root->root_desc == 0) && (descr == NULL))); - root->root_desc = (mword)descr; + SGEN_ASSERT (0, !!root->root_desc == !!descr, "Can't change whether a root is precise or conservative."); + root->root_desc = descr; roots_size += size; roots_size -= old_size; UNLOCK_GC; @@ -2618,12 +2617,12 @@ sgen_register_root (char *start, size_t size, void *descr, int root_type) } new_root.end_root = start + size; - new_root.root_desc = (mword)descr; + new_root.root_desc = descr; sgen_hash_table_replace (&roots_hash [root_type], start, &new_root, NULL); roots_size += size; - SGEN_LOG (3, "Added root for range: %p-%p, descr: %p (%d/%d bytes)", start, new_root.end_root, descr, (int)size, (int)roots_size); + SGEN_LOG (3, "Added root for range: %p-%p, descr: %llx (%d/%d bytes)", start, new_root.end_root, descr, (int)size, (int)roots_size); UNLOCK_GC; return TRUE; diff --git a/mono/sgen/sgen-gc.h b/mono/sgen/sgen-gc.h index 44cc7d42629..f62adc1e5a7 100644 --- a/mono/sgen/sgen-gc.h +++ b/mono/sgen/sgen-gc.h @@ -285,27 +285,7 @@ enum { SGEN_GC_BIT_FINALIZER_AWARE = 4, }; -/* the runtime can register areas of memory as roots: we keep two lists of roots, - * a pinned root set for conservatively scanned roots and a normal one for - * precisely scanned roots (currently implemented as a single list). - */ -typedef struct _RootRecord RootRecord; -struct _RootRecord { - char *end_root; - mword root_desc; -}; - -enum { - ROOT_TYPE_NORMAL = 0, /* "normal" roots */ - ROOT_TYPE_PINNED = 1, /* roots without a GC descriptor */ - ROOT_TYPE_WBARRIER = 2, /* roots with a write barrier */ - ROOT_TYPE_NUM -}; - -extern SgenHashTable roots_hash [ROOT_TYPE_NUM]; - -int sgen_register_root (char *start, size_t size, void *descr, int root_type); -void sgen_deregister_root (char* addr); +typedef mword SgenDescriptor; void sgen_gc_init (void); @@ -382,6 +362,28 @@ void sgen_init_internal_allocator (void); #include "mono/sgen/sgen-descriptor.h" #include "mono/sgen/sgen-gray.h" +/* the runtime can register areas of memory as roots: we keep two lists of roots, + * a pinned root set for conservatively scanned roots and a normal one for + * precisely scanned roots (currently implemented as a single list). + */ +typedef struct _RootRecord RootRecord; +struct _RootRecord { + char *end_root; + SgenDescriptor root_desc; +}; + +enum { + ROOT_TYPE_NORMAL = 0, /* "normal" roots */ + ROOT_TYPE_PINNED = 1, /* roots without a GC descriptor */ + ROOT_TYPE_WBARRIER = 2, /* roots with a write barrier */ + ROOT_TYPE_NUM +}; + +extern SgenHashTable roots_hash [ROOT_TYPE_NUM]; + +int sgen_register_root (char *start, size_t size, SgenDescriptor descr, int root_type); +void sgen_deregister_root (char* addr); + typedef void (*IterateObjectCallbackFunc) (GCObject*, size_t, void*); void sgen_scan_area_with_callback (char *start, char *end, IterateObjectCallbackFunc callback, void *data, gboolean allow_flags); @@ -409,8 +411,8 @@ struct _SgenThreadInfo { gboolean sgen_is_worker_thread (MonoNativeThreadId thread); typedef void (*CopyOrMarkObjectFunc) (GCObject**, SgenGrayQueue*); -typedef void (*ScanObjectFunc) (GCObject *obj, mword desc, SgenGrayQueue*); -typedef void (*ScanVTypeFunc) (GCObject *full_object, char *start, mword desc, SgenGrayQueue* BINARY_PROTOCOL_ARG (size_t size)); +typedef void (*ScanObjectFunc) (GCObject *obj, SgenDescriptor desc, SgenGrayQueue*); +typedef void (*ScanVTypeFunc) (GCObject *full_object, char *start, SgenDescriptor desc, SgenGrayQueue* BINARY_PROTOCOL_ARG (size_t size)); typedef struct { CopyOrMarkObjectFunc copy_or_mark_object; @@ -704,7 +706,7 @@ void mono_gc_wbarrier_generic_store_atomic (gpointer ptr, GCObject *value); void sgen_wbarrier_value_copy_bitmap (gpointer _dest, gpointer _src, int size, unsigned bitmap); -static inline mword +static inline SgenDescriptor sgen_obj_get_descriptor (GCObject *obj) { GCVTable vtable = SGEN_LOAD_VTABLE_UNCHECKED (obj); @@ -712,7 +714,7 @@ sgen_obj_get_descriptor (GCObject *obj) return sgen_vtable_get_descriptor (vtable); } -static inline mword +static inline SgenDescriptor sgen_obj_get_descriptor_safe (GCObject *obj) { GCVTable vtable = SGEN_LOAD_VTABLE (obj); diff --git a/mono/sgen/sgen-gray.c b/mono/sgen/sgen-gray.c index 5b6040eabd8..fd561d50ff4 100644 --- a/mono/sgen/sgen-gray.c +++ b/mono/sgen/sgen-gray.c @@ -96,7 +96,7 @@ sgen_gray_object_free_queue_section (GrayQueueSection *section) */ void -sgen_gray_object_enqueue (SgenGrayQueue *queue, GCObject *obj, mword desc) +sgen_gray_object_enqueue (SgenGrayQueue *queue, GCObject *obj, SgenDescriptor desc) { GrayQueueEntry entry = SGEN_GRAY_QUEUE_ENTRY (obj, desc); diff --git a/mono/sgen/sgen-gray.h b/mono/sgen/sgen-gray.h index 101454f932e..79d2c701a0e 100644 --- a/mono/sgen/sgen-gray.h +++ b/mono/sgen/sgen-gray.h @@ -71,7 +71,7 @@ typedef enum { typedef struct _GrayQueueEntry GrayQueueEntry; struct _GrayQueueEntry { GCObject *obj; - mword desc; + SgenDescriptor desc; }; #define SGEN_GRAY_QUEUE_ENTRY(obj,desc) { (obj), (desc) } @@ -136,7 +136,7 @@ extern guint64 stat_gray_queue_dequeue_slow_path; void sgen_init_gray_queues (void); -void sgen_gray_object_enqueue (SgenGrayQueue *queue, GCObject *obj, mword desc); +void sgen_gray_object_enqueue (SgenGrayQueue *queue, GCObject *obj, SgenDescriptor desc); GrayQueueEntry sgen_gray_object_dequeue (SgenGrayQueue *queue); GrayQueueSection* sgen_gray_object_dequeue_section (SgenGrayQueue *queue); void sgen_gray_object_enqueue_section (SgenGrayQueue *queue, GrayQueueSection *section); @@ -166,7 +166,7 @@ sgen_gray_object_queue_is_empty (SgenGrayQueue *queue) } static inline MONO_ALWAYS_INLINE void -GRAY_OBJECT_ENQUEUE (SgenGrayQueue *queue, GCObject *obj, mword desc) +GRAY_OBJECT_ENQUEUE (SgenGrayQueue *queue, GCObject *obj, SgenDescriptor desc) { #if SGEN_MAX_DEBUG_LEVEL >= 9 sgen_gray_object_enqueue (queue, obj, desc); @@ -187,7 +187,7 @@ GRAY_OBJECT_ENQUEUE (SgenGrayQueue *queue, GCObject *obj, mword desc) } static inline MONO_ALWAYS_INLINE void -GRAY_OBJECT_DEQUEUE (SgenGrayQueue *queue, GCObject** obj, mword *desc) +GRAY_OBJECT_DEQUEUE (SgenGrayQueue *queue, GCObject** obj, SgenDescriptor *desc) { GrayQueueEntry entry; #if SGEN_MAX_DEBUG_LEVEL >= 9 diff --git a/mono/sgen/sgen-marksweep-drain-gray-stack.h b/mono/sgen/sgen-marksweep-drain-gray-stack.h index 47a40c3c11f..01d276ad06d 100644 --- a/mono/sgen/sgen-marksweep-drain-gray-stack.h +++ b/mono/sgen/sgen-marksweep-drain-gray-stack.h @@ -41,7 +41,7 @@ COPY_OR_MARK_FUNCTION_NAME (GCObject **ptr, GCObject *obj, SgenGrayQueue *queue) ++stat_optimized_copy; { char *forwarded; - mword desc; + SgenDescriptor desc; if ((forwarded = SGEN_OBJECT_IS_FORWARDED (obj))) desc = sgen_obj_get_descriptor_safe (forwarded); else @@ -130,7 +130,7 @@ COPY_OR_MARK_FUNCTION_NAME (GCObject **ptr, GCObject *obj, SgenGrayQueue *queue) return FALSE; } else { mword vtable_word = *(mword*)obj; - mword desc; + SgenDescriptor desc; int type; HEAVY_STAT (++stat_optimized_copy_major); @@ -194,7 +194,7 @@ COPY_OR_MARK_FUNCTION_NAME (GCObject **ptr, GCObject *obj, SgenGrayQueue *queue) } static void -SCAN_OBJECT_FUNCTION_NAME (GCObject *obj, mword desc, SgenGrayQueue *queue) +SCAN_OBJECT_FUNCTION_NAME (GCObject *obj, SgenDescriptor desc, SgenGrayQueue *queue) { char *start = (char*)obj; @@ -236,7 +236,7 @@ DRAIN_GRAY_STACK_FUNCTION_NAME (ScanCopyContext ctx) for (;;) { GCObject *obj; - mword desc; + SgenDescriptor desc; HEAVY_STAT (++stat_drain_loops); diff --git a/mono/sgen/sgen-marksweep-scan-object-concurrent.h b/mono/sgen/sgen-marksweep-scan-object-concurrent.h index 855f9247248..b2061da8ca1 100644 --- a/mono/sgen/sgen-marksweep-scan-object-concurrent.h +++ b/mono/sgen/sgen-marksweep-scan-object-concurrent.h @@ -52,7 +52,7 @@ extern guint64 stat_scan_object_called_major; #define ADD_TO_GLOBAL_REMSET(object,ptr,target) mark_mod_union_card ((object), (void**)(ptr)) static void -major_scan_object_no_mark_concurrent_anywhere (GCObject *full_object, mword desc, SgenGrayQueue *queue) +major_scan_object_no_mark_concurrent_anywhere (GCObject *full_object, SgenDescriptor desc, SgenGrayQueue *queue) { char *start = (char*)full_object; @@ -73,13 +73,13 @@ major_scan_object_no_mark_concurrent_anywhere (GCObject *full_object, mword desc } static void -major_scan_object_no_mark_concurrent_start (GCObject *start, mword desc, SgenGrayQueue *queue) +major_scan_object_no_mark_concurrent_start (GCObject *start, SgenDescriptor desc, SgenGrayQueue *queue) { major_scan_object_no_mark_concurrent_anywhere (start, desc, queue); } static void -major_scan_object_no_mark_concurrent (GCObject *start, mword desc, SgenGrayQueue *queue) +major_scan_object_no_mark_concurrent (GCObject *start, SgenDescriptor desc, SgenGrayQueue *queue) { SGEN_ASSERT (0, !sgen_ptr_in_nursery (start), "Why are we scanning nursery objects in the concurrent collector?"); major_scan_object_no_mark_concurrent_anywhere (start, desc, queue); @@ -89,7 +89,7 @@ major_scan_object_no_mark_concurrent (GCObject *start, mword desc, SgenGrayQueue #define ADD_TO_GLOBAL_REMSET(object,ptr,target) sgen_add_to_global_remset ((ptr), (target)) static void -major_scan_vtype_concurrent_finish (GCObject *full_object, char *start, mword desc, SgenGrayQueue *queue BINARY_PROTOCOL_ARG (size_t size)) +major_scan_vtype_concurrent_finish (GCObject *full_object, char *start, SgenDescriptor desc, SgenGrayQueue *queue BINARY_PROTOCOL_ARG (size_t size)) { SGEN_OBJECT_LAYOUT_STATISTICS_DECLARE_BITMAP; diff --git a/mono/sgen/sgen-minor-scan-object.h b/mono/sgen/sgen-minor-scan-object.h index 5bd452578d9..cda7746a44d 100644 --- a/mono/sgen/sgen-minor-scan-object.h +++ b/mono/sgen/sgen-minor-scan-object.h @@ -46,7 +46,7 @@ extern guint64 stat_scan_object_called_nursery; } while (0) static void -SERIAL_SCAN_OBJECT (GCObject *object, mword desc, SgenGrayQueue *queue) +SERIAL_SCAN_OBJECT (GCObject *object, SgenDescriptor desc, SgenGrayQueue *queue) { char *start = (char*)object; @@ -66,7 +66,7 @@ SERIAL_SCAN_OBJECT (GCObject *object, mword desc, SgenGrayQueue *queue) } static void -SERIAL_SCAN_VTYPE (GCObject *full_object, char *start, mword desc, SgenGrayQueue *queue BINARY_PROTOCOL_ARG (size_t size)) +SERIAL_SCAN_VTYPE (GCObject *full_object, char *start, SgenDescriptor desc, SgenGrayQueue *queue BINARY_PROTOCOL_ARG (size_t size)) { SGEN_OBJECT_LAYOUT_STATISTICS_DECLARE_BITMAP;