Author: kumpera
Date: 2008-02-18 12:53:25 -0500 (Mon, 18 Feb 2008)
New Revision: 96086
Modified:
trunk/mono/mono/metadata/ChangeLog
trunk/mono/mono/metadata/verify.c
trunk/mono/mono/metadata/verify.h
Log:
2008-02-18 Rodrigo Kumpera <[EMAIL PROTECTED]>
* verify.h: Added MONO_VERIFY_SKIP_VISIBILITY and struct
MonoVerifyInfoExtended
which contains an extra field to tell the kind of exception that should
be thrown.
* verify.c: Use MonoVerifyInfoExtended instead of MonoVerifyInfo.
Modified: trunk/mono/mono/metadata/ChangeLog
===================================================================
--- trunk/mono/mono/metadata/ChangeLog 2008-02-18 17:45:23 UTC (rev 96085)
+++ trunk/mono/mono/metadata/ChangeLog 2008-02-18 17:53:25 UTC (rev 96086)
@@ -1,3 +1,10 @@
+2008-02-18 Rodrigo Kumpera <[EMAIL PROTECTED]>
+
+ * verify.h: Added MONO_VERIFY_SKIP_VISIBILITY and struct
MonoVerifyInfoExtended
+ which contains an extra field to tell the kind of exception that should
be thrown.
+
+ * verify.c: Use MonoVerifyInfoExtended instead of MonoVerifyInfo.
+
2008-02-17 Raja R Harinath <[EMAIL PROTECTED]>
* loader.c (mono_method_get_param_names): Initialize 'klass' after
Modified: trunk/mono/mono/metadata/verify.c
===================================================================
--- trunk/mono/mono/metadata/verify.c 2008-02-18 17:45:23 UTC (rev 96085)
+++ trunk/mono/mono/metadata/verify.c 2008-02-18 17:53:25 UTC (rev 96086)
@@ -39,9 +39,9 @@
#define ADD_VERIFY_INFO(__ctx, __msg, __status) \
do { \
- MonoVerifyInfo *vinfo = g_new (MonoVerifyInfo, 1); \
- vinfo->status = __status; \
- vinfo->message = ( __msg ); \
+ MonoVerifyInfoExtended *vinfo = g_new (MonoVerifyInfoExtended,
1); \
+ vinfo->info.status = __status; \
+ vinfo->info.message = ( __msg ); \
(__ctx)->list = g_slist_prepend ((__ctx)->list, vinfo); \
} while (0)
@@ -364,12 +364,12 @@
void
mono_free_verify_list (GSList *list)
{
- MonoVerifyInfo *info;
+ MonoVerifyInfoExtended *info;
GSList *tmp;
for (tmp = list; tmp; tmp = tmp->next) {
info = tmp->data;
- g_free (info->message);
+ g_free (info->info.message);
g_free (info);
}
g_slist_free (list);
@@ -377,17 +377,17 @@
#define ADD_ERROR(list,msg) \
do { \
- MonoVerifyInfo *vinfo = g_new (MonoVerifyInfo, 1); \
- vinfo->status = MONO_VERIFY_ERROR; \
- vinfo->message = (msg); \
+ MonoVerifyInfoExtended *vinfo = g_new (MonoVerifyInfoExtended,
1); \
+ vinfo->info.status = MONO_VERIFY_ERROR; \
+ vinfo->info.message = (msg); \
(list) = g_slist_prepend ((list), vinfo); \
} while (0)
#define ADD_WARN(list,code,msg) \
do { \
- MonoVerifyInfo *vinfo = g_new (MonoVerifyInfo, 1); \
- vinfo->status = (code); \
- vinfo->message = (msg); \
+ MonoVerifyInfoExtended *vinfo = g_new (MonoVerifyInfoExtended,
1); \
+ vinfo->info.status = (code); \
+ vinfo->info.message = (msg); \
(list) = g_slist_prepend ((list), vinfo); \
} while (0)
@@ -1012,7 +1012,7 @@
#define ADD_INVALID(list,msg) \
do { \
- MonoVerifyInfo *vinfo = g_new (MonoVerifyInfo, 1); \
+ MonoVerifyInfoExtended *vinfo = g_new (MonoVerifyInfoExtended,
1); \
vinfo->status = MONO_VERIFY_ERROR; \
vinfo->message = (msg); \
(list) = g_slist_prepend ((list), vinfo); \
@@ -3989,6 +3989,8 @@
ctx.num_locals = ctx.header->num_locals;
ctx.locals = ctx.header->locals;
+ if (ctx.num_locals > 0 && !ctx.header->init_locals)
+ CODE_NOT_VERIFIABLE (&ctx, g_strdup_printf ("Method with locals
variable but without init locals set"));
if (ctx.signature->hasthis) {
ctx.params = g_new0 (MonoType*, ctx.max_args);
Modified: trunk/mono/mono/metadata/verify.h
===================================================================
--- trunk/mono/mono/metadata/verify.h 2008-02-18 17:45:23 UTC (rev 96085)
+++ trunk/mono/mono/metadata/verify.h 2008-02-18 17:53:25 UTC (rev 96086)
@@ -4,6 +4,7 @@
#include <mono/metadata/metadata.h>
#include <mono/metadata/image.h>
#include <mono/metadata/loader.h>
+#include "mono/utils/mono-compiler.h"
G_BEGIN_DECLS
@@ -14,6 +15,9 @@
MONO_VERIFY_CLS = 4,
MONO_VERIFY_ALL = 7,
+ /* Status signaling code that is not verifiable.*/
+ MONO_VERIFY_NOT_VERIFIABLE = 8,
+
/*OR it with other flags*/
/* Abort the verification if the code is not verifiable.
@@ -29,8 +33,8 @@
*/
MONO_VERIFY_NON_STRICT = 32,
- /* Status signaling code that is not verifiable.*/
- MONO_VERIFY_NOT_VERIFIABLE = 8
+ /*Skip all visibility related checks*/
+ MONO_VERIFY_SKIP_VISIBILITY = 64,
} MonoVerifyStatus;
typedef struct {
@@ -38,6 +42,12 @@
MonoVerifyStatus status;
} MonoVerifyInfo;
+typedef struct {
+ MonoVerifyInfo info;
+ guint8 exception_type; /*should be one of MONO_EXCEPTION_* */
+} MonoVerifyInfoExtended;
+
+
GSList* mono_image_verify_tables (MonoImage *image, int level);
GSList* mono_method_verify (MonoMethod *method, int level);
void mono_free_verify_list (GSList *list);
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches