[arm64] Add sgen support.
[mono.git] / mono / metadata / sgen-pinning.c
index 514e61c974a81817144958bed4a2a5ccd34056b4..d0a38ef426eb94b8b90c82bcedd4490e3fc35ce2 100644 (file)
@@ -262,10 +262,11 @@ sgen_cement_lookup (char *obj)
 }
 
 gboolean
-sgen_cement_lookup_or_register (char *obj, gboolean concurrent_cementing)
+sgen_cement_lookup_or_register (char *obj)
 {
        int i;
        CementHashEntry *hash;
+       gboolean concurrent_cementing = sgen_concurrent_collection_in_progress ();
 
        if (!cement_enabled)
                return FALSE;
@@ -303,12 +304,15 @@ sgen_cement_lookup_or_register (char *obj, gboolean concurrent_cementing)
                return TRUE;
 
        ++hash [i].count;
-#ifdef SGEN_BINARY_PROTOCOL
        if (hash [i].count == SGEN_CEMENT_THRESHOLD) {
+               if (G_UNLIKELY (MONO_GC_OBJ_CEMENTED_ENABLED())) {
+                       MonoVTable *vt G_GNUC_UNUSED = (MonoVTable*)SGEN_LOAD_VTABLE (obj);
+                       MONO_GC_OBJ_CEMENTED ((mword)obj, sgen_safe_object_get_size ((MonoObject*)obj),
+                                       vt->klass->name_space, vt->klass->name);
+               }
                binary_protocol_cement (obj, (gpointer)SGEN_LOAD_VTABLE (obj),
                                sgen_safe_object_get_size ((MonoObject*)obj));
        }
-#endif
 
        return FALSE;
 }