Tue Jan 14 14:52:52 CET 2003 Paolo Molaro <lupus@ximian.com>
[mono.git] / mono / metadata / appdomain.h
1 /*
2  * appdomain.h: AppDomain functions
3  *
4  * Author:
5  *      Dietmar Maurer (dietmar@ximian.com)
6  *
7  * (C) 2001 Ximian, Inc.
8  */
9
10 #ifndef _MONO_METADATA_APPDOMAIN_H_
11 #define _MONO_METADATA_APPDOMAIN_H_
12
13 #include <glib.h>
14
15 #include <mono/metadata/object.h>
16 #include <mono/metadata/reflection.h>
17 #include <mono/metadata/mempool.h>
18 #include <mono/utils/mono-hash.h>
19 #include <mono/io-layer/io-layer.h>
20
21 typedef void (*MonoThreadStartCB) (gpointer stack_start);
22
23 /* This is a copy of System.AppDomainSetup */
24 typedef struct {
25         MonoObject object;
26         MonoString *application_base;
27         MonoString *application_name;
28         MonoString *cache_path;
29         MonoString *configuration_file;
30         MonoString *dynamic_base;
31         MonoString *license_file;
32         MonoString *private_bin_path;
33         MonoString *private_bin_path_probe;
34         MonoString *shadow_copy_directories;
35         MonoString *shadow_copy_files;
36         MonoBoolean publisher_policy;
37 } MonoAppDomainSetup;
38
39 typedef GArray MonoJitInfoTable;
40
41 typedef struct {
42         guint32  flags;
43         gpointer try_start;
44         gpointer try_end;
45         gpointer handler_start;
46         union {
47                 guint32 token;
48                 gpointer filter;
49         } data;
50 } MonoJitExceptionInfo;
51
52 typedef struct {
53         MonoMethod *method;
54         gpointer    code_start;
55         int         code_size;
56         guint32     used_regs;
57         unsigned    num_clauses;
58         signed      exvar_offset;
59         MonoJitExceptionInfo *clauses;
60 } MonoJitInfo;
61
62 typedef struct _MonoAppDomain MonoAppDomain;
63
64 struct _MonoDomain {
65         MonoAppDomain      *domain;
66         CRITICAL_SECTION    lock;
67         MonoMemPool        *mp;
68         MonoMemPool        *code_mp;
69         MonoGHashTable     *env;
70         GHashTable         *assemblies;
71         MonoAssembly       *entry_assembly;
72         MonoAppDomainSetup *setup;
73         char               *friendly_name;
74         MonoGHashTable     *ldstr_table;
75         MonoGHashTable     *class_vtable_hash;
76         MonoGHashTable     *proxy_vtable_hash;
77         MonoGHashTable     *static_data_hash;
78         GHashTable         *jit_code_hash;
79         MonoJitInfoTable   *jit_info_table;
80         /* hashtables for Reflection handles */
81         MonoGHashTable     *type_hash;
82         MonoGHashTable     *refobject_hash;
83         /* Needed by Thread:GetDomainID() */
84         gint32             domain_id;
85         /* Used when loading assemblies */
86         gchar **search_path;
87 };
88
89 /* This is a copy of System.AppDomain */
90 struct _MonoAppDomain {
91         MonoObject  object;
92         MonoDomain *data;
93 };
94
95 extern MonoDomain *mono_root_domain;
96
97 extern HANDLE mono_delegate_semaphore;
98 extern CRITICAL_SECTION mono_delegate_section;
99
100 #define mono_domain_lock(domain)   EnterCriticalSection(&(domain)->lock)
101 #define mono_domain_unlock(domain) LeaveCriticalSection(&(domain)->lock)
102
103 MonoDomain*
104 mono_init                  (const char *filename);
105
106 void
107 mono_runtime_init          (MonoDomain *domain, MonoThreadStartCB start_cb,
108                             MonoThreadStartCB attach_cb);
109
110 void
111 mono_runtime_cleanup       (MonoDomain *domain);
112
113 MonoDomain *
114 mono_domain_create         (void);
115
116 inline MonoDomain *
117 mono_domain_get            (void);
118
119 inline void
120 mono_domain_set            (MonoDomain *domain);
121
122 MonoAssembly *
123 mono_domain_assembly_open  (MonoDomain *domain, const char *name);
124
125 void
126 mono_domain_finalize       (MonoDomain *domain);
127
128 void
129 mono_domain_unload         (MonoDomain *domain, gboolean force);
130
131 void
132 mono_jit_info_table_add    (MonoDomain *domain, MonoJitInfo *ji);
133
134 MonoJitInfo *
135 mono_jit_info_table_find   (MonoDomain *domain, char *addr);
136
137 void
138 ves_icall_System_AppDomainSetup_InitAppDomainSetup (MonoAppDomainSetup *setup);
139
140 MonoAppDomain *
141 ves_icall_System_AppDomain_getCurDomain            (void);
142
143 MonoAppDomain *
144 ves_icall_System_AppDomain_createDomain            (MonoString         *friendly_name,
145                                                     MonoAppDomainSetup *setup);
146
147 MonoObject *
148 ves_icall_System_AppDomain_GetData                 (MonoAppDomain *ad, 
149                                                     MonoString    *name);
150
151 void
152 ves_icall_System_AppDomain_SetData                 (MonoAppDomain *ad, 
153                                                     MonoString    *name, 
154                                                     MonoObject    *data);
155
156 MonoAppDomainSetup *
157 ves_icall_System_AppDomain_getSetup                (MonoAppDomain *ad);
158
159 MonoString *
160 ves_icall_System_AppDomain_getFriendlyName         (MonoAppDomain *ad);
161
162 MonoArray *
163 ves_icall_System_AppDomain_GetAssemblies           (MonoAppDomain *ad);
164
165 MonoReflectionAssembly *
166 ves_icall_System_Reflection_Assembly_LoadFrom      (MonoString *fname);
167
168 MonoReflectionAssembly *
169 ves_icall_System_AppDomain_LoadAssembly            (MonoAppDomain *ad, 
170                                                     MonoReflectionAssemblyName *assRef,
171                                                     MonoObject    *evidence);
172
173 void
174 ves_icall_System_AppDomain_Unload                  (MonoAppDomain *ad);
175
176 gint32
177 ves_icall_System_AppDomain_ExecuteAssembly         (MonoAppDomain *ad, 
178                                                     MonoString    *file, 
179                                                     MonoObject    *evidence,
180                                                     MonoArray     *args);
181
182 #endif /* _MONO_METADATA_APPDOMAIN_H_ */