+ debug->producer_name = g_strdup_printf ("Mono JIT compiler version %s", VERSION);
+ debug->next_idx = 100;
+ debug->dirty = TRUE;
+
+ debug->type_hash = g_hash_table_new (NULL, NULL);
+ debug->source_files = g_ptr_array_new ();
+
+ debug->images = g_hash_table_new_full (NULL, NULL, NULL,
+ (GDestroyNotify) mono_debug_close_assembly);
+
+ for (ptr = args; ptr && *ptr; ptr++) {
+ const char *arg = *ptr;
+ gchar *message;
+
+ switch (debug->format) {
+ case MONO_DEBUG_FORMAT_STABS:
+ case MONO_DEBUG_FORMAT_DWARF2:
+ if (!strncmp (arg, "filename=", 9)) {
+ if (debug->filename)
+ debug_arg_warning ("The `filename' argument can be given only once.");
+ debug->filename = g_strdup (arg + 9);
+ continue;
+ } else if (!strncmp (arg, "objfile=", 8)) {
+ if (debug->objfile)
+ debug_arg_warning ("The `objfile' argument can be given only once.");
+ debug->objfile = g_strdup (arg + 8);
+ continue;
+ }
+ break;
+ case MONO_DEBUG_FORMAT_MONO:
+ debug->flags |= MONO_DEBUG_FLAGS_DONT_UPDATE_IL_FILES |
+ MONO_DEBUG_FLAGS_DONT_CREATE_IL_FILES;
+ break;
+ default:
+ break;
+ }
+
+ if (debug->format != MONO_DEBUG_FORMAT_MONO) {
+ if (!strcmp (arg, "dont_assemble")) {
+ debug->flags |= MONO_DEBUG_FLAGS_DONT_ASSEMBLE;
+ continue;
+ } else if (!strcmp (arg, "update_on_exit")) {
+ debug->flags |= MONO_DEBUG_FLAGS_UPDATE_ON_EXIT;
+ continue;
+ } else if (!strcmp (arg, "install_il_files")) {
+ debug->flags |= MONO_DEBUG_FLAGS_INSTALL_IL_FILES;
+ continue;
+ } else if (!strcmp (arg, "dont_update_il_files")) {
+ debug->flags |= MONO_DEBUG_FLAGS_DONT_UPDATE_IL_FILES;
+ continue;
+ } else if (!strcmp (arg, "dont_create_il_files")) {
+ debug->flags |= MONO_DEBUG_FLAGS_DONT_CREATE_IL_FILES;
+ continue;
+ }
+ } else {
+ if (!strcmp (arg, "internal_mono_debugger")) {
+ debug->flags |= MONO_DEBUG_FLAGS_MONO_DEBUGGER;
+ initialize_debugger_support ();
+ continue;
+ }
+ }
+
+ message = g_strdup_printf ("Unknown argument `%s'.", arg);
+ debug_arg_warning (message);
+ g_free (message);
+ }
+
+ switch (debug->format) {
+ case MONO_DEBUG_FORMAT_STABS:
+ if (!debug->filename)
+ debug->filename = g_strdup_printf ("%s-stabs.s", g_basename (debug->name));
+ if (!debug->objfile)
+ debug->objfile = g_strdup_printf ("%s.o", g_basename (debug->name));
+ break;
+ case MONO_DEBUG_FORMAT_DWARF2:
+ if (!debug->filename)
+ debug->filename = g_strdup_printf ("%s-dwarf.s", g_basename (debug->name));
+ if (!debug->objfile)
+ debug->objfile = g_strdup_printf ("%s.o", g_basename (debug->name));
+ break;
+ case MONO_DEBUG_FORMAT_MONO:
+ break;
+ default:
+ g_assert_not_reached ();
+ }
+
+ mono_debug_handle = debug;
+ mono_install_assembly_load_hook (mono_debug_add_assembly, NULL);
+
+ mono_debug_open_image (mono_debug_handle, assembly->image);
+ mono_debug_open_image (mono_debug_handle, mono_defaults.corlib);
+
+ mono_debug_add_type (mono_defaults.object_class);
+ mono_debug_add_type (mono_defaults.object_class);
+ mono_debug_add_type (mono_defaults.byte_class);
+ mono_debug_add_type (mono_defaults.void_class);
+ mono_debug_add_type (mono_defaults.boolean_class);
+ mono_debug_add_type (mono_defaults.sbyte_class);
+ mono_debug_add_type (mono_defaults.int16_class);
+ mono_debug_add_type (mono_defaults.uint16_class);
+ mono_debug_add_type (mono_defaults.int32_class);
+ mono_debug_add_type (mono_defaults.uint32_class);
+ mono_debug_add_type (mono_defaults.int_class);
+ mono_debug_add_type (mono_defaults.uint_class);
+ mono_debug_add_type (mono_defaults.int64_class);
+ mono_debug_add_type (mono_defaults.uint64_class);
+ mono_debug_add_type (mono_defaults.single_class);
+ mono_debug_add_type (mono_defaults.double_class);
+ mono_debug_add_type (mono_defaults.char_class);
+ mono_debug_add_type (mono_defaults.string_class);
+ mono_debug_add_type (mono_defaults.enum_class);
+ mono_debug_add_type (mono_defaults.array_class);
+ mono_debug_add_type (mono_defaults.multicastdelegate_class);
+ mono_debug_add_type (mono_defaults.asyncresult_class);
+ mono_debug_add_type (mono_defaults.waithandle_class);
+ mono_debug_add_type (mono_defaults.typehandle_class);
+ mono_debug_add_type (mono_defaults.fieldhandle_class);
+ mono_debug_add_type (mono_defaults.methodhandle_class);
+ mono_debug_add_type (mono_defaults.monotype_class);
+ mono_debug_add_type (mono_defaults.exception_class);
+ mono_debug_add_type (mono_defaults.threadabortexception_class);
+ mono_debug_add_type (mono_defaults.thread_class);
+ mono_debug_add_type (mono_defaults.transparent_proxy_class);
+ mono_debug_add_type (mono_defaults.real_proxy_class);
+ mono_debug_add_type (mono_defaults.mono_method_message_class);
+ mono_debug_add_type (mono_defaults.appdomain_class);
+ mono_debug_add_type (mono_defaults.field_info_class);
+ mono_debug_add_type (mono_defaults.stringbuilder_class);
+ mono_debug_add_type (mono_defaults.math_class);
+ mono_debug_add_type (mono_defaults.stack_frame_class);
+ mono_debug_add_type (mono_defaults.stack_trace_class);
+ mono_debug_add_type (mono_defaults.marshal_class);
+ mono_debug_add_type (mono_defaults.iserializeable_class);
+ mono_debug_add_type (mono_defaults.serializationinfo_class);
+ mono_debug_add_type (mono_defaults.streamingcontext_class);
+