/* Function to initialize the content of the execution info window, based upon the input window which is either the source or disassembly window. */ enum tui_status tui_set_exec_info_content (struct tui_win_info *win_info) { enum tui_status ret = TUI_SUCCESS; if (win_info->detail.source_info.execution_info != (struct tui_gen_win_info *) NULL) { struct tui_gen_win_info *exec_info_ptr = win_info->detail.source_info.execution_info; if (exec_info_ptr->content == NULL) exec_info_ptr->content = (void **) tui_alloc_content (win_info->generic.height, exec_info_ptr->type); if (exec_info_ptr->content != NULL) { int i; tui_update_breakpoint_info (win_info, 1); for (i = 0; i < win_info->generic.content_size; i++) { struct tui_win_element *element; struct tui_win_element *src_element; int mode; element = (struct tui_win_element *) exec_info_ptr->content[i]; src_element = (struct tui_win_element *) win_info->generic.content[i]; memset(element->which_element.simple_string, ' ', sizeof(element->which_element.simple_string)); element->which_element.simple_string[TUI_EXECINFO_SIZE - 1] = 0; /* Now update the exec info content based upon the state of each line as indicated by the source content. */ mode = src_element->which_element.source.has_break; if (mode & TUI_BP_HIT) element->which_element.simple_string[TUI_BP_HIT_POS] = (mode & TUI_BP_HARDWARE) ? 'H' : 'B'; else if (mode & (TUI_BP_ENABLED | TUI_BP_DISABLED)) element->which_element.simple_string[TUI_BP_HIT_POS] = (mode & TUI_BP_HARDWARE) ? 'h' : 'b'; if (mode & TUI_BP_ENABLED) element->which_element.simple_string[TUI_BP_BREAK_POS] = '+'; else if (mode & TUI_BP_DISABLED) element->which_element.simple_string[TUI_BP_BREAK_POS] = '-'; if (src_element->which_element.source.is_exec_point) element->which_element.simple_string[TUI_EXEC_POS] = '>'; } exec_info_ptr->content_size = win_info->generic.content_size; } else ret = TUI_FAILURE; } return ret; }
/* Update the execution windows to show the active breakpoints. This is called whenever a breakpoint is inserted, removed or has its state changed. */ void tui_update_all_breakpoint_info (void) { struct tui_list *list = tui_source_windows (); int i; for (i = 0; i < list->count; i++) { struct tui_win_info *win = list->list[i]; if (tui_update_breakpoint_info (win, FALSE)) { tui_update_exec_info (win); } } }
/* Function to display source in the source/asm window. This function shows the source as specified by the horizontal offset. */ void tui_update_source_window_as_is (struct tui_win_info *win_info, struct gdbarch *gdbarch, struct symtab *s, struct tui_line_or_address line_or_addr, int noerror) { enum tui_status ret; if (win_info->generic.type == SRC_WIN) ret = tui_set_source_content (s, line_or_addr.u.line_no, noerror); else ret = tui_set_disassem_content (gdbarch, line_or_addr.u.addr); if (ret == TUI_FAILURE) { tui_clear_source_content (win_info, EMPTY_SOURCE_PROMPT); tui_clear_exec_info_content (win_info); } else { tui_update_breakpoint_info (win_info, 0); tui_show_source_content (win_info); tui_update_exec_info (win_info); if (win_info->generic.type == SRC_WIN) { struct symtab_and_line sal; init_sal (&sal); sal.line = line_or_addr.u.line_no + (win_info->generic.content_size - 2); sal.symtab = s; sal.pspace = SYMTAB_PSPACE (s); set_current_source_symtab_and_line (&sal); /* If the focus was in the asm win, put it in the src win if we don't have a split layout. */ if (tui_win_with_focus () == TUI_DISASM_WIN && tui_current_layout () != SRC_DISASSEM_COMMAND) tui_set_win_focus_to (TUI_SRC_WIN); } } return; }