1 <h1>Mono Internals</h1>
3 <p>This section documents some of the internal APIs used
4 inside Mono that developers extending or altering Mono might
7 <h2>Marshalling functions</h2>
9 <h4><a name="api:mono_marshal_alloc">mono_marshal_alloc</a></h4>
10 <h4><a name="api:mono_marshal_asany">mono_marshal_asany</a></h4>
11 <h4><a name="api:mono_marshal_free_array">mono_marshal_free_array</a></h4>
12 <h4><a name="api:mono_marshal_free_asany">mono_marshal_free_asany</a></h4>
13 <h4><a name="api:mono_marshal_free">mono_marshal_free</a></h4>
14 <h4><a name="api:mono_marshal_get_castclass">mono_marshal_get_castclass</a></h4>
15 <h4><a name="api:mono_marshal_get_delegate_begin_invoke">mono_marshal_get_delegate_begin_invoke</a></h4>
16 <h4><a name="api:mono_marshal_get_delegate_end_invoke">mono_marshal_get_delegate_end_invoke</a></h4>
17 <h4><a name="api:mono_marshal_get_delegate_invoke">mono_marshal_get_delegate_invoke</a></h4>
18 <h4><a name="api:mono_marshal_get_icall_wrapper">mono_marshal_get_icall_wrapper</a></h4>
19 <h4><a name="api:mono_marshal_get_isinst">mono_marshal_get_isinst</a></h4>
20 <h4><a name="api:mono_marshal_get_ldfld_remote_wrapper">mono_marshal_get_ldfld_remote_wrapper</a></h4>
21 <h4><a name="api:mono_marshal_get_ldfld_wrapper">mono_marshal_get_ldfld_wrapper</a></h4>
22 <h4><a name="api:mono_marshal_get_managed_wrapper">mono_marshal_get_managed_wrapper</a></h4>
23 <h4><a name="api:mono_marshal_get_native_wrapper">mono_marshal_get_native_wrapper</a></h4>
24 <h4><a name="api:mono_marshal_get_proxy_cancast">mono_marshal_get_proxy_cancast</a></h4>
25 <h4><a name="api:mono_marshal_get_ptr_to_struct">mono_marshal_get_ptr_to_struct</a></h4>
26 <h4><a name="api:mono_marshal_get_remoting_invoke_for_target">mono_marshal_get_remoting_invoke_for_target</a></h4>
27 <h4><a name="api:mono_marshal_get_remoting_invoke">mono_marshal_get_remoting_invoke</a></h4>
28 <h4><a name="api:mono_marshal_get_remoting_invoke_with_check">mono_marshal_get_remoting_invoke_with_check</a></h4>
29 <h4><a name="api:mono_marshal_get_runtime_invoke">mono_marshal_get_runtime_invoke</a></h4>
30 <h4><a name="api:mono_marshal_get_stelemref">mono_marshal_get_stelemref</a></h4>
31 <h4><a name="api:mono_marshal_get_stfld_remote_wrapper">mono_marshal_get_stfld_remote_wrapper</a></h4>
32 <h4><a name="api:mono_marshal_get_stfld_wrapper">mono_marshal_get_stfld_wrapper</a></h4>
33 <h4><a name="api:mono_marshal_get_struct_to_ptr">mono_marshal_get_struct_to_ptr</a></h4>
34 <h4><a name="api:mono_marshal_get_synchronized_wrapper">mono_marshal_get_synchronized_wrapper</a></h4>
35 <h4><a name="api:mono_marshal_get_unbox_wrapper">mono_marshal_get_unbox_wrapper</a></h4>
36 <h4><a name="api:mono_marshal_get_xappdomain_invoke">mono_marshal_get_xappdomain_invoke</a></h4>
37 <h4><a name="api:mono_marshal_load_type_info">mono_marshal_load_type_info</a></h4>
38 <h4><a name="api:mono_marshal_method_from_wrapper">mono_marshal_method_from_wrapper</a></h4>
39 <h4><a name="api:mono_marshal_realloc">mono_marshal_realloc</a></h4>
40 <h4><a name="api:mono_marshal_set_last_error">mono_marshal_set_last_error</a></h4>
41 <h4><a name="api:mono_marshal_type_size">mono_marshal_type_size</a></h4>
43 <h2>Metadata Loading Errors</h2>
45 <p>The routines in this section are used to cope with errors
46 during metadata loading. Errors in metadata handling can
47 happen for many reason, and these include (this is not an
51 <li>An assembly referenced is missing.
52 <li>Fields referenced are missing.
53 <li>Methods referenced are missing.
56 <p>The <tt>mono_loader_set_*</tt> routines are invoked during
57 metadata loading to flag that an error has happened. The
58 class loading errros are flagged in a per-thread basis.
60 <P>In various spots in the runtime the
61 <tt>mono_loader_get_last_error</tt> routine is called to check
62 if there was a problem, and then errors are propagated upwards
63 on the stack until we reach a point where an exception can be
64 raised and no runtime locks are held.
66 <p>The <tt>mono_loader_error_prepare_exception</tt> takes a
67 <tt>MonoLoaderError</tt> structure (the value returned from
68 <tt>mono_loader_get_last_error</tt>), turns that into an
69 exception and clears the error condition from the current
72 <h4><a name="api:mono_loader_set_error_field_load">mono_loader_set_error_field_load</a></h4>
73 <h4><a name="api:mono_loader_set_error_method_load">mono_loader_set_error_method_load</a></h4>
74 <h4><a name="api:mono_loader_set_error_type_load">mono_loader_set_error_type_load</a></h4>
76 <h4><a name="api:mono_loader_get_last_error">mono_loader_get_last_error</a></h4>
77 <h4><a name="api:mono_loader_clear_error">mono_loader_clear_error</a></h4>
78 <h4><a name="api:mono_loader_error_prepare_exception">mono_loader_error_prepare_exception</a></h4>
80 <h2>Metadata Loader Locking: Internals</h2>
82 <p>The locking functions here are used by code in class.c and
83 metadata.c to lock access to the shared hashtables inside the
86 <h4><a name="api:mono_loader_lock">mono_loader_lock</a></h4>
87 <h4><a name="api:mono_loader_unlock">mono_loader_unlock</a></h4>
89 <h2>Garbage Collector Internal Interface</h2>
91 <p>The internal interface of the Mono GC is the interface used
92 between the runtime engine and the garbage collector.
94 <h4><a name="api:mono_gc_disable">mono_gc_disable</a></h4>
95 <h4><a name="api:mono_gc_enable">mono_gc_enable</a></h4>
96 <h4><a name="api:mono_gc_start_world">mono_gc_start_world</a></h4>
97 <h4><a name="api:mono_gc_stop_world">mono_gc_stop_world</a></h4>
98 <h4><a name="api:mono_gc_alloc_fixed">mono_gc_alloc_fixed</a></h4>
99 <h4><a name="api:mono_gc_free_fixed">mono_gc_free_fixed</a></h4>
100 <h4><a name="api:mono_gc_make_descr_from_bitmap">mono_gc_make_descr_from_bitmap</a></h4>
103 <h4><a name="api:mono_gc_base_init">mono_gc_base_init</a></h4>
104 <h4><a name="api:mono_gc_invoke_finalizers">mono_gc_invoke_finalizers</a></h4>
105 <h4><a name="api:mono_gc_is_gc_thread">mono_gc_is_gc_thread</a></h4>
106 <h4><a name="api:mono_gc_pending_finalizers">mono_gc_pending_finalizers</a></h4>
107 <h4><a name="api:mono_gc_register_thread">mono_gc_register_thread</a></h4>
108 <h4><a name="api:mono_gc_finalize_notify">mono_gc_finalize_notify</a></h4>