X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmetadata%2Floader.h;h=74e1a353475f4061dffe31691479c95326f9656a;hb=dcdd5a25d92ca46ae14f74e974b4def640920e33;hp=8f25f9f2b8fded68c7494e17d7e8cf731b33d8d2;hpb=ffeda01ab9f813309b54839c56d9f393589182d6;p=mono.git diff --git a/mono/metadata/loader.h b/mono/metadata/loader.h index 8f25f9f2b8f..74e1a353475 100644 --- a/mono/metadata/loader.h +++ b/mono/metadata/loader.h @@ -4,16 +4,41 @@ #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_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; + const char *name; + /* this is used by the inlining algorithm */ + unsigned int inline_info:1; + unsigned int uses_this:1; + MonoWrapperType wrapper_type:4; + unsigned int string_ctor:1; + unsigned int save_lmf:1; + gint16 inline_count; } MonoMethod; typedef struct { @@ -21,10 +46,17 @@ typedef struct { MonoMethodHeader *header; } MonoMethodNormal; +typedef struct { + MonoMethodNormal method; + GList *data; +} MonoMethodWrapper; + typedef struct { MonoMethod method; + void (*code) (void); + /* add marshal info */ guint16 piflags; /* pinvoke flags */ - void (*code) (); + guint16 implmap_idx; /* index into IMPLMAP */ } MonoMethodPInvoke; typedef struct { @@ -49,16 +81,39 @@ typedef struct { 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 *marshalbyrefobject_class; + MonoClass *monitor_class; } MonoDefaults; extern MonoDefaults mono_defaults; -void -mono_init (void); +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_init_icall (void); @@ -70,15 +125,39 @@ void mono_free_method (MonoMethod *method); MonoImage * -mono_load_image (const char *fname, enum MonoImageOpenStatus *status); +mono_load_image (const char *fname, MonoImageOpenStatus *status); + +void +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_add_internal_call (const char *name, gpointer method); +mono_dllmap_insert (const char *dll, const char *func, const char *tdll, const char *tfunc); gpointer -mono_lookup_internal_call (const char *name); +mono_lookup_pinvoke_call (MonoMethod *method); void mono_method_get_param_names (MonoMethod *method, const char **names); +void +mono_method_get_marshal_info (MonoMethod *method, MonoMarshalSpec **mspecs); + +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); + +void +mono_install_stack_walk (MonoStackWalkImpl func); + #endif