Author: jbevain
Date: 2007-11-20 16:06:11 -0500 (Tue, 20 Nov 2007)
New Revision: 90035
Modified:
trunk/mono/mono/dis/ChangeLog
trunk/mono/mono/dis/main.c
Log:
2007-11-20 Jb Evain <[EMAIL PROTECTED]>
* main.c: support for uninitialized .data.
Modified: trunk/mono/mono/dis/ChangeLog
===================================================================
--- trunk/mono/mono/dis/ChangeLog 2007-11-20 20:58:30 UTC (rev 90034)
+++ trunk/mono/mono/dis/ChangeLog 2007-11-20 21:06:11 UTC (rev 90035)
@@ -1,3 +1,7 @@
+2007-11-20 Jb Evain <[EMAIL PROTECTED]>
+
+ * main.c: support for uninitialized .data.
+
2007-11-06 Jb Evain <[EMAIL PROTECTED]>
* main.c: Don't crash when a referenced assembly cannot be
Modified: trunk/mono/mono/dis/main.c
===================================================================
--- trunk/mono/mono/dis/main.c 2007-11-20 20:58:30 UTC (rev 90034)
+++ trunk/mono/mono/dis/main.c 2007-11-20 21:06:11 UTC (rev 90035)
@@ -717,7 +717,7 @@
}
mh = mono_metadata_parse_mh_full (m, container, ptr);
- if ((entry_point = mono_image_get_entry_point (m))){
+ if ((entry_point = mono_image_get_entry_point (m)) &&
mono_metadata_token_index (entry_point)){
loc = mono_metadata_locate_token (m, entry_point);
if (rva == read32 (loc))
fprintf (output, "\t.entrypoint\n");
@@ -1386,6 +1386,23 @@
}
}
+static char *
+get_uninitialized_data_type (guint32 size)
+{
+ switch (size) {
+ case 1:
+ return "int8";
+ case 2:
+ return "int16";
+ case 4:
+ return "int32";
+ case 8:
+ return "int64";
+ default:
+ g_error ("get_uninitialized_data_type for size: %d\n", size);
+ }
+}
+
/**
* dis_data:
* @m: metadata context
@@ -1414,13 +1431,18 @@
type = mono_metadata_parse_field_type (m, 0, sig + 1, &sig);
mono_class_init (mono_class_from_mono_type (type));
size = mono_type_size (type, &align);
- fprintf (output, ".data D_%08x = bytearray (", cols
[MONO_FIELD_RVA_RVA]);
- for (b = 0; b < size; ++b) {
- if (!(b % 16))
- fprintf (output, "\n\t");
- fprintf (output, " %02X", rva [b] & 0xff);
- }
- fprintf (output, ") // size: %d\n", size);
+
+ if (rva) {
+ fprintf (output, ".data D_%08x = bytearray (", cols
[MONO_FIELD_RVA_RVA]);
+ for (b = 0; b < size; ++b) {
+ if (!(b % 16))
+ fprintf (output, "\n\t");
+ fprintf (output, " %02X", rva [b] & 0xff);
+ }
+ fprintf (output, ") // size: %d\n", size);
+ } else
+ fprintf (output, ".data D_%08x = %s [%d]\n",
+ cols [MONO_FIELD_RVA_RVA],
get_uninitialized_data_type (size), size);
}
}
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches