2006-10-05 Zoltan Varga <vargaz@gmail.com>
authorZoltan Varga <vargaz@gmail.com>
Thu, 5 Oct 2006 14:54:02 +0000 (14:54 -0000)
committerZoltan Varga <vargaz@gmail.com>
Thu, 5 Oct 2006 14:54:02 +0000 (14:54 -0000)
* dump.c main.c: Allow dumping the *Ptr tables.

svn path=/trunk/mono/; revision=66292

mono/dis/ChangeLog
mono/dis/dump.c
mono/dis/dump.h
mono/dis/main.c

index 7cce777e10798ecd620f1b914ca49364e9bcdcbd..46efc0e4ef54332001b910fe27e9dfc00f912133 100644 (file)
@@ -1,3 +1,7 @@
+2006-10-05  Zoltan Varga  <vargaz@gmail.com>
+
+       * dump.c main.c: Allow dumping the *Ptr tables.
+
 2006-09-12  Zoltan Varga  <vargaz@gmail.com>
 
        * declsec.c: Fix windows VC build.
index 37e2bc9c62519b8e8c0d204864fe47c5e3a1dbb0..d2911edcb270b1a732cb0af15a75fc8d5fcdf33b 100644 (file)
@@ -592,7 +592,7 @@ dump_table_method (MonoImage *m)
                method_container = mono_metadata_load_generic_params (m, MONO_TOKEN_METHOD_DEF | i, type_container);
                if (method_container)
                        mono_metadata_load_generic_param_constraints (m, MONO_TOKEN_METHOD_DEF | i, method_container);
-               mono_metadata_decode_row (t, i - 1, cols, MONO_METHOD_SIZE);
+               mono_metadata_decode_table_row (m, MONO_TABLE_METHOD, i - 1, cols, MONO_METHOD_SIZE);
                sigblob = mono_metadata_blob_heap (m, cols [MONO_METHOD_SIGNATURE]);
                mono_metadata_decode_blob_size (sigblob, &sigblob);
                method = mono_metadata_parse_method_signature_full (m, method_container ? method_container : type_container, i, sigblob, &sigblob);
@@ -1234,3 +1234,43 @@ dump_table_standalonesig (MonoImage *m)
                fprintf (output, "\n");
        }
 }
+
+static void
+dump_table_ptr (MonoImage *m, int table, const char *name)
+{
+       MonoTableInfo *t = &m->tables [table];
+       guint32 cols [1];
+       int i;
+       
+       fprintf (output, "%s (1..%d)\n", name, t->rows);
+
+       for (i = 1; i <= t->rows; i++) {
+               mono_metadata_decode_row (t, i - 1, cols, 1);
+
+               fprintf (output, "%d: %d\n", i, cols [0]);
+       }
+}
+
+void
+dump_table_methodptr (MonoImage *m)
+{
+       dump_table_ptr (m, MONO_TABLE_METHOD_POINTER, "Method Ptr");
+}
+
+void
+dump_table_fieldptr (MonoImage *m)
+{
+       dump_table_ptr (m, MONO_TABLE_FIELD_POINTER, "Field Ptr");
+}
+
+void
+dump_table_paramptr (MonoImage *m)
+{
+       dump_table_ptr (m, MONO_TABLE_PARAM_POINTER, "Param Ptr");
+}
+
+void
+dump_table_eventptr (MonoImage *m)
+{
+       dump_table_ptr (m, MONO_TABLE_EVENT_POINTER, "Event Ptr");
+}
index 44f95be3f7a8a8fe3e04ae4ac18aeea7add7456f..3a1f0eb175ac84e03b8dd15dc35b8fb2c37d1d29 100644 (file)
@@ -31,4 +31,9 @@ void dump_table_methodspec   (MonoImage *m);
 void dump_table_parconstraint(MonoImage *m);
 void dump_table_implmap      (MonoImage *m);
 void dump_table_standalonesig (MonoImage *m);
+void dump_table_methodptr    (MonoImage *m);
+void dump_table_fieldptr     (MonoImage *m);
+void dump_table_paramptr     (MonoImage *m);
+void dump_table_eventptr     (MonoImage *m);
 void dump_stream_blob        (MonoImage *m);
+
index d74f0fb59820ae7e5ccd6b74fd0870d88f11cdcb..d2ff492dcdca07f5bd4d3b8f0b8c3672767061ec 100644 (file)
@@ -1445,6 +1445,10 @@ struct {
        { "--typespec",    MONO_TABLE_TYPESPEC,         dump_table_typespec },
        { "--implmap",     MONO_TABLE_IMPLMAP,          dump_table_implmap },
        { "--standalonesig", MONO_TABLE_STANDALONESIG,  dump_table_standalonesig },
+       { "--methodptr", MONO_TABLE_METHOD_POINTER,  dump_table_methodptr },
+       { "--fieldptr", MONO_TABLE_FIELD_POINTER,  dump_table_fieldptr },
+       { "--paramptr", MONO_TABLE_PARAM_POINTER,  dump_table_paramptr },
+       { "--eventptr", MONO_TABLE_EVENT_POINTER,  dump_table_eventptr },
        { "--blob",        0,                   dump_stream_blob },
        { NULL, -1, }
 };