[runtime] Convert AssemblyBuilder.basic_init to handles using a gc handle to pin...
authorZoltan Varga <vargaz@gmail.com>
Sun, 21 Jul 2019 21:46:32 +0000 (17:46 -0400)
committerLarry Ewing <lewing@microsoft.com>
Tue, 23 Jul 2019 17:55:55 +0000 (12:55 -0500)
Commit migrated from https://github.com/mono/mono/commit/4d1a6358d0e1abc39e8b21986e0a211bd9bec766

src/mono/mono/metadata/icall-def-netcore.h
src/mono/mono/metadata/icall-def.h
src/mono/mono/metadata/object-internals.h
src/mono/mono/metadata/sre-internals.h
src/mono/mono/metadata/sre-save.c
src/mono/mono/metadata/sre.c

index a5a2cf0..e9001e7 100644 (file)
@@ -199,7 +199,7 @@ ICALL(CATTR_DATA_1, "ResolveArgumentsInternal", ves_icall_System_Reflection_Cust
 
 ICALL_TYPE(ASSEMB, "System.Reflection.Emit.AssemblyBuilder", ASSEMB_1)
 HANDLES(ASSEMB_1, "UpdateNativeCustomAttributes", ves_icall_AssemblyBuilder_UpdateNativeCustomAttributes, void, 1, (MonoReflectionAssemblyBuilder))
-ICALL(ASSEMB_2, "basic_init", ves_icall_AssemblyBuilder_basic_init)
+HANDLES(ASSEMB_2, "basic_init", ves_icall_AssemblyBuilder_basic_init, void, 1, (MonoReflectionAssemblyBuilder))
 
 ICALL_TYPE(CATTRB, "System.Reflection.Emit.CustomAttributeBuilder", CATTRB_1)
 ICALL(CATTRB_1, "GetBlob", ves_icall_CustomAttributeBuilder_GetBlob)
index c2c51da..3cf3900 100644 (file)
@@ -610,7 +610,7 @@ ICALL(CATTR_DATA_1, "ResolveArgumentsInternal", ves_icall_System_Reflection_Cust
 
 ICALL_TYPE(ASSEMB, "System.Reflection.Emit.AssemblyBuilder", ASSEMB_1)
 HANDLES(ASSEMB_1, "UpdateNativeCustomAttributes", ves_icall_AssemblyBuilder_UpdateNativeCustomAttributes, void, 1, (MonoReflectionAssemblyBuilder))
-ICALL(ASSEMB_2, "basic_init", ves_icall_AssemblyBuilder_basic_init)
+HANDLES(ASSEMB_2, "basic_init", ves_icall_AssemblyBuilder_basic_init, void, 1, (MonoReflectionAssemblyBuilder))
 
 #ifndef DISABLE_REFLECTION_EMIT
 ICALL_TYPE(CATTRB, "System.Reflection.Emit.CustomAttributeBuilder", CATTRB_1)
index 8ec5a9b..86c74b4 100644 (file)
@@ -2197,10 +2197,6 @@ void
 ves_icall_ModuleBuilder_build_metadata (MonoReflectionModuleBuilder *mb);
 
 ICALL_EXPORT
-void
-ves_icall_AssemblyBuilder_basic_init (MonoReflectionAssemblyBuilder *assemblyb);
-
-ICALL_EXPORT
 MonoArray*
 ves_icall_CustomAttributeBuilder_GetBlob (MonoReflectionAssembly *assembly, MonoObject *ctor, MonoArray *ctorArgs, MonoArray *properties, MonoArray *propValues, MonoArray *fields, MonoArray* fieldValues);
 
index 3a56a90..cae1315 100644 (file)
@@ -58,7 +58,7 @@ void
 mono_reflection_emit_init (void);
 
 void
-mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb);
+mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb, MonoError *error);
 
 gpointer
 mono_image_g_malloc0 (MonoImage *image, guint size);
index 2beea38..5ae49ab 100644 (file)
@@ -2810,7 +2810,8 @@ mono_image_create_pefile (MonoReflectionModuleBuilder *mb, HANDLE file, MonoErro
 
        assemblyb = mb->assemblyb;
 
-       mono_reflection_dynimage_basic_init (assemblyb);
+       mono_reflection_dynimage_basic_init (assemblyb, error);
+       return_val_if_nok (error, FALSE);
        assembly = mb->dynamic_image;
 
        assembly->pe_kind = assemblyb->pe_kind;
index f50f7fa..4c13e84 100644 (file)
@@ -1305,9 +1305,8 @@ assemblybuilderaccess_can_save (guint32 access)
  * of the helper hash table and the basic metadata streams.
  */
 void
-mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb)
+mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb, MonoError *error)
 {
-       ERROR_DECL (error);
        MonoDynamicAssembly *assembly;
        MonoDynamicImage *image;
        MonoDomain *domain = mono_object_domain (assemblyb);
@@ -1324,12 +1323,10 @@ mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb)
        assembly->assembly.corlib_internal = assemblyb->corlib_internal;
        assemblyb->assembly.assembly = (MonoAssembly*)assembly;
        assembly->assembly.basedir = mono_string_to_utf8_checked_internal (assemblyb->dir, error);
-       if (mono_error_set_pending_exception (error))
-               return;
+       return_if_nok (error);
        if (assemblyb->culture) {
                assembly->assembly.aname.culture = mono_string_to_utf8_checked_internal (assemblyb->culture, error);
-               if (mono_error_set_pending_exception (error))
-                       return;
+               return_if_nok (error);
        } else
                assembly->assembly.aname.culture = g_strdup ("");
 
@@ -1362,8 +1359,7 @@ mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb)
        assembly->domain = domain;
 
        char *assembly_name = mono_string_to_utf8_checked_internal (assemblyb->name, error);
-       if (mono_error_set_pending_exception (error))
-               return;
+       return_if_nok (error);
        image = mono_dynamic_image_create (assembly, assembly_name, g_strdup ("RefEmit_YouForgotToDefineAModule"));
        image->initial_image = TRUE;
        assembly->assembly.aname.name = image->image.name;
@@ -4441,7 +4437,7 @@ mono_reflection_get_custom_attrs_blob (MonoReflectionAssembly *assembly, MonoObj
 }
 
 void
-mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb)
+mono_reflection_dynimage_basic_init (MonoReflectionAssemblyBuilder *assemblyb, MonoError *error)
 {
        g_error ("This mono runtime was configured with --enable-minimal=reflection_emit, so System.Reflection.Emit is not supported.");
 }
@@ -4596,9 +4592,11 @@ ves_icall_CustomAttributeBuilder_GetBlob (MonoReflectionAssembly *assembly, Mono
 #endif
 
 void
-ves_icall_AssemblyBuilder_basic_init (MonoReflectionAssemblyBuilder *assemblyb)
+ves_icall_AssemblyBuilder_basic_init (MonoReflectionAssemblyBuilderHandle assemblyb, MonoError *error)
 {
-       mono_reflection_dynimage_basic_init (assemblyb);
+       uint32_t gchandle = mono_gchandle_from_handle (MONO_HANDLE_CAST (MonoObject, assemblyb), TRUE);
+       mono_reflection_dynimage_basic_init (MONO_HANDLE_RAW (assemblyb), error);
+       mono_gchandle_free_internal (gchandle);
 }
 
 void