2010-07-10 Rodrigo Kumpera <rkumpera@novell.com>
[mono.git] / mono / metadata / image.c
index 987c4b50985fb068c06081ae525db1823a27ac81..2cc90233f763338ea436238aec3274f134bdb605 100644 (file)
@@ -36,6 +36,7 @@
 #include <mono/metadata/object-internals.h>
 #include <mono/metadata/security-core-clr.h>
 #include <mono/metadata/verify-internals.h>
+#include <mono/metadata/verify.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #ifdef HAVE_UNISTD_H
@@ -502,10 +503,6 @@ mono_image_check_for_module_cctor (MonoImage *image)
        MonoTableInfo *t, *mt;
        t = &image->tables [MONO_TABLE_TYPEDEF];
        mt = &image->tables [MONO_TABLE_METHOD];
-       if (mono_framework_version () == 1) {
-               image->checked_module_cctor = TRUE;
-               return;
-       }
        if (image->dynamic) {
                /* FIXME: */
                image->checked_module_cctor = TRUE;
@@ -914,6 +911,7 @@ do_mono_image_load (MonoImage *image, MonoImageOpenStatus *status,
 {
        MonoCLIImageInfo *iinfo;
        MonoDotNetHeader *header;
+       GSList *errors = NULL;
 
        mono_profiler_module_event (image, MONO_PROFILE_START_LOAD);
 
@@ -928,7 +926,7 @@ do_mono_image_load (MonoImage *image, MonoImageOpenStatus *status,
        if (care_about_pecoff == FALSE)
                goto done;
 
-       if (!mono_verifier_verify_pe_data (image, NULL))
+       if (!mono_verifier_verify_pe_data (image, &errors))
                goto invalid_image;
 
        if (!mono_image_load_pe_data (image))
@@ -938,13 +936,13 @@ do_mono_image_load (MonoImage *image, MonoImageOpenStatus *status,
                goto done;
        }
 
-       if (!mono_verifier_verify_cli_data (image, NULL))
+       if (!mono_verifier_verify_cli_data (image, &errors))
                goto invalid_image;
 
        if (!mono_image_load_cli_data (image))
                goto invalid_image;
 
-       if (!mono_verifier_verify_table_data (image, NULL))
+       if (!mono_verifier_verify_table_data (image, &errors))
                goto invalid_image;
 
        mono_image_load_names (image);
@@ -959,9 +957,14 @@ done:
        return image;
 
 invalid_image:
+       if (errors) {
+               MonoVerifyInfo *info = errors->data;
+               g_warning ("Could not load image %s due to %s", image->name, info->message);
+               mono_free_verify_list (errors);
+       }
        mono_profiler_module_loaded (image, MONO_PROFILE_FAILED);
        mono_image_close (image);
-               return NULL;
+       return NULL;
 }
 
 static MonoImage *