[aot] Don't hardcode the nursery size in aot write barriers
[mono.git] / mono / mini / aot-compiler.c
index 509b9ef5897907c1af9e4d1a55cb741432157157..220d89d4e5f87788399821b42083998540e2b8b5 100644 (file)
@@ -5172,6 +5172,7 @@ encode_patch (MonoAotCompile *acfg, MonoJumpInfo *patch_info, guint8 *buf, guint
        case MONO_PATCH_INFO_JIT_TLS_ID:
        case MONO_PATCH_INFO_GC_CARD_TABLE_ADDR:
        case MONO_PATCH_INFO_GC_NURSERY_START:
+       case MONO_PATCH_INFO_GC_NURSERY_BITS:
                break;
        case MONO_PATCH_INFO_CASTCLASS_CACHE:
                encode_value (patch_info->data.index, p, &p);
@@ -5444,6 +5445,7 @@ emit_method_info (MonoAotCompile *acfg, MonoCompile *cfg)
 
                if (patch_info->type == MONO_PATCH_INFO_GC_CARD_TABLE_ADDR ||
                        patch_info->type == MONO_PATCH_INFO_GC_NURSERY_START ||
+                       patch_info->type == MONO_PATCH_INFO_GC_NURSERY_BITS ||
                        patch_info->type == MONO_PATCH_INFO_AOT_MODULE) {
                        /* Stored in a GOT slot initialized at module load time */
                        patch_info->type = MONO_PATCH_INFO_NONE;
@@ -7047,6 +7049,7 @@ compile_method (MonoAotCompile *acfg, MonoMethod *method)
                case MONO_PATCH_INFO_NONE:
                case MONO_PATCH_INFO_GC_CARD_TABLE_ADDR:
                case MONO_PATCH_INFO_GC_NURSERY_START:
+               case MONO_PATCH_INFO_GC_NURSERY_BITS:
                        break;
                case MONO_PATCH_INFO_IMAGE:
                        /* The assembly is stored in GOT slot 0 */
@@ -9521,6 +9524,11 @@ add_preinit_got_slots (MonoAotCompile *acfg)
        get_got_offset (acfg, FALSE, ji);
        get_got_offset (acfg, TRUE, ji);
 
+       ji = mono_mempool_alloc0 (acfg->mempool, sizeof (MonoJumpInfo));
+       ji->type = MONO_PATCH_INFO_GC_NURSERY_BITS;
+       get_got_offset (acfg, FALSE, ji);
+       get_got_offset (acfg, TRUE, ji);
+
        for (i = 0; i < sizeof (preinited_jit_icalls) / sizeof (char*); ++i) {
                ji = mono_mempool_alloc0 (acfg->mempool, sizeof (MonoAotCompile));
                ji->type = MONO_PATCH_INFO_INTERNAL_METHOD;