X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fdomain-internals.h;h=5355fe060ebe67c055e91bcc27efe4b299c79292;hb=d5fa8f0cdd8a42c7c5e0fd7a66a0ab0afcb5f9f6;hp=36b7cf9b2d93fe915a2bd8d9f1c5152f93b58e50;hpb=59824fe59534ece69a8932d11bd04642901a7b10;p=mono.git diff --git a/mono/metadata/domain-internals.h b/mono/metadata/domain-internals.h index 36b7cf9b2d9..5355fe060eb 100644 --- a/mono/metadata/domain-internals.h +++ b/mono/metadata/domain-internals.h @@ -8,6 +8,7 @@ #include #include #include +#include #include extern CRITICAL_SECTION mono_delegate_section; @@ -30,9 +31,34 @@ typedef struct { int loader_optimization; MonoBoolean disallow_binding_redirects; MonoBoolean disallow_code_downloads; + MonoObject *activation_arguments; /* it is System.Object in 1.x, ActivationArguments in 2.0 */ + MonoObject *domain_initializer; + MonoArray *domain_initializer_args; + MonoObject *application_trust; /* it is System.Object in 1.x, ApplicationTrust in 2.0 */ + MonoBoolean disallow_appbase_probe; + MonoArray *configuration_bytes; } MonoAppDomainSetup; -typedef GArray MonoJitInfoTable; +typedef struct _MonoJitInfoTable MonoJitInfoTable; +typedef struct _MonoJitInfoTableChunk MonoJitInfoTableChunk; + +#define MONO_JIT_INFO_TABLE_CHUNK_SIZE 64 + +struct _MonoJitInfoTableChunk +{ + int refcount; + volatile int num_elements; + volatile gint8 *last_code_end; + MonoJitInfo * volatile data [MONO_JIT_INFO_TABLE_CHUNK_SIZE]; +}; + +struct _MonoJitInfoTable +{ + int num_chunks; + MonoJitInfoTableChunk *chunks [MONO_ZERO_LEN_ARRAY]; +}; + +typedef GArray MonoAotModuleInfoTable; typedef struct { guint32 flags; @@ -47,7 +73,12 @@ typedef struct { } MonoJitExceptionInfo; struct _MonoJitInfo { + /* NOTE: These first two elements (method and + next_jit_code_hash) must be in the same order and at the + same offset as in RuntimeMethod, because of the jit_code_hash + internal hash table in MonoDomain. */ MonoMethod *method; + struct _MonoJitInfo *next_jit_code_hash; gpointer code_start; guint32 used_regs; int code_size; @@ -82,42 +113,56 @@ typedef enum { MONO_APPDOMAIN_UNLOADED } MonoAppDomainState; +typedef struct _MonoJitCodeHash MonoJitCodeHash; + struct _MonoDomain { - MonoAppDomain *domain; CRITICAL_SECTION lock; MonoMemPool *mp; MonoCodeManager *code_mp; + /* + * keep all the managed objects close to each other for the precise GC + * For the Boehm GC we additionally keep close also other GC-tracked pointers. + */ +#define MONO_DOMAIN_FIRST_OBJECT setup + MonoAppDomainSetup *setup; + MonoAppDomain *domain; + MonoAppContext *default_context; + MonoException *out_of_memory_ex; + MonoException *null_reference_ex; + MonoException *stack_overflow_ex; +#define MONO_DOMAIN_FIRST_GC_TRACKED env MonoGHashTable *env; + MonoGHashTable *ldstr_table; + /* hashtables for Reflection handles */ + MonoGHashTable *type_hash; + MonoGHashTable *refobject_hash; + /* a GC-tracked array to keep references to the static fields of types */ + gpointer *static_data_array; + /* maps class -> type initialization exception object */ + MonoGHashTable *type_init_exception_hash; + /* maps delegate trampoline addr -> delegate object */ + MonoGHashTable *delegate_hash_table; +#define MONO_DOMAIN_LAST_GC_TRACKED delegate_hash_table + guint32 state; + /* Needed by Thread:GetDomainID() */ + gint32 domain_id; + gint32 shadow_serial; GSList *domain_assemblies; MonoAssembly *entry_assembly; - MonoAppDomainSetup *setup; char *friendly_name; - guint32 state; - MonoGHashTable *ldstr_table; GHashTable *class_vtable_hash; /* maps remote class key -> MonoRemoteClass */ GHashTable *proxy_vtable_hash; - MonoGHashTable *static_data_hash; - GHashTable *jit_code_hash; + MonoInternalHashTable jit_code_hash; /* maps MonoMethod -> MonoJitDynamicMethodInfo */ GHashTable *dynamic_code_hash; - /* maps delegate trampoline addr -> delegate object */ - MonoGHashTable *delegate_hash_table; - MonoJitInfoTable *jit_info_table; - /* hashtables for Reflection handles */ - MonoGHashTable *type_hash; - MonoGHashTable *refobject_hash; - /* Needed by Thread:GetDomainID() */ - gint32 domain_id; + MonoJitInfoTable * + volatile jit_info_table; /* Used when loading assemblies */ gchar **search_path; /* Used by remoting proxies */ MonoMethod *create_proxy_for_type_method; MonoMethod *private_invoke_method; - MonoAppContext *default_context; - MonoException *out_of_memory_ex; - MonoException *null_reference_ex; - MonoException *stack_overflow_ex; /* Used to store offsets of thread and context static fields */ GHashTable *special_static_fields; GHashTable *jump_target_hash; @@ -125,6 +170,8 @@ struct _MonoDomain { GHashTable *jump_trampoline_hash; GHashTable *jit_trampoline_hash; GHashTable *delegate_trampoline_hash; + GHashTable *delegate_invoke_impl_with_target_hash; + GHashTable *delegate_invoke_impl_no_target_hash; /* * This must be a GHashTable, since these objects can't be finalized * if the hashtable contains a GC visible reference to them. @@ -150,6 +197,12 @@ typedef struct { #define mono_domain_assemblies_lock(domain) EnterCriticalSection(&(domain)->assemblies_lock) #define mono_domain_assemblies_unlock(domain) LeaveCriticalSection(&(domain)->assemblies_lock) +void +mono_init_com_types (void) MONO_INTERNAL; + +void +mono_cleanup (void) MONO_INTERNAL; + void mono_jit_info_table_add (MonoDomain *domain, MonoJitInfo *ji) MONO_INTERNAL; @@ -166,6 +219,9 @@ mono_jit_info_add_aot_module (MonoImage *image, gpointer start, gpointer end) MO typedef MonoJitInfo *(*MonoJitInfoFindInAot) (MonoDomain *domain, MonoImage *image, gpointer addr); void mono_install_jit_info_find_in_aot (MonoJitInfoFindInAot func) MONO_INTERNAL; +void +mono_jit_code_hash_init (MonoInternalHashTable *jit_code_hash) MONO_INTERNAL; + MonoAppDomain * ves_icall_System_AppDomain_getCurDomain (void) MONO_INTERNAL; @@ -266,4 +322,11 @@ mono_assembly_name_parse (const char *name, MonoAssemblyName *aname) MONO_INTERN void mono_assembly_name_free (MonoAssemblyName *aname) MONO_INTERNAL; +MonoImage *mono_assembly_open_from_bundle (const char *filename, + MonoImageOpenStatus *status, + gboolean refonly) MONO_INTERNAL; + +void +mono_domain_add_class_static_data (MonoDomain *domain, MonoClass *klass, gpointer data, guint32 *bitmap); + #endif /* __MONO_METADATA_DOMAIN_INTERNALS_H__ */