Skip to content

Commit 229c400

Browse files
committed
Additional constructor preservations
Upcoming changes to monolinker will make additional optimizations when no instance ctors are marked. To be safe, add preservations for the ctor's of types that are created in the runtime. The change to preserve the .ctor() of`System.Runtime.Remoting.Messaging.AsyncResult` was made for more than out of caution. We have a simple delegate test that hung without this.
1 parent d6c99a5 commit 229c400

File tree

1 file changed

+58
-13
lines changed

1 file changed

+58
-13
lines changed

mcs/class/corlib/LinkerDescriptor/mscorlib.xml

Lines changed: 58 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,10 @@
1919
</type>
2020

2121
<!-- appdomain.c: mono_runtime_init -->
22-
<type fullname="System.AppDomainSetup" preserve="fields" />
22+
<type fullname="System.AppDomainSetup" preserve="fields" >
23+
<!-- appdomain.c mono_object_new_checked in mono_domain_create_appdomain_checked -->
24+
<method signature="System.Void .ctor()" />
25+
</type>
2326

2427
<!-- exception.c: mono_get_exception_appdomain_unloaded (used in several places), threadpool.c -->
2528
<type fullname="System.AppDomainUnloadedException">
@@ -122,7 +125,10 @@
122125

123126
<!-- domain.c: mono_defaults.stack_frame_class -->
124127
<!-- used in mini-exceptions.c to create array and MonoStackFrame instance, i.e. only fields are required to be preserved -->
125-
<type fullname="System.Diagnostics.StackFrame" preserve="fields" />
128+
<type fullname="System.Diagnostics.StackFrame" preserve="fields" >
129+
<!-- threads.c mono_object_new_checked in mono_threads_get_thread_dump -->
130+
<method signature="System.Void .ctor()" />
131+
</type>
126132

127133
<!-- domain.c: mono_defaults.stack_trace_class -->
128134
<!-- does not seems used outside the g_assert in domain.c (maybe it could be removed) -->
@@ -254,7 +260,10 @@
254260
</type>
255261

256262
<!-- threadpool.c: mono_thread_pool_init (assert) -->
257-
<type fullname="System.MonoAsyncCall" preserve="fields" />
263+
<type fullname="System.MonoAsyncCall" preserve="fields" >
264+
<!-- threadpool.c mono_object_new_checked in mono_threadpool_begin_invoke -->
265+
<method signature="System.Void .ctor()" />
266+
</type>
258267
<!-- mono-mlist.c (managed list): used in threadpool.c and gc.c -->
259268
<type fullname="System.MonoListItem" preserve="fields" />
260269

@@ -303,6 +312,8 @@
303312
<!-- TransparentProxy.cs, RemotingServices.cs -->
304313
<method name="FieldGetter" feature="remoting" />
305314
<method name="FieldSetter" feature="remoting" />
315+
<!-- appdomain.c mono_object_new_checked in create_domain_objects -->
316+
<method signature="System.Void .ctor()" />
306317
</type>
307318

308319
<!-- appdomain.c (create_domain_objects) domain->out_of_memory_ex -->
@@ -524,16 +535,25 @@
524535
</type>
525536

526537
<!-- reflection.c: mono_method_body_get_object -->
527-
<type fullname="System.Reflection.ExceptionHandlingClause" preserve="fields" />
538+
<type fullname="System.Reflection.ExceptionHandlingClause" preserve="fields" >
539+
<!-- reflection.c mono_object_new_checked in add_exception_handling_clause_to_array -->
540+
<method signature="System.Void .ctor()" />
541+
</type>
528542

529543
<!-- domain.c: mono_defaults.field_info_class -->
530544
<type fullname="System.Reflection.FieldInfo" preserve="fields" />
531545

532546
<!-- reflection.c: mono_method_body_get_object -->
533-
<type fullname="System.Reflection.LocalVariableInfo" preserve="fields" />
547+
<type fullname="System.Reflection.LocalVariableInfo" preserve="fields" >
548+
<!-- reflection.c mono_object_new_checked in add_local_var_info_to_array -->
549+
<method signature="System.Void .ctor()" />
550+
</type>
534551

535552
<!-- reflection.c: mono_method_body_get_object -->
536-
<type fullname="System.Reflection.MethodBody" preserve="fields" />
553+
<type fullname="System.Reflection.MethodBody" preserve="fields" >
554+
<!-- reflection.c mono_object_new_checked in method_body_object_construct -->
555+
<method signature="System.Void .ctor()" />
556+
</type>
537557
<!-- domain.c: mono_defaults.method_info_class -->
538558
<type fullname="System.Reflection.MethodInfo" preserve="fields" />
539559

