X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fdis%2Fmain.c;h=e8538ea31be80ed83721bfaf8bf0e5fd95bb492c;hb=40ca6977af0cbb753180c9f0b567e5c5190e0ce5;hp=e1fa7a16b9874cf11cd3a0fba5280d74a287e2ed;hpb=6733010353a6024a2b437a6cd5c5c30ae6e99218;p=mono.git diff --git a/mono/dis/main.c b/mono/dis/main.c index e1fa7a16b98..e8538ea31be 100644 --- a/mono/dis/main.c +++ b/mono/dis/main.c @@ -301,7 +301,7 @@ dis_directive_moduleref (MonoImage *m) static void dis_nt_header (MonoImage *m) { - MonoCLIImageInfo *image_info = m->image_info; + MonoCLIImageInfo *image_info = (MonoCLIImageInfo *)m->image_info; if (image_info && image_info->cli_header.nt.pe_stack_reserve != 0x100000) fprintf (output, ".stackreserve 0x%x\n", image_info->cli_header.nt.pe_stack_reserve); } @@ -493,7 +493,7 @@ dis_field_list (MonoImage *m, guint32 start, guint32 end, MonoGenericContainer * if ((crow = mono_metadata_get_constant_index (m, MONO_TOKEN_FIELD_DEF | (i+1), 0))) { mono_metadata_decode_row (&m->tables [MONO_TABLE_CONSTANT], crow-1, const_cols, MONO_CONSTANT_SIZE); - lit = get_constant (m, const_cols [MONO_CONSTANT_TYPE], const_cols [MONO_CONSTANT_VALUE]); + lit = get_constant (m, (MonoTypeEnum)const_cols [MONO_CONSTANT_TYPE], const_cols [MONO_CONSTANT_VALUE]); } else { lit = g_strdup ("not found"); } @@ -626,16 +626,14 @@ dis_locals (MonoImage *m, MonoMethodHeader *mh, const char *ptr) unsigned char flags = *(const unsigned char *) ptr; unsigned char format = flags & METHOD_HEADER_FORMAT_MASK; guint16 fat_flags; - guint32 local_var_sig_tok, max_stack, code_size, init_locals; - int hsize; + guint32 local_var_sig_tok, init_locals; g_assert (format == METHOD_HEADER_FAT_FORMAT); fat_flags = read16 (ptr); ptr += 2; - hsize = (fat_flags >> 12) & 0xf; - max_stack = read16 (ptr); + /* max_stack = read16 (ptr); */ ptr += 2; - code_size = read32 (ptr); + /* code_size = read32 (ptr); */ ptr += 4; local_var_sig_tok = read32 (ptr); ptr += 4; @@ -802,7 +800,7 @@ dump_cattrs_for_method_params (MonoImage *m, guint32 midx, MonoMethodSignature * if ((crow = mono_metadata_get_constant_index(m, MONO_TOKEN_PARAM_DEF | i, 0))) { guint32 const_cols [MONO_CONSTANT_SIZE]; mono_metadata_decode_row( &m->tables[MONO_TABLE_CONSTANT], crow-1, const_cols, MONO_CONSTANT_SIZE); - lit = get_constant(m, const_cols [MONO_CONSTANT_TYPE], const_cols [MONO_CONSTANT_VALUE]); + lit = get_constant (m, (MonoTypeEnum)const_cols [MONO_CONSTANT_TYPE], const_cols [MONO_CONSTANT_VALUE]); } else { lit = g_strdup ("not found"); @@ -960,6 +958,7 @@ dis_property_methods (MonoImage *m, guint32 prop, MonoGenericContainer *containe static char* dis_property_signature (MonoImage *m, guint32 prop_idx, MonoGenericContainer *container) { + MonoError error; MonoTableInfo *propt = &m->tables [MONO_TABLE_PROPERTY]; const char *ptr; guint32 pcount, i; @@ -982,8 +981,13 @@ dis_property_signature (MonoImage *m, guint32 prop_idx, MonoGenericContainer *co g_string_append (res, "instance "); ptr++; pcount = mono_metadata_decode_value (ptr, &ptr); - type = mono_metadata_parse_type_full (m, container, MONO_PARSE_TYPE, 0, ptr, &ptr); - blurb = dis_stringify_type (m, type, TRUE); + type = mono_metadata_parse_type_checked (m, container, 0, FALSE, ptr, &ptr, &error); + if (type) { + blurb = dis_stringify_type (m, type, TRUE); + } else { + blurb = g_strdup_printf ("Invalid type due to %s", mono_error_get_message (&error)); + mono_error_cleanup (&error); + } if (prop_flags & 0x0200) g_string_append (res, "specialname "); if (prop_flags & 0x0400) @@ -995,8 +999,14 @@ dis_property_signature (MonoImage *m, guint32 prop_idx, MonoGenericContainer *co for (i = 0; i < pcount; i++) { if (i) g_string_append (res, ", "); - param = mono_metadata_parse_type_full (m, container, MONO_PARSE_PARAM, 0, ptr, &ptr); - blurb = dis_stringify_param (m, param); + param = mono_metadata_parse_type_checked (m, container, 0, FALSE, ptr, &ptr, &error); + if (type) { + blurb = dis_stringify_param (m, param); + } else { + blurb = g_strdup_printf ("Invalid type due to %s", mono_error_get_message (&error)); + mono_error_cleanup (&error); + } + g_string_append (res, blurb); g_free (blurb); } @@ -1602,15 +1612,14 @@ disassemble_file (const char *file) { MonoImageOpenStatus status; MonoImage *img; - MonoAssembly *assembly; - img = mono_image_open (file, &status); if (!img) { fprintf (stderr, "Error while trying to process %s\n", file); return; } else { - assembly = mono_assembly_load_from_full (img, file, &status, FALSE); + /* FIXME: is this call necessary? */ + mono_assembly_load_from_full (img, file, &status, FALSE); } setup_filter (img); @@ -1667,7 +1676,7 @@ setup_filter (MonoImage *image) const char *name = mono_image_get_name (image); for (item = filter_list; item; item = item->next) { - ifilter = item->data; + ifilter = (ImageFilter *)item->data; if (strcmp (ifilter->name, name) == 0) { cur_filter = ifilter; return; @@ -1679,8 +1688,8 @@ setup_filter (MonoImage *image) static int int_cmp (const void *e1, const void *e2) { - const int *i1 = e1; - const int *i2 = e2; + const int *i1 = (const int *)e1; + const int *i2 = (const int *)e2; return *i1 - *i2; } @@ -1723,7 +1732,7 @@ add_filter (const char *name) GList *item; for (item = filter_list; item; item = item->next) { - ifilter = item->data; + ifilter = (ImageFilter *)item->data; if (strcmp (ifilter->name, name) == 0) return ifilter; } @@ -1739,10 +1748,10 @@ add_item (TableFilter *tf, int val) if (tf->count >= tf->size) { if (!tf->size) { tf->size = 8; - tf->elems = g_malloc (sizeof (int) * tf->size); + tf->elems = (int *)g_malloc (sizeof (int) * tf->size); } else { tf->size *= 2; - tf->elems = g_realloc (tf->elems, sizeof (int) * tf->size); + tf->elems = (int *)g_realloc (tf->elems, sizeof (int) * tf->size); } } tf->elems [tf->count++] = val; @@ -1755,7 +1764,7 @@ sort_filter_elems (void) GList *item; for (item = filter_list; item; item = item->next) { - ifilter = item->data; + ifilter = (ImageFilter *)item->data; qsort (ifilter->types.elems, ifilter->types.count, sizeof (int), int_cmp); qsort (ifilter->fields.elems, ifilter->fields.count, sizeof (int), int_cmp); qsort (ifilter->methods.elems, ifilter->methods.count, sizeof (int), int_cmp); @@ -1916,7 +1925,7 @@ monodis_assembly_search_hook (MonoAssemblyName *aname, gpointer user_data) GList *tmp; for (tmp = loaded_assemblies; tmp; tmp = tmp->next) { - MonoAssembly *ass = tmp->data; + MonoAssembly *ass = (MonoAssembly *)tmp->data; if (mono_assembly_names_equal (aname, &ass->aname)) return ass; } @@ -2003,7 +2012,7 @@ main (int argc, char *argv []) * If we just have one file, use the corlib version it requires. */ if (!input_files->next) { - char *filename = input_files->data; + char *filename = (char *)input_files->data; mono_init_from_assembly (argv [0], filename); @@ -2014,7 +2023,7 @@ main (int argc, char *argv []) mono_init (argv [0]); for (l = input_files; l; l = l->next) - disassemble_file (l->data); + disassemble_file ((const char *)l->data); } return 0;