From 7704174315bffa934aa8764a169bb4562ca05b9e Mon Sep 17 00:00:00 2001 From: Zoltan Varga Date: Sun, 21 Jul 2019 17:46:32 -0400 Subject: [PATCH] [runtime] Convert AssemblyBuilder.basic_init to handles using a gc handle to pin the object. Commit migrated from https://github.com/mono/mono/commit/4d1a6358d0e1abc39e8b21986e0a211bd9bec766 --- src/mono/mono/metadata/icall-def-netcore.h | 2 +- src/mono/mono/metadata/icall-def.h | 2 +- src/mono/mono/metadata/object-internals.h | 4 ---- src/mono/mono/metadata/sre-internals.h | 2 +- src/mono/mono/metadata/sre-save.c | 3 ++- src/mono/mono/metadata/sre.c | 20 +++++++++----------- 6 files changed, 14 insertions(+), 19 deletions(-) diff --git a/src/mono/mono/metadata/icall-def-netcore.h b/src/mono/mono/metadata/icall-def-netcore.h index a5a2cf0..e9001e7 100644 --- a/src/mono/mono/metadata/icall-def-netcore.h +++ b/src/mono/mono/metadata/icall-def-netcore.h @@ -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) diff --git a/src/mono/mono/metadata/icall-def.h b/src/mono/mono/metadata/icall-def.h index c2c51da..3cf3900 100644 --- a/src/mono/mono/metadata/icall-def.h +++ b/src/mono/mono/metadata/icall-def.h @@ -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) diff --git a/src/mono/mono/metadata/object-internals.h b/src/mono/mono/metadata/object-internals.h index 8ec5a9b..86c74b4 100644 --- a/src/mono/mono/metadata/object-internals.h +++ b/src/mono/mono/metadata/object-internals.h @@ -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); diff --git a/src/mono/mono/metadata/sre-internals.h b/src/mono/mono/metadata/sre-internals.h index 3a56a90..cae1315 100644 --- a/src/mono/mono/metadata/sre-internals.h +++ b/src/mono/mono/metadata/sre-internals.h @@ -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); diff --git a/src/mono/mono/metadata/sre-save.c b/src/mono/mono/metadata/sre-save.c index 2beea38..5ae49ab 100644 --- a/src/mono/mono/metadata/sre-save.c +++ b/src/mono/mono/metadata/sre-save.c @@ -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; diff --git a/src/mono/mono/metadata/sre.c b/src/mono/mono/metadata/sre.c index f50f7fa..4c13e84 100644 --- a/src/mono/mono/metadata/sre.c +++ b/src/mono/mono/metadata/sre.c @@ -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 -- 2.7.4