X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Fdomain-internals.h;h=b70d40695886a845801f4de7096dab6605952052;hb=8eeb2cef8fb37b7aaeed5fb0c31550a1701f9bdf;hp=065e0458fa20021d2210bf4f71b7aecd588f09e4;hpb=45a6bc149df2618dc0f31c4cce8f56dd5efed7f6;p=mono.git diff --git a/mono/metadata/domain-internals.h b/mono/metadata/domain-internals.h index 065e0458fa2..b70d4069588 100644 --- a/mono/metadata/domain-internals.h +++ b/mono/metadata/domain-internals.h @@ -18,7 +18,6 @@ extern mono_mutex_t mono_delegate_section; -extern mono_mutex_t mono_strtod_mutex; /* * If this is set, the memory belonging to appdomains is not freed when a domain is @@ -85,6 +84,11 @@ typedef struct { gpointer try_start; gpointer try_end; gpointer handler_start; + /* + * For LLVM compiled code, this is the index of the il clause + * associated with this handler. + */ + int clause_index; union { MonoClass *catch_class; gpointer filter; @@ -96,13 +100,7 @@ typedef struct { * Contains information about the type arguments for generic shared methods. */ typedef struct { - /* - * If not NULL, determines whenever the class type arguments of the gshared method are references or vtypes. - * The array length is equal to class_inst->type_argv. - */ - gboolean *var_is_vt; - /* Same for method type parameters */ - gboolean *mvar_is_vt; + gboolean is_gsharedvt; } MonoGenericSharingContext; /* Simplified DWARF location list entry */ @@ -179,21 +177,17 @@ typedef struct } MonoArchEHJitInfo; typedef struct { - gboolean cas_inited:1; - gboolean cas_class_assert:1; - gboolean cas_class_deny:1; - gboolean cas_class_permitonly:1; - gboolean cas_method_assert:1; - gboolean cas_method_deny:1; - gboolean cas_method_permitonly:1; -} MonoMethodCasInfo; + /* Relative to code_start */ + int thunks_offset; + int thunks_size; +} MonoThunkJitInfo; typedef enum { JIT_INFO_NONE = 0, - JIT_INFO_HAS_CAS_INFO = (1 << 0), - JIT_INFO_HAS_GENERIC_JIT_INFO = (1 << 1), - JIT_INFO_HAS_TRY_BLOCK_HOLES = (1 << 2), - JIT_INFO_HAS_ARCH_EH_INFO = (1 << 3) + JIT_INFO_HAS_GENERIC_JIT_INFO = (1 << 0), + JIT_INFO_HAS_TRY_BLOCK_HOLES = (1 << 1), + JIT_INFO_HAS_ARCH_EH_INFO = (1 << 2), + JIT_INFO_HAS_THUNK_INFO = (1 << 3) } MonoJitInfoFlags; struct _MonoJitInfo { @@ -205,6 +199,7 @@ struct _MonoJitInfo { MonoMethod *method; MonoImage *image; gpointer aot_info; + gpointer tramp_info; } d; struct _MonoJitInfo *next_jit_code_hash; gpointer code_start; @@ -213,20 +208,23 @@ struct _MonoJitInfo { guint32 num_clauses:15; /* Whenever the code is domain neutral or 'shared' */ gboolean domain_neutral:1; - gboolean has_cas_info:1; gboolean has_generic_jit_info:1; gboolean has_try_block_holes:1; gboolean has_arch_eh_info:1; + gboolean has_thunk_info:1; gboolean from_aot:1; gboolean from_llvm:1; - gboolean dbg_hidden_inited:1; + gboolean dbg_attrs_inited:1; gboolean dbg_hidden:1; /* Whenever this jit info was loaded in async context */ gboolean async:1; - gboolean dbg_step_through_inited:1; gboolean dbg_step_through:1; - gboolean dbg_non_user_code_inited:1; gboolean dbg_non_user_code:1; + /* + * Whenever this jit info refers to a trampoline. + * d.tramp_info contains additional data in this case. + */ + gboolean is_trampoline:1; /* FIXME: Embed this after the structure later*/ gpointer gc_info; /* Currently only used by SGen */ @@ -235,6 +233,7 @@ struct _MonoJitInfo { /* There is an optional MonoGenericJitInfo after the clauses */ /* There is an optional MonoTryBlockHoleTableJitInfo after MonoGenericJitInfo clauses*/ /* There is an optional MonoArchEHJitInfo after MonoTryBlockHoleTableJitInfo */ + /* There is an optional MonoThunkJitInfo after MonoArchEHJitInfo */ }; #define MONO_SIZEOF_JIT_INFO (offsetof (struct _MonoJitInfo, clauses)) @@ -279,13 +278,6 @@ typedef struct _MonoThunkFreeList { typedef struct _MonoJitCodeHash MonoJitCodeHash; -typedef struct _MonoTlsDataRecord MonoTlsDataRecord; -struct _MonoTlsDataRecord { - MonoTlsDataRecord *next; - guint32 tls_offset; - guint32 size; -}; - struct _MonoDomain { /* * This lock must never be taken before the loader lock, @@ -363,7 +355,6 @@ struct _MonoDomain { MonoMethod *private_invoke_method; /* Used to store offsets of thread and context static fields */ GHashTable *special_static_fields; - MonoTlsDataRecord *tlsrec_list; /* * This must be a GHashTable, since these objects can't be finalized * if the hashtable contains a GC visible reference to them. @@ -408,13 +399,6 @@ struct _MonoDomain { MonoClass *sockaddr_class; MonoClassField *sockaddr_data_field; - /* Used by threadpool.c */ - MonoImage *system_image; - MonoClass *corlib_asyncresult_class; - MonoClass *socket_class; - MonoClass *ad_unloaded_ex_class; - MonoClass *process_class; - /* Cache function pointers for architectures */ /* that require wrappers */ GHashTable *ftnptrs_hash; @@ -433,8 +417,6 @@ typedef struct { const AssemblyVersionSet version_sets [4]; } MonoRuntimeInfo; -#define mono_domain_lock(domain) mono_locks_acquire(&(domain)->lock, DomainLock) -#define mono_domain_unlock(domain) mono_locks_release(&(domain)->lock, DomainLock) #define mono_domain_assemblies_lock(domain) mono_locks_acquire(&(domain)->assemblies_lock, DomainAssembliesLock) #define mono_domain_assemblies_unlock(domain) mono_locks_release(&(domain)->assemblies_lock, DomainAssembliesLock) #define mono_domain_jit_code_hash_lock(domain) mono_locks_acquire(&(domain)->jit_code_hash_lock, DomainJitCodeHashLock) @@ -442,243 +424,249 @@ typedef struct { typedef MonoDomain* (*MonoLoadFunc) (const char *filename, const char *runtime_version); +void mono_domain_lock (MonoDomain *domain); +void mono_domain_unlock (MonoDomain *domain); + void -mono_install_runtime_load (MonoLoadFunc func) MONO_INTERNAL; +mono_install_runtime_load (MonoLoadFunc func); MonoDomain* -mono_runtime_load (const char *filename, const char *runtime_version) MONO_INTERNAL; +mono_runtime_load (const char *filename, const char *runtime_version); typedef void (*MonoCreateDomainFunc) (MonoDomain *domain); void -mono_install_create_domain_hook (MonoCreateDomainFunc func) MONO_INTERNAL; +mono_install_create_domain_hook (MonoCreateDomainFunc func); typedef void (*MonoFreeDomainFunc) (MonoDomain *domain); void -mono_install_free_domain_hook (MonoFreeDomainFunc func) MONO_INTERNAL; +mono_install_free_domain_hook (MonoFreeDomainFunc func); void -mono_cleanup (void) MONO_INTERNAL; +mono_cleanup (void); void -mono_close_exe_image (void) MONO_INTERNAL; +mono_close_exe_image (void); int -mono_jit_info_size (MonoJitInfoFlags flags, int num_clauses, int num_holes) MONO_INTERNAL; +mono_jit_info_size (MonoJitInfoFlags flags, int num_clauses, int num_holes); void mono_jit_info_init (MonoJitInfo *ji, MonoMethod *method, guint8 *code, int code_size, - MonoJitInfoFlags flags, int num_clauses, int num_holes) MONO_INTERNAL; + MonoJitInfoFlags flags, int num_clauses, int num_holes); MonoJitInfoTable * -mono_jit_info_table_new (MonoDomain *domain) MONO_INTERNAL; +mono_jit_info_table_new (MonoDomain *domain); void -mono_jit_info_table_free (MonoJitInfoTable *table) MONO_INTERNAL; +mono_jit_info_table_free (MonoJitInfoTable *table); void -mono_jit_info_table_add (MonoDomain *domain, MonoJitInfo *ji) MONO_INTERNAL; +mono_jit_info_table_add (MonoDomain *domain, MonoJitInfo *ji); void -mono_jit_info_table_remove (MonoDomain *domain, MonoJitInfo *ji) MONO_INTERNAL; +mono_jit_info_table_remove (MonoDomain *domain, MonoJitInfo *ji); void -mono_jit_info_add_aot_module (MonoImage *image, gpointer start, gpointer end) MONO_INTERNAL; +mono_jit_info_add_aot_module (MonoImage *image, gpointer start, gpointer end); MonoGenericJitInfo* -mono_jit_info_get_generic_jit_info (MonoJitInfo *ji) MONO_INTERNAL; +mono_jit_info_get_generic_jit_info (MonoJitInfo *ji); MonoGenericSharingContext* -mono_jit_info_get_generic_sharing_context (MonoJitInfo *ji) MONO_INTERNAL; +mono_jit_info_get_generic_sharing_context (MonoJitInfo *ji); void -mono_jit_info_set_generic_sharing_context (MonoJitInfo *ji, MonoGenericSharingContext *gsctx) MONO_INTERNAL; +mono_jit_info_set_generic_sharing_context (MonoJitInfo *ji, MonoGenericSharingContext *gsctx); char * -mono_make_shadow_copy (const char *filename) MONO_INTERNAL; +mono_make_shadow_copy (const char *filename); gboolean -mono_is_shadow_copy_enabled (MonoDomain *domain, const gchar *dir_name) MONO_INTERNAL; +mono_is_shadow_copy_enabled (MonoDomain *domain, const gchar *dir_name); gpointer -mono_domain_alloc (MonoDomain *domain, guint size) MONO_INTERNAL; +mono_domain_alloc (MonoDomain *domain, guint size); gpointer -mono_domain_alloc0 (MonoDomain *domain, guint size) MONO_INTERNAL; +mono_domain_alloc0 (MonoDomain *domain, guint size); gpointer -mono_domain_alloc0_lock_free (MonoDomain *domain, guint size) MONO_INTERNAL; +mono_domain_alloc0_lock_free (MonoDomain *domain, guint size); void* mono_domain_code_reserve (MonoDomain *domain, int size) MONO_LLVM_INTERNAL; void* -mono_domain_code_reserve_align (MonoDomain *domain, int size, int alignment) MONO_INTERNAL; +mono_domain_code_reserve_align (MonoDomain *domain, int size, int alignment); void -mono_domain_code_commit (MonoDomain *domain, void *data, int size, int newsize) MONO_INTERNAL; +mono_domain_code_commit (MonoDomain *domain, void *data, int size, int newsize); void * -nacl_domain_get_code_dest (MonoDomain *domain, void *data) MONO_INTERNAL; +nacl_domain_get_code_dest (MonoDomain *domain, void *data); void -nacl_domain_code_validate (MonoDomain *domain, guint8 **buf_base, int buf_size, guint8 **code_end) MONO_INTERNAL; +nacl_domain_code_validate (MonoDomain *domain, guint8 **buf_base, int buf_size, guint8 **code_end); void -mono_domain_code_foreach (MonoDomain *domain, MonoCodeManagerFunc func, void *user_data) MONO_INTERNAL; +mono_domain_code_foreach (MonoDomain *domain, MonoCodeManagerFunc func, void *user_data); void -mono_domain_unset (void) MONO_INTERNAL; +mono_domain_unset (void); void -mono_domain_set_internal_with_options (MonoDomain *domain, gboolean migrate_exception) MONO_INTERNAL; +mono_domain_set_internal_with_options (MonoDomain *domain, gboolean migrate_exception); MonoTryBlockHoleTableJitInfo* -mono_jit_info_get_try_block_hole_table_info (MonoJitInfo *ji) MONO_INTERNAL; +mono_jit_info_get_try_block_hole_table_info (MonoJitInfo *ji); MonoArchEHJitInfo* -mono_jit_info_get_arch_eh_info (MonoJitInfo *ji) MONO_INTERNAL; +mono_jit_info_get_arch_eh_info (MonoJitInfo *ji); -MonoMethodCasInfo* -mono_jit_info_get_cas_info (MonoJitInfo *ji) MONO_INTERNAL; +MonoThunkJitInfo* +mono_jit_info_get_thunk_info (MonoJitInfo *ji); /* * Installs a new function which is used to return a MonoJitInfo for a method inside * an AOT module. */ typedef MonoJitInfo *(*MonoJitInfoFindInAot) (MonoDomain *domain, MonoImage *image, gpointer addr); -void mono_install_jit_info_find_in_aot (MonoJitInfoFindInAot func) MONO_INTERNAL; +void mono_install_jit_info_find_in_aot (MonoJitInfoFindInAot func); void -mono_jit_code_hash_init (MonoInternalHashTable *jit_code_hash) MONO_INTERNAL; +mono_jit_code_hash_init (MonoInternalHashTable *jit_code_hash); MonoAppDomain * -ves_icall_System_AppDomain_getCurDomain (void) MONO_INTERNAL; +ves_icall_System_AppDomain_getCurDomain (void); MonoAppDomain * -ves_icall_System_AppDomain_getRootDomain (void) MONO_INTERNAL; +ves_icall_System_AppDomain_getRootDomain (void); MonoAppDomain * ves_icall_System_AppDomain_createDomain (MonoString *friendly_name, - MonoAppDomainSetup *setup) MONO_INTERNAL; + MonoAppDomainSetup *setup); MonoObject * ves_icall_System_AppDomain_GetData (MonoAppDomain *ad, - MonoString *name) MONO_INTERNAL; + MonoString *name); MonoReflectionAssembly * ves_icall_System_AppDomain_LoadAssemblyRaw (MonoAppDomain *ad, MonoArray *raw_assembly, MonoArray *raw_symbol_store, MonoObject *evidence, - MonoBoolean refonly) MONO_INTERNAL; + MonoBoolean refonly); void ves_icall_System_AppDomain_SetData (MonoAppDomain *ad, MonoString *name, - MonoObject *data) MONO_INTERNAL; + MonoObject *data); MonoAppDomainSetup * -ves_icall_System_AppDomain_getSetup (MonoAppDomain *ad) MONO_INTERNAL; +ves_icall_System_AppDomain_getSetup (MonoAppDomain *ad); MonoString * -ves_icall_System_AppDomain_getFriendlyName (MonoAppDomain *ad) MONO_INTERNAL; +ves_icall_System_AppDomain_getFriendlyName (MonoAppDomain *ad); MonoArray * ves_icall_System_AppDomain_GetAssemblies (MonoAppDomain *ad, - MonoBoolean refonly) MONO_INTERNAL; + MonoBoolean refonly); MonoReflectionAssembly * ves_icall_System_Reflection_Assembly_LoadFrom (MonoString *fname, - MonoBoolean refonly) MONO_INTERNAL; + MonoBoolean refonly); MonoReflectionAssembly * ves_icall_System_AppDomain_LoadAssembly (MonoAppDomain *ad, MonoString *assRef, MonoObject *evidence, - MonoBoolean refonly) MONO_INTERNAL; + MonoBoolean refonly); gboolean -ves_icall_System_AppDomain_InternalIsFinalizingForUnload (gint32 domain_id) MONO_INTERNAL; +ves_icall_System_AppDomain_InternalIsFinalizingForUnload (gint32 domain_id); void -ves_icall_System_AppDomain_InternalUnload (gint32 domain_id) MONO_INTERNAL; +ves_icall_System_AppDomain_InternalUnload (gint32 domain_id); gint32 ves_icall_System_AppDomain_ExecuteAssembly (MonoAppDomain *ad, MonoReflectionAssembly *refass, - MonoArray *args) MONO_INTERNAL; + MonoArray *args); MonoAppDomain * -ves_icall_System_AppDomain_InternalSetDomain (MonoAppDomain *ad) MONO_INTERNAL; +ves_icall_System_AppDomain_InternalSetDomain (MonoAppDomain *ad); MonoAppDomain * -ves_icall_System_AppDomain_InternalSetDomainByID (gint32 domainid) MONO_INTERNAL; +ves_icall_System_AppDomain_InternalSetDomainByID (gint32 domainid); void -ves_icall_System_AppDomain_InternalPushDomainRef (MonoAppDomain *ad) MONO_INTERNAL; +ves_icall_System_AppDomain_InternalPushDomainRef (MonoAppDomain *ad); void -ves_icall_System_AppDomain_InternalPushDomainRefByID (gint32 domain_id) MONO_INTERNAL; +ves_icall_System_AppDomain_InternalPushDomainRefByID (gint32 domain_id); void -ves_icall_System_AppDomain_InternalPopDomainRef (void) MONO_INTERNAL; +ves_icall_System_AppDomain_InternalPopDomainRef (void); MonoAppContext * -ves_icall_System_AppDomain_InternalGetContext (void) MONO_INTERNAL; +ves_icall_System_AppDomain_InternalGetContext (void); MonoAppContext * -ves_icall_System_AppDomain_InternalGetDefaultContext (void) MONO_INTERNAL; +ves_icall_System_AppDomain_InternalGetDefaultContext (void); MonoAppContext * -ves_icall_System_AppDomain_InternalSetContext (MonoAppContext *mc) MONO_INTERNAL; +ves_icall_System_AppDomain_InternalSetContext (MonoAppContext *mc); gint32 -ves_icall_System_AppDomain_GetIDFromDomain (MonoAppDomain * ad) MONO_INTERNAL; +ves_icall_System_AppDomain_GetIDFromDomain (MonoAppDomain * ad); MonoString * -ves_icall_System_AppDomain_InternalGetProcessGuid (MonoString* newguid) MONO_INTERNAL; +ves_icall_System_AppDomain_InternalGetProcessGuid (MonoString* newguid); MonoAssembly * -mono_assembly_load_corlib (const MonoRuntimeInfo *runtime, MonoImageOpenStatus *status) MONO_INTERNAL; +mono_assembly_load_corlib (const MonoRuntimeInfo *runtime, MonoImageOpenStatus *status); const MonoRuntimeInfo* -mono_get_runtime_info (void) MONO_INTERNAL; +mono_get_runtime_info (void); void -mono_runtime_set_no_exec (gboolean val) MONO_INTERNAL; +mono_runtime_set_no_exec (gboolean val); gboolean -mono_runtime_get_no_exec (void) MONO_INTERNAL; +mono_runtime_get_no_exec (void); gboolean -mono_assembly_name_parse (const char *name, MonoAssemblyName *aname) MONO_INTERNAL; +mono_assembly_name_parse (const char *name, MonoAssemblyName *aname); MonoImage *mono_assembly_open_from_bundle (const char *filename, MonoImageOpenStatus *status, - gboolean refonly) MONO_INTERNAL; + gboolean refonly); MONO_API void mono_domain_add_class_static_data (MonoDomain *domain, MonoClass *klass, gpointer data, guint32 *bitmap); MonoReflectionAssembly * -mono_try_assembly_resolve (MonoDomain *domain, MonoString *fname, gboolean refonly) MONO_INTERNAL; +mono_try_assembly_resolve (MonoDomain *domain, MonoString *fname, MonoAssembly *requesting, gboolean refonly); + +MonoAssembly * +mono_domain_assembly_postload_search (MonoAssemblyName *aname, MonoAssembly *requesting, gboolean refonly); MonoAssembly* mono_assembly_load_full_nosearch (MonoAssemblyName *aname, const char *basedir, MonoImageOpenStatus *status, - gboolean refonly) MONO_INTERNAL; + gboolean refonly); -void mono_set_private_bin_path_from_config (MonoDomain *domain) MONO_INTERNAL; +void mono_set_private_bin_path_from_config (MonoDomain *domain); -int mono_framework_version (void) MONO_INTERNAL; +int mono_framework_version (void); -void mono_reflection_cleanup_domain (MonoDomain *domain) MONO_INTERNAL; +void mono_reflection_cleanup_domain (MonoDomain *domain); -void mono_assembly_cleanup_domain_bindings (guint32 domain_id) MONO_INTERNAL; +void mono_assembly_cleanup_domain_bindings (guint32 domain_id); -MonoJitInfo* mono_jit_info_table_find_internal (MonoDomain *domain, char *addr, gboolean try_aot) MONO_INTERNAL; +MonoJitInfo* mono_jit_info_table_find_internal (MonoDomain *domain, char *addr, gboolean try_aot, gboolean allow_trampolines); void mono_enable_debug_domain_unload (gboolean enable);