*
* Copyright 2001-2003 Ximian, Inc (http://www.ximian.com)
* Copyright 2004-2009 Novell, Inc (http://www.novell.com)
+ * Copyright 2011 Xamarin, Inc (http://www.xamarin.com)
*/
#include <config.h>
#include <stdio.h>
{"System.Management", 0},
{"System.Messaging", 0},
{"System.Runtime.Remoting", 0},
+ {"System.Runtime.Serialization", 3},
{"System.Runtime.Serialization.Formatters.Soap", 0},
{"System.Security", 0},
{"System.ServiceProcess", 0},
mono_set_dirs (MONO_ASSEMBLIES, MONO_CFG_DIR);
}
-static void
+static G_GNUC_UNUSED void
set_dirs (char *exe)
{
char *base;
int pos, first, last;
if (aname->name == NULL) return aname;
+
current_runtime = mono_get_runtime_info ();
+ if (aname->flags & ASSEMBLYREF_RETARGETABLE_FLAG) {
+ const AssemblyVersionSet* vset;
+
+ /* Remap to current runtime */
+ vset = ¤t_runtime->version_sets [0];
+
+ memcpy (dest_aname, aname, sizeof(MonoAssemblyName));
+ dest_aname->major = vset->major;
+ dest_aname->minor = vset->minor;
+ dest_aname->build = vset->build;
+ dest_aname->revision = vset->revision;
+ dest_aname->flags &= ~ASSEMBLYREF_RETARGETABLE_FLAG;
+
+ /* Remap assembly name */
+ if (!strcmp (aname->name, "System.Net"))
+ dest_aname->name = g_strdup ("System");
+
+ mono_trace (G_LOG_LEVEL_WARNING, MONO_TRACE_ASSEMBLY,
+ "The request to load the retargetable assembly %s v%d.%d.%d.%d was remapped to %s v%d.%d.%d.%d",
+ aname->name,
+ aname->major, aname->minor, aname->build, aname->revision,
+ dest_aname->name,
+ vset->major, vset->minor, vset->build, vset->revision
+ );
+
+ return dest_aname;
+ }
+
first = 0;
last = G_N_ELEMENTS (framework_assemblies) - 1;
return mono_assembly_loaded_full (aname, FALSE);
}
+void
+mono_assembly_release_gc_roots (MonoAssembly *assembly)
+{
+ if (assembly == NULL || assembly == REFERENCE_MISSING)
+ return;
+
+ if (assembly->dynamic) {
+ int i;
+ MonoDynamicImage *dynimg = (MonoDynamicImage *)assembly->image;
+ for (i = 0; i < dynimg->image.module_count; ++i)
+ mono_dynamic_image_release_gc_roots ((MonoDynamicImage *)dynimg->image.modules [i]);
+ mono_dynamic_image_release_gc_roots (dynimg);
+ }
+}
+
/*
* Returns whether mono_assembly_close_finish() must be called as
* well. See comment for mono_image_close_except_pools() for why we