+2009-08-18 Rodrigo Kumpera <rkumpera@novell.com>
+
+ * cil-coff.h: Fix METHOD_HEADER_FORMAT_MASK to be 2 bits and
+ remove METHOD_HEADER_TINY_FORMAT1.
+
+ * reflection.c: Remove reference to METHOD_HEADER_TINY_FORMAT1.
+
+ * metadata.c (mono_metadata_parse_mh_full): Kill tiny format1.
+
+ Both spec and MS uses only 2 bits to enumerate the kind of header.
+ So given that 0x6 and 0x2 are equal under a 2 bits mask, tiny format1
+ is superfluous, only used for tiny headers with odd code lengths.
+
+ This change also make sure that mono doesn't wronly interpret bit 2
+ of fat header flags, which is currently reserved.
+
2009-08-18 Rodrigo Kumpera <rkumpera@novell.com>
* metadata.c (do_mono_metadata_parse_type): Do error
/*
* 25.2.1: Method header type values
*/
-#define METHOD_HEADER_FORMAT_MASK 7
+#define METHOD_HEADER_FORMAT_MASK 3
#define METHOD_HEADER_TINY_FORMAT 2
-#define METHOD_HEADER_TINY_FORMAT1 6
#define METHOD_HEADER_FAT_FORMAT 3
/*
mh->code_size = flags >> 2;
mh->code = (unsigned char*)ptr;
return mh;
- case METHOD_HEADER_TINY_FORMAT1:
- mh = mono_image_alloc0 (m, MONO_SIZEOF_METHOD_HEADER);
- ptr++;
- mh->max_stack = 8;
- local_var_sig_tok = 0;
-
- /*
- * The spec claims 3 bits, but the Beta2 is
- * incorrect
- */
- mh->code_size = flags >> 2;
- mh->code = (unsigned char*)ptr;
- return mh;
case METHOD_HEADER_FAT_FORMAT:
fat_flags = read16 (ptr);
ptr += 2;
format = flags & METHOD_HEADER_FORMAT_MASK;
switch (format){
case METHOD_HEADER_TINY_FORMAT:
- case METHOD_HEADER_TINY_FORMAT1:
local_var_sig_token = 0;
break;
case METHOD_HEADER_FAT_FORMAT: