1 <h3>Metadata Loader Locking</h3>
3 <p>The locking functions here are used by code in class.c and
4 metadata.c to lock access to the shared hashtables inside the
7 <h4><a name="api:mono_loader_lock">mono_loader_lock</a></h4>
8 <h4><a name="api:mono_loader_unlock">mono_loader_unlock</a></h4>
10 <h3>Metadata access API</h3>
12 <p>This is the low-level API for accessing the metadata
15 <h4><a name="api:mono_cli_rva_image_map">mono_cli_rva_image_map</a></h4>
16 <h4><a name="api:mono_pe_file_open">mono_pe_file_open</a></h4>
17 <h4><a name="api:mono_meta_table_name">mono_meta_table_name</a></h4>
18 <h4><a name="api:mono_metadata_blob_heap">mono_metadata_blob_heap</a></h4>
19 <h4><a name="api:mono_metadata_compute_size">mono_metadata_compute_size</a></h4>
20 <h4><a name="api:mono_metadata_custom_attrs_from_index">mono_metadata_custom_attrs_from_index</a></h4>
21 <h4><a name="api:mono_metadata_decode_blob_size">mono_metadata_decode_blob_size</a></h4>
22 <h4><a name="api:mono_metadata_decode_row_col">mono_metadata_decode_row_col</a></h4>
23 <h4><a name="api:mono_metadata_decode_row">mono_metadata_decode_row</a></h4>
24 <h4><a name="api:mono_metadata_decode_signed_value">mono_metadata_decode_signed_value</a></h4>
25 <h4><a name="api:mono_metadata_decode_value">mono_metadata_decode_value</a></h4>
26 <h4><a name="api:mono_metadata_encode_value">mono_metadata_encode_value</a></h4>
27 <h4><a name="api:mono_metadata_events_from_typedef">mono_metadata_events_from_typedef</a></h4>
28 <h4><a name="api:mono_metadata_field_info">mono_metadata_field_info</a></h4>
29 <h4><a name="api:mono_metadata_free_array">mono_metadata_free_array</a></h4>
30 <h4><a name="api:mono_metadata_free_marshal_spec">mono_metadata_free_marshal_spec</a></h4>
31 <h4><a name="api:mono_metadata_free_mh">mono_metadata_free_mh</a></h4>
32 <h4><a name="api:mono_metadata_free_type">mono_metadata_free_type</a></h4>
33 <h4><a name="api:mono_metadata_generic_inst_equal">mono_metadata_generic_inst_equal</a></h4>
34 <h4><a name="api:mono_metadata_generic_inst_hash">mono_metadata_generic_inst_hash</a></h4>
35 <h4><a name="api:mono_metadata_generic_inst_is_valuetype">mono_metadata_generic_inst_is_valuetype</a></h4>
36 <h4><a name="api:mono_metadata_generic_method_equal">mono_metadata_generic_method_equal</a></h4>
37 <h4><a name="api:mono_metadata_get_constant_index">mono_metadata_get_constant_index</a></h4>
38 <h4><a name="api:mono_metadata_get_marshal_info">mono_metadata_get_marshal_info</a></h4>
39 <h4><a name="api:mono_metadata_get_table">mono_metadata_get_table</a></h4>
40 <h4><a name="api:mono_metadata_guid_heap">mono_metadata_guid_heap</a></h4>
41 <h4><a name="api:mono_metadata_implmap_from_method">mono_metadata_implmap_from_method</a></h4>
42 <h4><a name="api:mono_metadata_interfaces_from_typedef_full">mono_metadata_interfaces_from_typedef_full</a></h4>
43 <h4><a name="api:mono_metadata_interfaces_from_typedef">mono_metadata_interfaces_from_typedef</a></h4>
44 <h4><a name="api:mono_metadata_load_generic_params">mono_metadata_load_generic_params</a></h4>
45 <h4><a name="api:mono_metadata_locate">mono_metadata_locate</a></h4>
46 <h4><a name="api:mono_metadata_locate_token">mono_metadata_locate_token</a></h4>
47 <h4><a name="api:mono_metadata_methods_from_event">mono_metadata_methods_from_event</a></h4>
48 <h4><a name="api:mono_metadata_methods_from_property">mono_metadata_methods_from_property</a></h4>
49 <h4><a name="api:mono_metadata_nested_in_typedef">mono_metadata_nested_in_typedef</a></h4>
50 <h4><a name="api:mono_metadata_nesting_typedef">mono_metadata_nesting_typedef</a></h4>
51 <h4><a name="api:mono_metadata_packing_from_typedef">mono_metadata_packing_from_typedef</a></h4>
52 <h4><a name="api:mono_metadata_parse_array_full">mono_metadata_parse_array_full</a></h4>
53 <h4><a name="api:mono_metadata_parse_array">mono_metadata_parse_array</a></h4>
54 <h4><a name="api:mono_metadata_parse_custom_mod">mono_metadata_parse_custom_mod</a></h4>
55 <h4><a name="api:mono_metadata_parse_field_type">mono_metadata_parse_field_type</a></h4>
56 <h4><a name="api:mono_metadata_parse_marshal_spec">mono_metadata_parse_marshal_spec</a></h4>
57 <h4><a name="api:mono_metadata_parse_method_signature_full">mono_metadata_parse_method_signature_full</a></h4>
58 <h4><a name="api:mono_metadata_parse_method_signature">mono_metadata_parse_method_signature</a></h4>
59 <h4><a name="api:mono_metadata_parse_mh_full">mono_metadata_parse_mh_full</a></h4>
60 <h4><a name="api:mono_metadata_parse_mh">mono_metadata_parse_mh</a></h4>
61 <h4><a name="api:mono_metadata_parse_param">mono_metadata_parse_param</a></h4>
62 <h4><a name="api:mono_metadata_parse_signature_full">mono_metadata_parse_signature_full</a></h4>
63 <h4><a name="api:mono_metadata_parse_signature">mono_metadata_parse_signature</a></h4>
64 <h4><a name="api:mono_metadata_parse_typedef_or_ref">mono_metadata_parse_typedef_or_ref</a></h4>
65 <h4><a name="api:mono_metadata_parse_type_full">mono_metadata_parse_type_full</a></h4>
66 <h4><a name="api:mono_metadata_parse_type">mono_metadata_parse_type</a></h4>
67 <h4><a name="api:mono_metadata_properties_from_typedef">mono_metadata_properties_from_typedef</a></h4>
68 <h4><a name="api:mono_metadata_string_heap">mono_metadata_string_heap</a></h4>
69 <h4><a name="api:mono_metadata_token_from_dor">mono_metadata_token_from_dor</a></h4>
70 <h4><a name="api:mono_metadata_typedef_from_field">mono_metadata_typedef_from_field</a></h4>
71 <h4><a name="api:mono_metadata_typedef_from_method">mono_metadata_typedef_from_method</a></h4>
72 <h4><a name="api:mono_metadata_type_equal">mono_metadata_type_equal</a></h4>
73 <h4><a name="api:mono_metadata_type_hash">mono_metadata_type_hash</a></h4>
74 <h4><a name="api:mono_metadata_user_string">mono_metadata_user_string</a></h4>
75 <h4><a name="api:mono_metadata_declsec_from_index">mono_metadata_declsec_from_index</a></h4>
76 <h4><a name="api:mono_metadata_free_method_signature">mono_metadata_free_method_signature</a></h4>
78 <h3>Generics Support</h3>
80 <h4><a name="api:mono_metadata_generic_class_is_valuetype">mono_metadata_generic_class_is_valuetype</a></h4>
81 <h4><a name="api:mono_metadata_has_generic_params">mono_metadata_has_generic_params</a></h4>
82 <h4><a name="api:mono_metadata_inflate_generic_inst">mono_metadata_inflate_generic_inst</a></h4>
83 <h4><a name="api:mono_metadata_parse_generic_inst">mono_metadata_parse_generic_inst</a></h4>
87 <h4><a name="api:mono_ldtoken">mono_ldtoken</a></h4>
88 <h4><a name="api:mono_lookup_dynamic_token">mono_lookup_dynamic_token</a></h4>
89 <h4><a name="api:mono_ldstr">mono_ldstr</a></h4>
90 <h4><a name="api:mono_exception_from_token">mono_exception_from_token</a></h4>
91 <h4><a name="api:mono_create_jit_trampoline_from_token">mono_create_jit_trampoline_from_token</a></h4>
93 <h3>Working with signatures</h3>
95 <h4><a name="api:mono_signature_explicit_this">mono_signature_explicit_this</a></h4>
96 <h4><a name="api:mono_signature_get_call_conv">mono_signature_get_call_conv</a></h4>
97 <h4><a name="api:mono_signature_get_desc">mono_signature_get_desc</a></h4>
98 <h4><a name="api:mono_signature_get_param_count">mono_signature_get_param_count</a></h4>
99 <h4><a name="api:mono_signature_get_params">mono_signature_get_params</a></h4>
100 <h4><a name="api:mono_signature_get_return_type">mono_signature_get_return_type</a></h4>
101 <h4><a name="api:mono_signature_hash">mono_signature_hash</a></h4>
102 <h4><a name="api:mono_signature_is_instance">mono_signature_is_instance</a></h4>
103 <h4><a name="api:mono_signature_vararg_start">mono_signature_vararg_start</a></h4>
108 <h4><a name="api:mono_opcode_name">mono_opcode_name</a></h4>
109 <h4><a name="api:mono_opcode_value">mono_opcode_value</a></h4>
111 <h3>Metadata Loading Errors</h3>
113 <p>The routines in this section are used to cope with errors
114 during metadata loading. Errors in metadata handling can
115 happen for many reason, and these include (this is not an
119 <li>An assembly referenced is missing.
120 <li>Fields referenced are missing.
121 <li>Methods referenced are missing.
124 <p>The <tt>mono_loader_set_*</tt> routines are invoked during
125 metadata loading to flag that an error has happened. The
126 class loading errros are flagged in a per-thread basis.
128 <P>In various spots in the runtime the
129 <tt>mono_loader_get_last_error</tt> routine is called to check
130 if there was a problem, and then errors are propagated upwards
131 on the stack until we reach a point where an exception can be
132 raised and no runtime locks are held.
134 <p>The <tt>mono_loader_error_prepare_exception</tt> takes a
135 <tt>MonoLoaderError</tt> structure (the value returned from
136 <tt>mono_loader_get_last_error</tt>), turns that into an
137 exception and clears the error condition from the current
140 <h4><a name="api:mono_loader_set_error_field_load">mono_loader_set_error_field_load</a></h4>
141 <h4><a name="api:mono_loader_set_error_method_load">mono_loader_set_error_method_load</a></h4>
142 <h4><a name="api:mono_loader_set_error_type_load">mono_loader_set_error_type_load</a></h4>
144 <h4><a name="api:mono_loader_get_last_error">mono_loader_get_last_error</a></h4>
145 <h4><a name="api:mono_loader_clear_error">mono_loader_clear_error</a></h4>
146 <h4><a name="api:mono_loader_error_prepare_exception">mono_loader_error_prepare_exception</a></h4>