X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Floader.h;h=517f8e06cf5c40c6372f3c852b4b418b35d61e42;hb=1f84cc22414a1407ff67136c3e943f78257df49c;hp=f3df2cf8641f1c759c319943658bf77836ec7d09;hpb=12ef3711803e642ec277c2540edf23b4da33489f;p=mono.git diff --git a/mono/metadata/loader.h b/mono/metadata/loader.h index f3df2cf8641..517f8e06cf5 100644 --- a/mono/metadata/loader.h +++ b/mono/metadata/loader.h @@ -3,146 +3,53 @@ #include #include -#include - -typedef enum { - MONO_WRAPPER_NONE, - MONO_WRAPPER_DELEGATE_INVOKE, - MONO_WRAPPER_DELEGATE_BEGIN_INVOKE, - MONO_WRAPPER_DELEGATE_END_INVOKE, - MONO_WRAPPER_RUNTIME_INVOKE, - MONO_WRAPPER_NATIVE_TO_MANAGED, - MONO_WRAPPER_MANAGED_TO_NATIVE, - MONO_WRAPPER_REMOTING_INVOKE, - MONO_WRAPPER_REMOTING_INVOKE_WITH_CHECK, - MONO_WRAPPER_LDFLD, - MONO_WRAPPER_STFLD, - MONO_WRAPPER_SYNCHRONIZED, - MONO_WRAPPER_DYNAMIC_METHOD, - MONO_WRAPPER_UNKNOWN -} MonoWrapperType; - -typedef struct { - guint16 flags; /* method flags */ - guint16 iflags; /* method implementation flags */ - guint32 token; - MonoClass *klass; - MonoMethodSignature *signature; - gpointer addr; - gpointer info; /* runtime info */ - gpointer remoting_tramp; - gint slot; - /* name is useful mostly for debugging */ - const char *name; - /* this is used by the inlining algorithm */ - unsigned int inline_info:1; - unsigned int uses_this:1; - unsigned int wrapper_type:4; - unsigned int string_ctor:1; - unsigned int save_lmf:1; - gint16 inline_count; -} MonoMethod; - -typedef struct { - MonoMethod method; - MonoMethodHeader *header; -} MonoMethodNormal; - -typedef struct { - MonoMethodNormal method; - GList *data; -} MonoMethodWrapper; - -typedef struct { - MonoMethod method; - void (*code) (void); - /* add marshal info */ - guint16 piflags; /* pinvoke flags */ - guint16 implmap_idx; /* index into IMPLMAP */ -} MonoMethodPInvoke; - -typedef struct { - MonoImage *corlib; - MonoClass *object_class; - MonoClass *byte_class; - MonoClass *void_class; - MonoClass *boolean_class; - MonoClass *sbyte_class; - MonoClass *int16_class; - MonoClass *uint16_class; - MonoClass *int32_class; - MonoClass *uint32_class; - MonoClass *int_class; - MonoClass *uint_class; - MonoClass *int64_class; - MonoClass *uint64_class; - MonoClass *single_class; - MonoClass *double_class; - MonoClass *char_class; - MonoClass *string_class; - MonoClass *enum_class; - MonoClass *array_class; - MonoClass *delegate_class; - MonoClass *multicastdelegate_class; - MonoClass *asyncresult_class; - MonoClass *waithandle_class; - MonoClass *typehandle_class; - MonoClass *fieldhandle_class; - MonoClass *methodhandle_class; - MonoClass *monotype_class; - MonoClass *exception_class; - MonoClass *threadabortexception_class; - MonoClass *thread_class; - MonoClass *transparent_proxy_class; - MonoClass *real_proxy_class; - MonoClass *mono_method_message_class; - MonoClass *appdomain_class; - MonoClass *field_info_class; - MonoClass *method_info_class; - MonoClass *stringbuilder_class; - MonoClass *math_class; - MonoClass *stack_frame_class; - MonoClass *stack_trace_class; - MonoClass *marshal_class; - MonoClass *iserializeable_class; - MonoClass *serializationinfo_class; - MonoClass *streamingcontext_class; - MonoClass *typed_reference_class; - MonoClass *argumenthandle_class; - MonoClass *marshalbyrefobject_class; - MonoClass *monitor_class; - MonoClass *iremotingtypeinfo_class; -} MonoDefaults; - -extern MonoDefaults mono_defaults; - -/* - * This lock protects the hash tables inside MonoImage used by the metadata - * loading functions in class.c and loader.c. - */ -extern CRITICAL_SECTION loader_mutex; - -#define mono_loader_lock() EnterCriticalSection (&loader_mutex); -#define mono_loader_unlock() LeaveCriticalSection (&loader_mutex); + +G_BEGIN_DECLS typedef gboolean (*MonoStackWalk) (MonoMethod *method, gint32 native_offset, gint32 il_offset, gboolean managed, gpointer data); -typedef void (*MonoStackWalkImpl) (MonoStackWalk func, gpointer user_data); -void -mono_loader_init (void); +MonoMethod * +mono_get_method (MonoImage *image, guint32 token, MonoClass *klass); -void -mono_init_icall (void); +MonoMethod * +mono_get_method_full (MonoImage *image, guint32 token, MonoClass *klass, + MonoGenericContext *context); MonoMethod * -mono_get_method (MonoImage *image, guint32 token, MonoClass *klass); +mono_get_method_constrained (MonoImage *image, guint32 token, MonoClass *constrained_class, + MonoGenericContext *context, MonoMethod **cil_method); void mono_free_method (MonoMethod *method); +MonoMethodSignature* +mono_method_get_signature_full (MonoMethod *method, MonoImage *image, guint32 token, + MonoGenericContext *context); + MonoMethodSignature* mono_method_get_signature (MonoMethod *method, MonoImage *image, guint32 token); +MonoMethodSignature* +mono_method_signature (MonoMethod *method); + +MonoMethodHeader* +mono_method_get_header (MonoMethod *method); + +const char* +mono_method_get_name (MonoMethod *method); + +MonoClass* +mono_method_get_class (MonoMethod *method); + +guint32 +mono_method_get_token (MonoMethod *method); + +guint32 +mono_method_get_flags (MonoMethod *method, guint32 *iflags); + +guint32 +mono_method_get_index (MonoMethod *method); + MonoImage * mono_load_image (const char *fname, MonoImageOpenStatus *status); @@ -152,36 +59,35 @@ mono_add_internal_call (const char *name, gconstpointer method); gpointer mono_lookup_internal_call (MonoMethod *method); -int -mono_dllmap_lookup (const char *dll, const char* func, const char **rdll, const char **rfunc); - void -mono_dllmap_insert (const char *dll, const char *func, const char *tdll, const char *tfunc); +mono_dllmap_insert (MonoImage *assembly, const char *dll, const char *func, const char *tdll, const char *tfunc); gpointer -mono_lookup_pinvoke_call (MonoMethod *method); +mono_lookup_pinvoke_call (MonoMethod *method, const char **exc_class, const char **exc_arg); void mono_method_get_param_names (MonoMethod *method, const char **names); +guint32 +mono_method_get_param_token (MonoMethod *method, int idx); + void mono_method_get_marshal_info (MonoMethod *method, MonoMarshalSpec **mspecs); gboolean mono_method_has_marshal_info (MonoMethod *method); -gpointer -mono_method_get_wrapper_data (MonoMethod *method, guint32 id); - MonoMethod* mono_method_get_last_managed (void); void mono_stack_walk (MonoStackWalk func, gpointer user_data); +/* Use this if the IL offset is not needed: it's faster */ void -mono_install_stack_walk (MonoStackWalkImpl func); +mono_stack_walk_no_il (MonoStackWalk func, gpointer user_data); -MonoGenericParam *mono_metadata_load_generic_params (MonoImage *image, guint32 token, guint32 *num); +G_END_DECLS #endif +