#include <mono/metadata/metadata.h>
#include <mono/metadata/image.h>
+#include <mono/io-layer/io-layer.h>
+
+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;
/* 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;
MonoMethodHeader *header;
} MonoMethodNormal;
+typedef struct {
+ MonoMethodNormal method;
+ GList *data;
+} MonoMethodWrapper;
+
typedef struct {
MonoMethod method;
void (*code) (void);
MonoClass *string_class;
MonoClass *enum_class;
MonoClass *array_class;
+ MonoClass *delegate_class;
MonoClass *multicastdelegate_class;
MonoClass *asyncresult_class;
MonoClass *waithandle_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);
+
+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);
+
void
mono_init_icall (void);
void
mono_free_method (MonoMethod *method);
+MonoMethodSignature*
+mono_method_get_signature (MonoMethod *method, MonoImage *image, guint32 token);
+
MonoImage *
mono_load_image (const char *fname, MonoImageOpenStatus *status);
mono_dllmap_insert (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);
+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);
+
+void
+mono_install_stack_walk (MonoStackWalkImpl func);
+
+MonoGenericParam *mono_metadata_load_generic_params (MonoImage *image, guint32 token, guint32 *num);
+
#endif