static void tui_refresh_frame_and_register_information (int registers_too_p) { struct frame_info *fi; CORE_ADDR pc; struct cleanup *old_chain; int frame_info_changed_p; if (!has_stack_frames ()) return; old_chain = make_cleanup_restore_target_terminal (); target_terminal_ours_for_output (); fi = get_selected_frame (NULL); /* Ensure that symbols for this frame are read in. Also, determine the source language of this frame, and switch to it if desired. */ if (get_frame_pc_if_available (fi, &pc)) { struct symtab *s; s = find_pc_line_symtab (pc); /* elz: This if here fixes the problem with the pc not being displayed in the tui asm layout, with no debug symbols. The value of s would be 0 here, and select_source_symtab would abort the command by calling the 'error' function. */ if (s) select_source_symtab (s); } /* Display the frame position (even if there is no symbols or the PC is not known). */ frame_info_changed_p = tui_show_frame_info (fi); /* Refresh the register window if it's visible. */ if (tui_is_window_visible (DATA_WIN) && (frame_info_changed_p || registers_too_p)) { tui_refreshing_registers = 1; tui_check_data_values (fi); tui_refreshing_registers = 0; } do_cleanups (old_chain); }
static void mi_thread_exit (struct thread_info *t, int silent) { struct mi_interp *mi; struct inferior *inf; struct cleanup *old_chain; if (silent) return; inf = find_inferior_ptid (t->ptid); mi = top_level_interpreter_data (); old_chain = make_cleanup_restore_target_terminal (); target_terminal_ours (); fprintf_unfiltered (mi->event_channel, "thread-exited,id=\"%d\",group-id=\"i%d\"", t->num, inf->num); gdb_flush (mi->event_channel); do_cleanups (old_chain); }