#include <mono/metadata/mono-debug.h>
#include <mono/metadata/mono-ptr-array.h>
#include <mono/metadata/verify-internals.h>
+#include <mono/metadata/runtime.h>
#include <mono/io-layer/io-layer.h>
#include <mono/utils/strtod.h>
#include <mono/utils/monobitset.h>
#include <mono/utils/mono-error-internals.h>
#include <mono/utils/mono-mmap.h>
#include <mono/utils/mono-io-portability.h>
+#include <mono/utils/mono-digest.h>
#if defined (HOST_WIN32)
#include <windows.h>
{
MONO_ARCH_SAVE_REGS;
- if (obj->vtable->klass != mono_defaults.transparent_proxy_class)
- return mono_type_get_object (mono_object_domain (obj), &obj->vtable->klass->byval_arg);
- else
+#ifndef DISABLE_REMOTING
+ if (obj->vtable->klass == mono_defaults.transparent_proxy_class)
return mono_type_get_object (mono_object_domain (obj), &((MonoTransparentProxy*)obj)->remote_class->proxy_class->byval_arg);
+ else
+#endif
+ return mono_type_get_object (mono_object_domain (obj), &obj->vtable->klass->byval_arg);
}
ICALL_EXPORT void
MonoClass *klass = mono_class_from_mono_type (type->type);
mono_class_init_or_throw (klass);
- return (klass && klass->is_com_object);
+ return mono_class_is_com_object (klass);
}
ICALL_EXPORT MonoReflectionModule*
return mono_runtime_invoke_array (m, obj, params, NULL);
}
+#ifndef DISABLE_REMOTING
ICALL_EXPORT MonoObject *
ves_icall_InternalExecute (MonoReflectionMethod *method, MonoObject *this, MonoArray *params, MonoArray **outArgs)
{
return result;
}
+#endif
static guint64
read_enum_value (char *mem, int type)
return result;
}
-typedef struct {
- MonoArray *res;
- int idx;
-} NameSpaceInfo;
-
-static void
-foreach_namespace (const char* key, gconstpointer val, NameSpaceInfo *info)
-{
- MonoString *name = mono_string_new (mono_object_domain (info->res), key);
-
- mono_array_setref (info->res, info->idx, name);
- info->idx++;
-}
-
-ICALL_EXPORT MonoArray*
-ves_icall_System_Reflection_Assembly_GetNamespaces (MonoReflectionAssembly *assembly)
-{
- MonoImage *img = assembly->assembly->image;
- MonoArray *res;
- NameSpaceInfo info;
- int len;
-
- MONO_ARCH_SAVE_REGS;
-
- mono_image_lock (img);
- mono_image_init_name_cache (img);
-
-RETRY_LEN:
- len = g_hash_table_size (img->name_cache);
- mono_image_unlock (img);
-
- /*we can't create objects holding the image lock */
- res = mono_array_new (mono_object_domain (assembly), mono_defaults.string_class, len);
-
- mono_image_lock (img);
- /*len might have changed, create a new array*/
- if (len != g_hash_table_size (img->name_cache))
- goto RETRY_LEN;
-
- info.res = res;
- info.idx = 0;
- g_hash_table_foreach (img->name_cache, (GHFunc)foreach_namespace, &info);
- mono_image_unlock (img);
-
- return res;
-}
-
/* move this in some file in mono/util/ */
static char *
g_concat_dir_and_file (const char *dir, const char *file)
MONO_ARCH_SAVE_REGS;
mono_stack_walk_no_il (get_executing, &dest);
+ g_assert (dest);
return mono_assembly_get_object (mono_domain_get (), dest->klass->image->assembly);
}
return TRUE;
}
+#ifndef DISABLE_REMOTING
ICALL_EXPORT MonoObject *
ves_icall_Remoting_RealProxy_GetTransparentProxy (MonoObject *this, MonoString *class_name)
{
{
return mono_type_get_object (mono_object_domain (tp), &tp->remote_class->proxy_class->byval_arg);
}
+#endif
/* System.Environment */
{
MONO_ARCH_SAVE_REGS;
- mono_threads_set_shutting_down ();
-
- mono_runtime_set_shutting_down ();
+/* FIXME: There are some cleanup hangs that should be worked out, but
+ * if the program is going to exit, everything will be cleaned up when
+ * NaCl exits anyway.
+ */
+#ifndef __native_client__
+ mono_runtime_shutdown ();
/* This will kill the tp threads which cannot be suspended */
mono_thread_pool_cleanup ();
mono_thread_suspend_all_other_threads ();
mono_runtime_quit ();
+#endif
/* we may need to do some cleanup here... */
exit (result);
mono_message_init (mono_object_domain (this), this, method, out_args);
}
+#ifndef DISABLE_REMOTING
ICALL_EXPORT MonoBoolean
ves_icall_IsTransparentProxy (MonoObject *proxy)
{
klass = mono_class_from_mono_type (type->type);
vtable = mono_class_vtable_full (mono_domain_get (), klass, TRUE);
- if (enable) vtable->remote = 1;
- else vtable->remote = 0;
+ mono_vtable_set_is_remote (vtable, enable);
}
+#endif
ICALL_EXPORT MonoObject *
ves_icall_System_Runtime_Activation_ActivationServices_AllocateUninitializedClassInstance (MonoReflectionType *type)
iter->args = (guint8*)(((gsize)iter->args + (align) - 1) & ~(align - 1));
#endif
res.value = iter->args;
+#if defined(__native_client__) && SIZEOF_REGISTER == 8
+ /* Values are stored as 8 byte register sized objects, but 'value'
+ * is dereferenced as a pointer in other routines.
+ */
+ res.value = (char*)res.value + 4;
+#endif
#if G_BYTE_ORDER != G_LITTLE_ENDIAN
if (arg_size <= sizeof (gpointer)) {
int dummy;
return jit_icall_hash_name;
}
+/*
+ * mono_lookup_jit_icall_symbol:
+ *
+ * Given the jit icall NAME, returns its C symbol if possible, or NULL.
+ */
+const char*
+mono_lookup_jit_icall_symbol (const char *name)
+{
+ MonoJitICallInfo *info;
+ const char *res = NULL;
+
+ mono_loader_lock ();
+ info = g_hash_table_lookup (jit_icall_hash_name, name);
+ if (info)
+ res = info->c_symbol;
+ mono_loader_unlock ();
+ return res;
+}
+
void
mono_register_jit_icall_wrapper (MonoJitICallInfo *info, gconstpointer wrapper)
{
}
MonoJitICallInfo *
-mono_register_jit_icall (gconstpointer func, const char *name, MonoMethodSignature *sig, gboolean is_save)
+mono_register_jit_icall_full (gconstpointer func, const char *name, MonoMethodSignature *sig, gboolean is_save, const char *c_symbol)
{
MonoJitICallInfo *info;
info->name = name;
info->func = func;
info->sig = sig;
+ info->c_symbol = c_symbol;
if (is_save) {
info->wrapper = func;
mono_loader_unlock ();
return info;
}
+
+MonoJitICallInfo *
+mono_register_jit_icall (gconstpointer func, const char *name, MonoMethodSignature *sig, gboolean is_save)
+{
+ return mono_register_jit_icall_full (func, name, sig, is_save, NULL);
+}
+