[sgen] Fix size warnings in the descriptor code.
[mono.git] / mono / metadata / sgen-major-scan-object.h
index 6b658058db581c0589460f58e715cd5b3b1048c1..a4674a2139d4c7180b260fc8b9eac8c9799cd121 100644 (file)
@@ -27,25 +27,28 @@ extern long long stat_scan_object_called_major;
 #define PREFETCH_DYNAMIC_HEAP(addr)    PREFETCH ((addr))
 #endif
 
-#ifdef SGEN_CONCURRENT_MARK
+#ifdef SCAN_FOR_CONCURRENT_MARK
 #define FOLLOW_OBJECT(addr)    (!sgen_ptr_in_nursery ((addr)))
 #define ALWAYS_ADD_TO_GLOBAL_REMSET    1
+#define CONCURRENT_NAME(x)     x ## _concurrent
 #else
 #define FOLLOW_OBJECT(addr)    1
 #define ALWAYS_ADD_TO_GLOBAL_REMSET    0
+#define CONCURRENT_NAME(x)     x
 #endif
 
 #undef HANDLE_PTR
 #define HANDLE_PTR(ptr,obj)    do {                                    \
                void *__old = *(ptr);                                   \
                void *__copy;                                           \
+               SGEN_OBJECT_LAYOUT_STATISTICS_MARK_BITMAP ((obj), (ptr)); \
                if (__old && FOLLOW_OBJECT (__old)) {                   \
                        PREFETCH_DYNAMIC_HEAP (__old);                  \
-                       major_copy_or_mark_object ((ptr), __old, queue);        \
+                       CONCURRENT_NAME (major_copy_or_mark_object) ((ptr), __old, queue); \
                        __copy = *(ptr);                                \
                        SGEN_COND_LOG (9, __old != __copy, "Overwrote field at %p with %p (was: %p)", (ptr), *(ptr), __old); \
                        if (G_UNLIKELY (sgen_ptr_in_nursery (__copy) && !sgen_ptr_in_nursery ((ptr)))) \
-                               sgen_add_to_global_remset ((ptr), __copy); \
+                               sgen_add_to_global_remset ((ptr), __copy);      \
                } else {                                                \
                        if (ALWAYS_ADD_TO_GLOBAL_REMSET && G_UNLIKELY (sgen_ptr_in_nursery (__old) && !sgen_ptr_in_nursery ((ptr)))) \
                                sgen_add_to_global_remset ((ptr), __old); \
@@ -53,25 +56,39 @@ extern long long stat_scan_object_called_major;
        } while (0)
 
 static void
-major_scan_object (char *start, SgenGrayQueue *queue)
+CONCURRENT_NAME (major_scan_object) (char *start, SgenGrayQueue *queue)
 {
+       SGEN_OBJECT_LAYOUT_STATISTICS_DECLARE_BITMAP;
+
+#define SCAN_OBJECT_PROTOCOL
 #include "sgen-scan-object.h"
 
+       SGEN_OBJECT_LAYOUT_STATISTICS_COMMIT_BITMAP;
        HEAVY_STAT (++stat_scan_object_called_major);
 }
 
-#ifdef SGEN_CONCURRENT_MARK
+#ifdef SCAN_FOR_CONCURRENT_MARK
 #ifdef SGEN_PARALLEL_MARK
 #error concurrent and parallel mark not supported yet
 #else
 static void
-major_scan_vtype (char *start, mword desc, SgenGrayQueue *queue)
+CONCURRENT_NAME (major_scan_vtype) (char *start, mword desc, SgenGrayQueue *queue BINARY_PROTOCOL_ARG (size_t size))
 {
+       SGEN_OBJECT_LAYOUT_STATISTICS_DECLARE_BITMAP;
+
        /* The descriptors include info about the MonoObject header as well */
        start -= sizeof (MonoObject);
 
 #define SCAN_OBJECT_NOVTABLE
+#define SCAN_OBJECT_PROTOCOL
 #include "sgen-scan-object.h"
+
+       SGEN_OBJECT_LAYOUT_STATISTICS_COMMIT_BITMAP;
 }
 #endif
 #endif
+
+#undef PREFETCH_DYNAMIC_HEAP
+#undef FOLLOW_OBJECT
+#undef ALWAYS_ADD_TO_GLOBAL_REMSET
+#undef CONCURRENT_NAME