2004-08-21 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mono / dis / dump.c
index db25520d2e08796666446831db7151508bbb69cf..d7b965da49970e48be7c7a92ab9a5fb50de3595d 100644 (file)
@@ -318,9 +318,9 @@ dump_table_constant (MonoImage *m)
 
        for (i = 0; i < t->rows; i++){
                guint32 cols [MONO_CONSTANT_SIZE];
-               const char *parent = desc [cols [MONO_CONSTANT_PARENT] & MONO_HASCONSTANT_MASK];
-               
+               char *parent;
                mono_metadata_decode_row (t, i, cols, MONO_CONSTANT_SIZE);
+               parent = desc [cols [MONO_CONSTANT_PARENT] & MONO_HASCONSTANT_MASK];
 
                fprintf (output, "%d: Parent= %s: %d %s\n",
                         i + 1, parent, cols [MONO_CONSTANT_PARENT] >> MONO_HASCONSTANT_BITS, 
@@ -607,17 +607,6 @@ dump_table_implmap (MonoImage *m)
        }
 }
 
-static guint32
-method_dor_to_token (guint32 idx) {
-       switch (idx & MONO_METHODDEFORREF_MASK) {
-       case MONO_METHODDEFORREF_METHODDEF:
-               return MONO_TOKEN_METHOD_DEF | (idx >> MONO_METHODDEFORREF_BITS);
-       case MONO_METHODDEFORREF_METHODREF:
-               return MONO_TOKEN_MEMBER_REF | (idx >> MONO_METHODDEFORREF_BITS);
-       }
-       return -1;
-}
-
 void
 dump_table_methodimpl (MonoImage *m)
 {
@@ -1124,11 +1113,42 @@ dump_stream_blob (MonoImage *m)
        fprintf (output, "Blob heap contents\n");
 
        for (i = 0; i < m->heap_blob.size; i++) {
-               fprintf (output, "%x ", m->heap_blob.data [i]);
-               if (i > 0 && (i % 25) == 0)
-                       fprintf (output, "\n");
+               if (i > 0) {
+                       if ((i % 16) == 0)
+                               fprintf (output, "\n");
+                       else if ((i % 8) == 0)
+                               fprintf (output, "- ");
+               }
+               fprintf (output, "%02x ", m->heap_blob.data [i] & 0xff);
        }
 
        fprintf (output, "\n");
 }
 
+void
+dump_table_standalonesig (MonoImage *m)
+{
+       MonoTableInfo *t = &m->tables [MONO_TABLE_STANDALONESIG];
+       guint32 cols [MONO_STAND_ALONE_SIGNATURE_SIZE];
+       int i;
+       
+       fprintf (output, "Stand alone signature (1..%d)\n", t->rows);
+
+       for (i = 1; i <= t->rows; i++) {
+                char *sig;
+               const char *locals_ptr;
+               int j, bsize;
+
+               mono_metadata_decode_row (t, i - 1, cols, MONO_STAND_ALONE_SIGNATURE_SIZE);
+
+               locals_ptr = mono_metadata_blob_heap (m, cols [MONO_STAND_ALONE_SIGNATURE]);
+               bsize = mono_metadata_decode_blob_size (locals_ptr, &locals_ptr);
+
+               fprintf (output, "%d: blob[0x%x] = ", i, cols [MONO_STAND_ALONE_SIGNATURE]);
+
+               for (j = 0; j < bsize; j++) {
+                       fprintf (output, "%02x ", locals_ptr [j]);
+               }
+               fprintf (output, "\n");
+       }
+}