diff --git a/src/mono/mono/component/marshal-ilgen.c b/src/mono/mono/component/marshal-ilgen.c index e6deeea5564097..af4425ae138e06 100644 --- a/src/mono/mono/component/marshal-ilgen.c +++ b/src/mono/mono/component/marshal-ilgen.c @@ -45,7 +45,7 @@ marshal_ilgen_available (void) static MonoComponentMarshalILgen component_func_table = { { MONO_COMPONENT_ITF_VERSION, &marshal_ilgen_available }, - &mono_marshal_ilgen_init, + &mono_marshal_ilgen_init_internal, &mono_emit_marshal_ilgen, &mono_marshal_ilgen_install_callbacks_mono }; @@ -2750,7 +2750,7 @@ get_marshal_cb (void) { if (G_UNLIKELY (!ilgen_cb_inited)) { #ifdef ENABLE_ILGEN - mono_marshal_ilgen_init (); + mono_marshal_ilgen_init_internal (); #else mono_marshal_noilgen_init_heavyweight (); #endif @@ -2835,7 +2835,7 @@ mono_emit_marshal_ilgen (EmitMarshalContext *m, int argnum, MonoType *t, } void -mono_marshal_ilgen_init (void) +mono_marshal_ilgen_init_internal (void) { MonoMarshalILgenCallbacks cb; cb.version = MONO_MARSHAL_CALLBACKS_VERSION; diff --git a/src/mono/mono/component/marshal-ilgen.h b/src/mono/mono/component/marshal-ilgen.h index 08768a374483a7..2967a9a4d32955 100644 --- a/src/mono/mono/component/marshal-ilgen.h +++ b/src/mono/mono/component/marshal-ilgen.h @@ -12,7 +12,7 @@ typedef struct MonoComponentMarshalILgen { MonoComponent component; - void (*ilgen_init) (void); + void (*ilgen_init_internal) (void); int (*emit_marshal_ilgen) (EmitMarshalContext *m, int argnum, MonoType *t, MonoMarshalSpec *spec, int conv_arg, MonoType **conv_arg_type, MarshalAction action, MonoMarshalLightweightCallbacks* lightweigth_cb); @@ -42,8 +42,8 @@ MonoComponentMarshalILgen* mono_component_marshal_ilgen_init (void); void mono_install_marshal_callbacks_ilgen (MonoMarshalILgenCallbacks *cb); -MONO_API void -mono_marshal_ilgen_init (void); +void +mono_marshal_ilgen_init_internal (void); int mono_emit_marshal_ilgen (EmitMarshalContext *m, int argnum, MonoType *t, diff --git a/src/mono/mono/metadata/marshal-lightweight.c b/src/mono/mono/metadata/marshal-lightweight.c index 0c9a5258063caa..ce173f88fa3e60 100644 --- a/src/mono/mono/metadata/marshal-lightweight.c +++ b/src/mono/mono/metadata/marshal-lightweight.c @@ -68,6 +68,17 @@ get_method_image (MonoMethod *method) return m_class_get_image (method->klass); } + + +MONO_API void +mono_marshal_ilgen_init (void) +{ +/* Some platforms need this initilization to happen early, some can wait for it lazily.*/ +#ifndef ENABLE_ILGEN + mono_component_marshal_ilgen ()->ilgen_init_internal(); +#endif +} + /** * mono_mb_strdup: * \param mb the MethodBuilder diff --git a/src/mono/mono/metadata/marshal-lightweight.h b/src/mono/mono/metadata/marshal-lightweight.h index b25d9cc9f2aba5..d3b8f9e37f759d 100644 --- a/src/mono/mono/metadata/marshal-lightweight.h +++ b/src/mono/mono/metadata/marshal-lightweight.h @@ -10,4 +10,7 @@ MONO_API void mono_marshal_lightweight_init (void); +MONO_API void +mono_marshal_ilgen_init (void); + #endif // __MONO_MARSHAL_LIGHTWEIGHT_H__