diff options
Diffstat (limited to 'mono/metadata/assembly.c')
-rw-r--r-- | mono/metadata/assembly.c | 307 |
1 files changed, 0 insertions, 307 deletions
diff --git a/mono/metadata/assembly.c b/mono/metadata/assembly.c index 8421df9f501..5a2ddad4e75 100644 --- a/mono/metadata/assembly.c +++ b/mono/metadata/assembly.c @@ -386,10 +386,6 @@ static GSList *loaded_assembly_bindings = NULL; static GENERATE_TRY_GET_CLASS_WITH_CACHE (internals_visible, "System.Runtime.CompilerServices", "InternalsVisibleToAttribute") static MonoAssembly* mono_assembly_invoke_search_hook_internal (MonoAssemblyLoadContext *alc, MonoAssembly *requesting, MonoAssemblyName *aname, gboolean refonly, gboolean postload); -#ifdef ENABLE_NETCORE -static MonoAssembly* -mono_assembly_request_byname_nosearch (MonoAssemblyName *aname, const MonoAssemblyByNameRequest *req, MonoImageOpenStatus *status); -#endif static MonoAssembly* mono_assembly_load_full_gac_base_default (MonoAssemblyName *aname, const char *basedir, MonoAssemblyLoadContext *alc, MonoAssemblyContextKind asmctx, MonoImageOpenStatus *status); static MonoAssembly* @@ -402,10 +398,8 @@ invoke_assembly_preload_hook (MonoAssemblyLoadContext *alc, MonoAssemblyName *an static MonoBoolean mono_assembly_is_in_gac (const gchar *filanem); -#ifndef ENABLE_NETCORE static MonoAssemblyName* mono_assembly_apply_binding (MonoAssemblyName *aname, MonoAssemblyName *dest_name); -#endif static MonoAssembly* prevent_reference_assembly_from_running (MonoAssembly* candidate, gboolean refonly); @@ -1553,7 +1547,6 @@ mono_assembly_get_assemblyref (MonoImage *image, int index, MonoAssemblyName *an } } -#ifndef ENABLE_NETCORE static MonoAssembly* load_reference_by_aname_refonly_asmctx (MonoAssemblyName *aname, MonoAssemblyLoadContext *alc, MonoAssembly *assm, MonoImageOpenStatus *status) { @@ -1666,179 +1659,6 @@ load_reference_by_aname_individual_asmctx (MonoAssemblyName *aname, MonoAssembly reference = (MonoAssembly*)REFERENCE_MISSING; return reference; } -#else -static MonoAssembly * -search_bundle_for_assembly (MonoAssemblyLoadContext *alc, MonoAssemblyName *aname) -{ - if (bundles == NULL && satellite_bundles == NULL) - return NULL; - - MonoImageOpenStatus status; - MonoImage *image; - MonoAssemblyLoadRequest req; - image = mono_assembly_open_from_bundle (alc, aname->name, &status, FALSE, aname->culture); - if (!image && !g_str_has_suffix (aname->name, ".dll")) { - char *name = g_strdup_printf ("%s.dll", aname->name); - image = mono_assembly_open_from_bundle (alc, name, &status, FALSE, aname->culture); - } - if (image) { - mono_assembly_request_prepare_load (&req, MONO_ASMCTX_DEFAULT, alc); - return mono_assembly_request_load_from (image, aname->name, &req, &status); - } - return NULL; -} - -static MonoAssembly* -netcore_load_reference (MonoAssemblyName *aname, MonoAssemblyLoadContext *alc, MonoAssembly *requesting, gboolean postload) -{ - g_assert (alc != NULL); - - MonoAssemblyName mapped_aname; - - aname = mono_assembly_remap_version (aname, &mapped_aname); - - MonoAssembly *reference = NULL; - - gboolean is_satellite = !mono_assembly_name_culture_is_neutral (aname); - gboolean is_default = mono_alc_is_default (alc); - - /* - * Try these until one of them succeeds (by returning a non-NULL reference): - * 1. Check if it's already loaded by the ALC. - * - * 2. If it's a non-default ALC, call the Load() method. - * - * 3. If the ALC is not the default and this is not a satellite request, - * check if it's already loaded by the default ALC. - * - * 4. If we have a bundle registered and this is not a satellite request, - * search the images for a matching name. - * - * 5. If we have a satellite bundle registered and this is a satellite request, - * find the parent ALC and search the images for a matching name and culture. - * - * 6. If the ALC is the default or this is not a satellite request, - * check the TPA list, APP_PATHS, and ApplicationBase. - * - * 7. If this is a satellite request, call the ALC ResolveSatelliteAssembly method. - * - * 8. Call the ALC Resolving event. - * - * 9. Call the ALC AssemblyResolve event (except for corlib satellite assemblies). - * - * 10. Return NULL. - */ - - reference = mono_assembly_loaded_internal (alc, aname, FALSE); - if (reference) { - mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Assembly already loaded in the active ALC: '%s'.", aname->name); - goto leave; - } - - if (!is_default) { - reference = mono_alc_invoke_resolve_using_load_nofail (alc, aname); - if (reference) { - mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Assembly found using Load method: '%s'.", aname->name); - goto leave; - } - } - - if (!is_default && !is_satellite) { - reference = mono_assembly_loaded_internal (mono_domain_default_alc (mono_alc_domain (alc)), aname, FALSE); - if (reference) { - mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Assembly already loaded in the default ALC: '%s'.", aname->name); - goto leave; - } - } - - if (bundles != NULL && !is_satellite) { - reference = search_bundle_for_assembly (mono_domain_default_alc (mono_alc_domain (alc)), aname); - if (reference) { - mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Assembly found in the bundle: '%s'.", aname->name); - goto leave; - } - } - - if (satellite_bundles != NULL && is_satellite) { - // Satellite assembly byname requests should be loaded in the same ALC as their parent assembly - size_t name_len = strlen (aname->name); - char *parent_name = NULL; - MonoAssemblyLoadContext *parent_alc = NULL; - if (g_str_has_suffix (aname->name, MONO_ASSEMBLY_RESOURCE_SUFFIX)) - parent_name = g_strdup_printf ("%s.dll", g_strndup (aname->name, name_len - strlen (MONO_ASSEMBLY_RESOURCE_SUFFIX))); - - if (parent_name) { - MonoAssemblyOpenRequest req; - mono_assembly_request_prepare_open (&req, MONO_ASMCTX_DEFAULT, alc); - MonoAssembly *parent_assembly = mono_assembly_request_open (parent_name, &req, NULL); - parent_alc = mono_assembly_get_alc (parent_assembly); - } - - if (parent_alc) - reference = search_bundle_for_assembly (parent_alc, aname); - - if (reference) { - mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Assembly found in the satellite bundle: '%s'.", aname->name); - goto leave; - } - } - - if (is_default || !is_satellite) { - reference = invoke_assembly_preload_hook (mono_domain_default_alc (mono_alc_domain (alc)), aname, assemblies_path); - if (reference) { - mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Assembly found with the filesystem probing logic: '%s'.", aname->name); - goto leave; - } - } - - if (is_satellite) { - reference = mono_alc_invoke_resolve_using_resolve_satellite_nofail (alc, aname); - if (reference) { - mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Assembly found with ResolveSatelliteAssembly method: '%s'.", aname->name); - goto leave; - } - } - - reference = mono_alc_invoke_resolve_using_resolving_event_nofail (alc, aname); - if (reference) { - mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Assembly found with the Resolving event: '%s'.", aname->name); - goto leave; - } - - // Looking up corlib resources here can cause an infinite loop - // See: https://github.com/dotnet/coreclr/blob/0a762eb2f3a299489c459da1ddeb69e042008f07/src/vm/appdomain.cpp#L5178-L5239 - if (!(strcmp (aname->name, MONO_ASSEMBLY_CORLIB_RESOURCE_NAME) == 0 && is_satellite) && postload) { - reference = mono_assembly_invoke_search_hook_internal (alc, requesting, aname, FALSE, TRUE); - if (reference) { - mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Assembly found with AssemblyResolve event: '%s'.", aname->name); - goto leave; - } - } - -leave: - return reference; -} - -static MonoImage * -open_from_satellite_bundle (MonoAssemblyLoadContext *alc, const char *filename, MonoImageOpenStatus *status, gboolean refonly, const char *culture) -{ - if (!satellite_bundles) - return NULL; - - MonoImage *image = NULL; - char *name = g_strdup (filename); - for (int i = 0; !image && satellite_bundles [i]; ++i) { - if (strcmp (satellite_bundles [i]->name, name) == 0 && strcmp (satellite_bundles [i]->culture, culture) == 0) { - image = mono_image_open_from_data_internal (alc, (char *)satellite_bundles [i]->data, satellite_bundles [i]->size, FALSE, status, refonly, FALSE, name, NULL); - break; - } - } - - g_free (name); - return image; -} - -#endif /* ENABLE_NETCORE */ /** * mono_assembly_get_assemblyref_checked: @@ -1946,7 +1766,6 @@ mono_assembly_load_reference (MonoImage *image, int index) aname_str); g_free (aname_str); } -#ifndef ENABLE_NETCORE switch (mono_asmctx_get_kind (&image->assembly->context)) { case MONO_ASMCTX_DEFAULT: reference = load_reference_by_aname_default_asmctx (&aname, mono_image_get_alc (image), image->assembly, &status); @@ -1964,20 +1783,9 @@ mono_assembly_load_reference (MonoImage *image, int index) g_error ("Unexpected assembly load context kind %d for image %s.", mono_asmctx_get_kind (&image->assembly->context), image->name); break; } -#else - MonoAssemblyByNameRequest req; - mono_assembly_request_prepare_byname (&req, MONO_ASMCTX_DEFAULT, mono_image_get_alc (image)); - req.requesting_assembly = image->assembly; - //req.no_postload_search = TRUE; // FIXME: should this be set? - reference = mono_assembly_request_byname (&aname, &req, NULL); -#endif } else { -#ifndef ENABLE_NETCORE /* FIXME: can we establish that image->assembly is never NULL and this code is dead? */ reference = load_reference_by_aname_default_asmctx (&aname, mono_image_get_alc (image), image->assembly, &status); -#else - g_assertf (image->assembly, "While loading reference %d MonoImage %s doesn't have a MonoAssembly", index, image->name); -#endif } if (reference == NULL){ @@ -2310,13 +2118,7 @@ invoke_assembly_preload_hook (MonoAssemblyLoadContext *alc, MonoAssemblyName *an if (hook->version == 2) assembly = hook->func.v2 (alc, aname, apath, FALSE, hook->user_data, error); else { // v3 -#ifdef ENABLE_NETCORE - MonoGCHandle strong_gchandle = mono_gchandle_from_handle (mono_gchandle_get_target_handle (alc->gchandle), TRUE); - assembly = hook->func.v3 (strong_gchandle, aname, apath, hook->user_data, error); - mono_gchandle_free_internal (strong_gchandle); -#else assembly = hook->func.v3 (NULL, aname, apath, hook->user_data, error); -#endif } /* TODO: propagage error out to callers */ mono_error_assert_ok (error); @@ -2593,12 +2395,7 @@ open_from_bundle_internal (MonoAssemblyLoadContext *alc, const char *filename, M char *name = is_satellite ? g_strdup (filename) : g_path_get_basename (filename); for (int i = 0; !image && bundles [i]; ++i) { if (strcmp (bundles [i]->name, name) == 0) { -#ifdef ENABLE_NETCORE - // Since bundled images don't exist on disk, don't give them a legit filename - image = mono_image_open_from_data_internal (alc, (char*)bundles [i]->data, bundles [i]->size, FALSE, status, refonly, FALSE, name, NULL); -#else image = mono_image_open_from_data_internal (alc, (char*)bundles [i]->data, bundles [i]->size, FALSE, status, refonly, FALSE, name, name); -#endif break; } } @@ -2624,7 +2421,6 @@ mono_assembly_open_from_bundle (MonoAssemblyLoadContext *alc, const char *filena * purpose assembly loading mechanism. */ MonoImage *image = NULL; -#ifndef ENABLE_NETCORE if (!bundles) return NULL; @@ -2632,13 +2428,6 @@ mono_assembly_open_from_bundle (MonoAssemblyLoadContext *alc, const char *filena gboolean is_satellite = g_str_has_suffix (lowercase_filename, ".resources.dll"); g_free (lowercase_filename); image = open_from_bundle_internal (alc, filename, status, refonly, is_satellite); -#else - gboolean is_satellite = culture && culture [0] != 0;; - if (is_satellite) - image = open_from_satellite_bundle (alc, filename, status, refonly, culture); - else - image = open_from_bundle_internal (alc, filename, status, refonly, FALSE); -#endif if (image) { mono_image_addref (image); @@ -2857,10 +2646,8 @@ mono_assembly_request_open (const char *filename, const MonoAssemblyOpenRequest if (!loaded_from_bundle) mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Assembly Loader loaded assembly from location: '%s'.", filename); -#ifndef ENABLE_NETCORE // no XML file loading on netcore if (!refonly) mono_config_for_assembly_internal (ass->image); -#endif } /* Clear the reference added by mono_image_open */ @@ -3034,13 +2821,11 @@ chain_redirections_loadfrom (MonoAssemblyLoadContext *alc, MonoImage *image, Mon MonoImageOpenStatus status = MONO_IMAGE_OK; MonoAssembly *redirected = NULL; -#ifndef ENABLE_NETCORE redirected = mono_assembly_binding_applies_to_image (alc, image, &status); if (redirected || status != MONO_IMAGE_OK) { *out_status = status; return redirected; } -#endif redirected = mono_problematic_image_reprobe (alc, image, &status); if (redirected || status != MONO_IMAGE_OK) { @@ -3052,7 +2837,6 @@ chain_redirections_loadfrom (MonoAssemblyLoadContext *alc, MonoImage *image, Mon return NULL; } -#ifndef ENABLE_NETCORE /** * mono_assembly_binding_applies_to_image: * \param alc AssemblyLoadContext to load into @@ -3116,7 +2900,6 @@ mono_assembly_binding_applies_to_image (MonoAssemblyLoadContext *alc, MonoImage* mono_assembly_name_free_internal (&probed_aname); return result_ass; } -#endif /** * mono_problematic_image_reprobe: @@ -3547,48 +3330,6 @@ build_assembly_name (const char *name, const char *version, const char *culture, memset (aname, 0, sizeof (MonoAssemblyName)); if (version) { -#ifdef ENABLE_NETCORE - int parts [4]; - int i; - int part_len; - - parts [2] = -1; - parts [3] = -1; - const char *s = version; - version_parts = 0; - for (i = 0; i < 4; ++i) { - int n = sscanf (s, "%u%n", &parts [i], &part_len); - if (n != 1) - return FALSE; - if (parts [i] < 0 || parts [i] > 65535) - return FALSE; - if (i < 2 && parts [i] == 65535) - return FALSE; - version_parts ++; - s += part_len; - if (s [0] == '\0') - break; - if (i < 3) { - if (s [0] != '.') - return FALSE; - s ++; - } - } - if (s [0] != '\0') - return FALSE; - if (version_parts < 2 || version_parts > 4) - return FALSE; - aname->major = parts [0]; - aname->minor = parts [1]; - if (version_parts >= 3) - aname->build = parts [2]; - else - aname->build = -1; - if (version_parts == 4) - aname->revision = parts [3]; - else - aname->revision = -1; -#else gint major, minor, build, revision; version_parts = sscanf (version, "%u.%u.%u.%u", &major, &minor, &build, &revision); @@ -3608,7 +3349,6 @@ build_assembly_name (const char *name, const char *version, const char *culture, aname->revision = revision; else aname->revision = 0; -#endif } aname->flags = flags; @@ -3838,9 +3578,6 @@ mono_assembly_name_parse_full (const char *name, MonoAssemblyName *aname, gboole goto cleanup_and_fail; } -#ifdef ENABLE_NETCORE - flags |= arch << 4; -#endif g_free (procarch_uq); tmp++; @@ -4492,7 +4229,6 @@ mono_domain_parse_assembly_bindings (MonoDomain *domain, int amajor, int aminor, mono_domain_unlock (domain); } -#ifndef ENABLE_NETCORE static MonoAssemblyName* mono_assembly_apply_binding (MonoAssemblyName *aname, MonoAssemblyName *dest_name) { @@ -4605,7 +4341,6 @@ return_aname: exit: HANDLE_FUNCTION_RETURN_VAL (result); } -#endif #ifndef DISABLE_GAC /** @@ -4699,24 +4434,6 @@ mono_assembly_load_corlib (const MonoRuntimeInfo *runtime, MonoImageOpenStatus * return corlib; } -#ifdef ENABLE_NETCORE - aname = mono_assembly_name_new (MONO_ASSEMBLY_CORLIB_NAME); - corlib = invoke_assembly_preload_hook (req.request.alc, aname, NULL); - /* MonoCore preload hook should know how to find it */ - /* FIXME: AOT compiler comes here without an installed hook. */ - if (!corlib) { - if (assemblies_path) { // Custom assemblies path set via MONO_PATH or mono_set_assemblies_path - char *corlib_name = g_strdup_printf ("%s.dll", MONO_ASSEMBLY_CORLIB_NAME); - corlib = load_in_path (corlib_name, (const char**)assemblies_path, &req, status); - } - } - if (!corlib) { - /* Maybe its in a bundle */ - char *corlib_name = g_strdup_printf ("%s.dll", MONO_ASSEMBLY_CORLIB_NAME); - corlib = mono_assembly_request_open (corlib_name, &req, status); - } - g_assert (corlib); -#else // A nonstandard preload hook may provide a special mscorlib assembly aname = mono_assembly_name_new ("mscorlib.dll"); corlib = invoke_assembly_preload_hook (req.request.alc, aname, assemblies_path); @@ -4748,7 +4465,6 @@ mono_assembly_load_corlib (const MonoRuntimeInfo *runtime, MonoImageOpenStatus * return_corlib_and_facades: if (corlib) // FIXME: stop hardcoding 4.5 here default_path [1] = g_strdup_printf ("%s/Facades", corlib->basedir); -#endif /*!ENABLE_NETCORE*/ return corlib; } @@ -4785,9 +4501,6 @@ mono_assembly_candidate_predicate_sn_same_name (MonoAssembly *candidate, gpointe g_free (s); } -#ifdef ENABLE_NETCORE - return mono_assembly_check_name_match (wanted_name, candidate_name); -#else /* Wanted name has no token, not strongly named: always matches. */ if (0 == wanted_name->public_key_token [0]) { mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Predicate: wanted has no token, returning TRUE"); @@ -4802,19 +4515,12 @@ mono_assembly_candidate_predicate_sn_same_name (MonoAssembly *candidate, gpointe return mono_assembly_check_name_match (wanted_name, candidate_name) || framework_assembly_sn_match (wanted_name, candidate_name); -#endif } gboolean mono_assembly_check_name_match (MonoAssemblyName *wanted_name, MonoAssemblyName *candidate_name) { -#if ENABLE_NETCORE - gboolean result = mono_assembly_names_equal_flags (wanted_name, candidate_name, MONO_ANAME_EQ_IGNORE_VERSION | MONO_ANAME_EQ_IGNORE_PUBKEY); - if (result && assembly_names_compare_versions (wanted_name, candidate_name, -1) > 0) - result = FALSE; -#else gboolean result = mono_assembly_names_equal_flags (wanted_name, candidate_name, MONO_ANAME_EQ_NONE); -#endif mono_trace (G_LOG_LEVEL_DEBUG, MONO_TRACE_ASSEMBLY, "Predicate: candidate and wanted names %s", result ? "match, returning TRUE" : "don't match, returning FALSE"); @@ -4856,7 +4562,6 @@ framework_assembly_sn_match (MonoAssemblyName *wanted_name, MonoAssemblyName *ca return FALSE; } -#ifndef ENABLE_NETCORE static MonoAssembly* mono_assembly_request_byname_nosearch (MonoAssemblyName *aname, const MonoAssemblyByNameRequest *req, @@ -4887,7 +4592,6 @@ mono_assembly_request_byname_nosearch (MonoAssemblyName *aname, result = mono_assembly_load_full_gac_base_default (aname, req->basedir, req->request.alc, req->request.asmctx, status); return result; } -#endif /* Like mono_assembly_request_byname_nosearch, but don't ask the preload look (ie, * the appdomain) to run. Just looks in the gac, the specified base dir or the @@ -4987,7 +4691,6 @@ mono_assembly_request_byname (MonoAssemblyName *aname, const MonoAssemblyByNameR MonoAssembly *result; if (status) *status = MONO_IMAGE_OK; -#ifndef ENABLE_NETCORE result = mono_assembly_request_byname_nosearch (aname, req, status); const gboolean refonly = req->request.asmctx == MONO_ASMCTX_REFONLY; @@ -4996,9 +4699,6 @@ mono_assembly_request_byname (MonoAssemblyName *aname, const MonoAssemblyByNameR result = mono_assembly_invoke_search_hook_internal (req->request.alc, req->requesting_assembly, aname, refonly, TRUE); result = prevent_reference_assembly_from_running (result, refonly); } -#else - result = netcore_load_reference (aname, req->request.alc, req->requesting_assembly, !req->no_postload_search); -#endif return result; } @@ -5008,11 +4708,7 @@ mono_assembly_load_full_alc (MonoGCHandle alc_gchandle, MonoAssemblyName *aname, MonoAssembly *res; MONO_ENTER_GC_UNSAFE; MonoAssemblyByNameRequest req; -#ifdef ENABLE_NETCORE - MonoAssemblyLoadContext *alc = mono_alc_from_gchandle (alc_gchandle); -#else MonoAssemblyLoadContext *alc = mono_domain_default_alc (mono_domain_get ()); -#endif mono_assembly_request_prepare_byname (&req, MONO_ASMCTX_DEFAULT, alc); req.requesting_assembly = NULL; req.basedir = basedir; @@ -5416,9 +5112,6 @@ mono_create_new_bundled_satellite_assembly (const char *name, const char *cultur void mono_register_bundled_satellite_assemblies (const MonoBundledSatelliteAssembly **assemblies) { -#ifdef ENABLE_NETCORE - satellite_bundles = assemblies; -#endif } #define MONO_DECLSEC_FORMAT_10 0x3C |