2 * Appdomain-related internal data structures and functions.
4 #ifndef __MONO_METADATA_DOMAIN_INTERNALS_H__
5 #define __MONO_METADATA_DOMAIN_INTERNALS_H__
7 #include <mono/metadata/appdomain.h>
8 #include <mono/utils/mono-codeman.h>
9 #include <mono/utils/mono-hash.h>
10 #include <mono/io-layer/io-layer.h>
12 extern CRITICAL_SECTION mono_delegate_section
;
14 /* This is a copy of System.AppDomainSetup */
17 MonoString
*application_base
;
18 MonoString
*application_name
;
19 MonoString
*cache_path
;
20 MonoString
*configuration_file
;
21 MonoString
*dynamic_base
;
22 MonoString
*license_file
;
23 MonoString
*private_bin_path
;
24 MonoString
*private_bin_path_probe
;
25 MonoString
*shadow_copy_directories
;
26 MonoString
*shadow_copy_files
;
27 MonoBoolean publisher_policy
;
28 MonoBoolean path_changed
;
29 int loader_optimization
;
30 MonoBoolean disallow_binding_redirects
;
31 MonoBoolean disallow_code_downloads
;
34 typedef GArray MonoJitInfoTable
;
41 gpointer handler_start
;
43 MonoClass
*catch_class
;
46 } MonoJitExceptionInfo
;
54 /* Whenever the code is domain neutral or 'shared' */
55 gboolean domain_neutral
:1;
56 gboolean cas_inited
:1;
57 gboolean cas_class_assert
:1;
58 gboolean cas_class_deny
:1;
59 gboolean cas_class_permitonly
:1;
60 gboolean cas_method_assert
:1;
61 gboolean cas_method_deny
:1;
62 gboolean cas_method_permitonly
:1;
63 MonoJitExceptionInfo
*clauses
;
68 MonoCodeManager
*code_mp
;
69 } MonoJitDynamicMethodInfo
;
71 struct _MonoAppContext
{
75 gpointer
*static_data
;
79 MONO_APPDOMAIN_CREATED
,
80 MONO_APPDOMAIN_UNLOADING
,
81 MONO_APPDOMAIN_UNLOADED
85 MonoAppDomain
*domain
;
86 CRITICAL_SECTION lock
;
88 MonoCodeManager
*code_mp
;
90 GHashTable
*assemblies_by_name
;
92 MonoAssembly
*entry_assembly
;
93 MonoAppDomainSetup
*setup
;
96 MonoGHashTable
*ldstr_table
;
97 GHashTable
*class_vtable_hash
;
98 /* maps MonoString -> MonoRemoteClass */
99 MonoGHashTable
*proxy_vtable_hash
;
100 MonoGHashTable
*static_data_hash
;
101 GHashTable
*jit_code_hash
;
102 /* maps MonoMethod -> MonoJitDynamicMethodInfo */
103 GHashTable
*dynamic_code_hash
;
104 /* maps delegate trampoline addr -> delegate object */
105 MonoGHashTable
*delegate_hash_table
;
106 MonoJitInfoTable
*jit_info_table
;
107 /* hashtables for Reflection handles */
108 MonoGHashTable
*type_hash
;
109 MonoGHashTable
*refobject_hash
;
110 /* Needed by Thread:GetDomainID() */
112 /* Used when loading assemblies */
114 /* Used by remoting proxies */
115 MonoMethod
*create_proxy_for_type_method
;
116 MonoMethod
*private_invoke_method
;
117 MonoAppContext
*default_context
;
118 MonoException
*out_of_memory_ex
;
119 MonoException
*null_reference_ex
;
120 MonoException
*stack_overflow_ex
;
121 /* Used to store offsets of thread and context static fields */
122 GHashTable
*special_static_fields
;
123 GHashTable
*jump_target_hash
;
124 GHashTable
*class_init_trampoline_hash
;
125 GHashTable
*jump_trampoline_hash
;
127 * This must be a GHashTable, since these objects can't be finalized
128 * if the hashtable contains a GC visible reference to them.
130 GHashTable
*finalizable_objects_hash
;
133 #define mono_domain_lock(domain) EnterCriticalSection(&(domain)->lock)
134 #define mono_domain_unlock(domain) LeaveCriticalSection(&(domain)->lock)
137 mono_jit_info_table_add (MonoDomain
*domain
, MonoJitInfo
*ji
);
140 mono_jit_info_table_remove (MonoDomain
*domain
, MonoJitInfo
*ji
);
143 ves_icall_System_AppDomain_getCurDomain (void);
146 ves_icall_System_AppDomain_getRootDomain (void);
149 ves_icall_System_AppDomain_createDomain (MonoString
*friendly_name
,
150 MonoAppDomainSetup
*setup
);
153 ves_icall_System_AppDomain_GetData (MonoAppDomain
*ad
,
156 MonoReflectionAssembly
*
157 ves_icall_System_AppDomain_LoadAssemblyRaw (MonoAppDomain
*ad
,
158 MonoArray
*raw_assembly
,
159 MonoArray
*raw_symbol_store
,
160 MonoObject
*evidence
);
163 ves_icall_System_AppDomain_SetData (MonoAppDomain
*ad
,
168 ves_icall_System_AppDomain_getSetup (MonoAppDomain
*ad
);
171 ves_icall_System_AppDomain_getFriendlyName (MonoAppDomain
*ad
);
174 ves_icall_System_AppDomain_GetAssemblies (MonoAppDomain
*ad
);
176 MonoReflectionAssembly
*
177 ves_icall_System_Reflection_Assembly_LoadFrom (MonoString
*fname
);
179 MonoReflectionAssembly
*
180 ves_icall_System_AppDomain_LoadAssembly (MonoAppDomain
*ad
,
182 MonoObject
*evidence
);
185 ves_icall_System_AppDomain_InternalIsFinalizingForUnload (gint32 domain_id
);
188 ves_icall_System_AppDomain_InternalUnload (gint32 domain_id
);
191 ves_icall_System_AppDomain_ExecuteAssembly (MonoAppDomain
*ad
,
193 MonoObject
*evidence
,
197 ves_icall_System_AppDomain_InternalSetDomain (MonoAppDomain
*ad
);
200 ves_icall_System_AppDomain_InternalSetDomainByID (gint32 domainid
);
203 ves_icall_System_AppDomain_InternalPushDomainRef (MonoAppDomain
*ad
);
206 ves_icall_System_AppDomain_InternalPushDomainRefByID (gint32 domain_id
);
209 ves_icall_System_AppDomain_InternalPopDomainRef (void);
212 ves_icall_System_AppDomain_InternalGetContext (void);
215 ves_icall_System_AppDomain_InternalGetDefaultContext (void);
218 ves_icall_System_AppDomain_InternalSetContext (MonoAppContext
*mc
);
221 ves_icall_System_AppDomain_GetIDFromDomain (MonoAppDomain
* ad
);
224 ves_icall_System_AppDomain_InternalGetProcessGuid (MonoString
* newguid
);
227 mono_get_framework_version (void);
230 mono_get_runtime_version (void);
233 #endif /* __MONO_METADATA_DOMAIN_INTERNALS_H__ */