@@ -544,26 +564,42 @@
544564
<type fullname="System.Reflection.MonoModule" preserve="fields" >
545565
<method name=".ctor" />
546566
</type>
547-
<type fullname="System.Reflection.MonoCMethod" preserve="fields" />
567+
<type fullname="System.Reflection.MonoCMethod" preserve="fields" >
568+
<!-- reflection.c mono_object_new_checked in method_object_construct -->
569+
<method signature="System.Void .ctor()" />
570+
</type>
548571
<type fullname="System.Reflection.MonoEvent" preserve="fields" />
549-
<type fullname="System.Reflection.MonoEventInfo" preserve="fields" />
550-
<type fullname="System.Reflection.MonoField" preserve="fields" />
551-
572+
<type fullname="System.Reflection.MonoEventInfo" preserve="fields" >
573+
<!-- reflection.c mono_object_new_checked in event_object_construct -->
574+
<method signature="System.Void .ctor()" />
575+
</type>
576+
<type fullname="System.Reflection.MonoField" preserve="fields" >
577+
<!-- reflection.c mono_object_new_checked in field_object_construct -->
578+
<method signature="System.Void .ctor()" />
579+
</type>
552580
<!-- reflection.c: mono_method_get_object uses both MonoGeneric[C]Method / will crash for ves_icall_Type_GetConstructors_internal -->
553581
<type fullname="System.Reflection.MonoGenericMethod" preserve="fields" />
554582
<type fullname="System.Reflection.MonoGenericCMethod" preserve="fields" />
555583

556-
<type fullname="System.Reflection.MonoMethod" preserve="fields" />
584+
<type fullname="System.Reflection.MonoMethod" preserve="fields" >
585+
<!-- reflection.c mono_object_new_checked in method_object_construct -->
586+
<method signature="System.Void .ctor()" />
587+
</type>
557588
<type fullname="System.Reflection.MonoMethodInfo" preserve="fields" />
558589
<type fullname="System.Reflection.MonoPropertyInfo" preserve="fields" />
559590

560591
<type fullname="System.Reflection.MonoProperty" preserve="fields">
561592
<method name="GetterAdapterFrame" />
562593
<method name="StaticGetterAdapterFrame" />
594+
<!-- reflection.c mono_object_new_checked in add_parameter_object_to_array -->
595+
<method signature="System.Void .ctor()" />
563596
</type>
564597
<type fullname="System.Reflection.ParameterInfo" preserve="fields" />
565598
<!-- reflection.c: ves_icall_get_parameter_info -->
566-
<type fullname="System.Reflection.MonoParameterInfo" preserve="fields" />
599+
<type fullname="System.Reflection.MonoParameterInfo" preserve="fields" >
600+
<!-- reflection.c mono_object_new_checked in event_object_construct -->
601+
<method signature="System.Void .ctor()" />
602+
</type>
567603

568604
<!-- object.c: mono_field_get_value_object and mono_runtime_invoke_array -->
569605
<type fullname="System.Reflection.Pointer" >
@@ -708,7 +744,10 @@
708744
<!-- domain.c: mono_defaults.asyncresult_class (Stubify can't be applied on this type) -->
709745
<!-- object.c MONO_OBJECT_SETREF in mono_async_result_new -->
710746
<!-- threadpool.c: MONO_OBJECT_SETREF in create_simple_asyncresult -->
711-
<type fullname="System.Runtime.Remoting.Messaging.AsyncResult" preserve="fields" />
747+
<type fullname="System.Runtime.Remoting.Messaging.AsyncResult" preserve="fields" >
748+
<!-- object.c mono_object_new_checked in mono_async_result_new -->
749+
<method signature="System.Void .ctor()" />
750+
</type>
712751

713752
<!-- marshal.c: mono_remoting_marshal_init / removed with DISABLE_REMOTING -->
714753
<type fullname="System.Runtime.Remoting.Messaging.CallContext" feature="remoting" >
@@ -719,16 +758,22 @@
719758
<type fullname="System.Runtime.Remoting.Messaging.MonoMethodMessage" preserve="fields" feature="remoting" >
720759
<!-- object.c: mono_message_init -->
721760
<method name="InitMessage" />
761+
<!-- marshal.c mono_object_new_checked in mono_delegate_end_invoke-->
762+
<method name=".ctor" feature="remoting" />
722763
</type>
723764
<!-- domain.c: mono_defaults.real_proxy_class / removed with DISABLE_REMOTING -->
724765
<type fullname="System.Runtime.Remoting.Proxies.RealProxy" preserve="fields" feature="remoting" >
725766
<method name="PrivateInvoke" />
726767
<method name="GetAppDomainTarget" />
768+
<!-- object.c mono_object_new_checked in make_transparent_proxy-->
769+
<method name=".ctor" feature="remoting" />
727770
</type>
728771
<!-- domain.c: mono_defaults.transparent_proxy_class / removed with DISABLE_REMOTING -->
729772
<type fullname="System.Runtime.Remoting.Proxies.TransparentProxy" preserve="fields" feature="remoting" >
730773
<method name="LoadRemoteFieldNew" />
731774
<method name="StoreRemoteField" />
775+
<!-- icall.c mono_object_new_checked in ves_icall_Remoting_RealProxy_GetTransparentProxy -->
776+
<method signature="System.Void .ctor()" feature="remoting" />
732777
</type>
733778
<type fullname="System.Runtime.Remoting.RemotingServices" feature="remoting" >
734779
<method name="SerializeCallData" />

0 commit comments

Comments
 (0)