public inbox for gdb-testers@sourceware.org help / color / mirror / Atom feed
From: gdb-buildbot@sergiodj.net To: gdb-testers@sourceware.org Subject: [binutils-gdb] Always create an execution info window for a source window Date: Thu, 18 Jul 2019 01:11:00 -0000 [thread overview] Message-ID: <098f9ed48e1c94a2624c825ba93d72b163d41196@gdb-build> (raw) *** TEST RESULTS FOR COMMIT 098f9ed48e1c94a2624c825ba93d72b163d41196 *** commit 098f9ed48e1c94a2624c825ba93d72b163d41196 Author: Tom Tromey <tom@tromey.com> AuthorDate: Fri Jun 28 23:54:25 2019 -0600 Commit: Tom Tromey <tom@tromey.com> CommitDate: Wed Jul 17 12:19:12 2019 -0600 Always create an execution info window for a source window A source or disassembly window will always have an "execution info" window (the window along the side that displays breakpoint info), but this isn't immediately clear from the source. As a result, some code has checks to see whether the execution_info is NULL. This changes the source window base class to always instantiate an execution_info window, then updates the rest of the code. It also simplifies window creation in tui-layout.c. gdb/ChangeLog 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-winsource.c (tui_set_exec_info_content): Remove condition. * tui/tui-wingeneral.c (tui_source_window_base::make_visible): Remove condition. * tui/tui-source.c (tui_source_window_base::reset): New method. * tui/tui-layout.c (make_command_window): Don't call init_and_make_win. (make_source_window, make_disasm_window): Don't call make_source_or_disasm_window. (make_data_window): Don't call init_and_make_win. Change calling convention. (show_source_disasm_command, show_data): Simplify. (make_source_or_disasm_window): Remove. (show_source_or_disasm_and_command): Simplify. * tui/tui-data.h (struct tui_gen_win_info) <reset>: Now virtual. (struct tui_source_window_base) <reset>: Likewise. <execution_info>: Remove initializer. * tui/tui-data.c (tui_source_window_base): Initialize execution_info. diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 338c39a043..1c56652d8a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,25 @@ +2019-07-17 Tom Tromey <tom@tromey.com> + + * tui/tui-winsource.c (tui_set_exec_info_content): Remove + condition. + * tui/tui-wingeneral.c (tui_source_window_base::make_visible): + Remove condition. + * tui/tui-source.c (tui_source_window_base::reset): New method. + * tui/tui-layout.c (make_command_window): Don't call + init_and_make_win. + (make_source_window, make_disasm_window): Don't call + make_source_or_disasm_window. + (make_data_window): Don't call init_and_make_win. Change calling + convention. + (show_source_disasm_command, show_data): Simplify. + (make_source_or_disasm_window): Remove. + (show_source_or_disasm_and_command): Simplify. + * tui/tui-data.h (struct tui_gen_win_info) <reset>: Now virtual. + (struct tui_source_window_base) <reset>: Likewise. + <execution_info>: Remove initializer. + * tui/tui-data.c (tui_source_window_base): Initialize + execution_info. + 2019-07-17 Tom Tromey <tom@tromey.com> * tui/tui-layout.c (tui_set_layout): Remove regs_populate diff --git a/gdb/tui/tui-data.c b/gdb/tui/tui-data.c index 396635b779..ee5b3aa3a7 100644 --- a/gdb/tui/tui-data.c +++ b/gdb/tui/tui-data.c @@ -332,7 +332,8 @@ tui_win_info::tui_win_info (enum tui_win_type type) } tui_source_window_base::tui_source_window_base (enum tui_win_type type) - : tui_win_info (type) + : tui_win_info (type), + execution_info (new tui_exec_info_window ()) { gdb_assert (type == SRC_WIN || type == DISASSEM_WIN); start_line_or_addr.loa = LOA_ADDRESS; diff --git a/gdb/tui/tui-data.h b/gdb/tui/tui-data.h index fcbb940728..9bcfe4cfaf 100644 --- a/gdb/tui/tui-data.h +++ b/gdb/tui/tui-data.h @@ -61,9 +61,9 @@ public: /* Reset this window. WIN_TYPE must match the existing type of this window (it is only passed for self-test purposes). The other parameters are used to set the window's size and position. */ - void reset (enum tui_win_type win_type, - int height, int width, - int origin_x, int origin_y); + virtual void reset (enum tui_win_type win_type, + int height, int width, + int origin_x, int origin_y); /* Window handle. */ WINDOW *handle = nullptr; @@ -395,10 +395,14 @@ public: LINE_NO in this source window; false otherwise. */ virtual bool location_matches_p (struct bp_location *loc, int line_no) = 0; + void reset (enum tui_win_type win_type, + int height, int width, + int origin_x, int origin_y) override; + /* Does the locator belong to this window? */ bool m_has_locator = false; /* Execution information window. */ - struct tui_exec_info_window *execution_info = nullptr; + struct tui_exec_info_window *execution_info; /* Used for horizontal scroll. */ int horizontal_offset = 0; struct tui_line_or_address start_line_or_addr; diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c index ac0d01c990..23537b7f49 100644 --- a/gdb/tui/tui-layout.c +++ b/gdb/tui/tui-layout.c @@ -48,12 +48,9 @@ static tui_gen_win_info *init_and_make_win (tui_gen_win_info *, int, int, int, int, enum tui_box); static void show_source_or_disasm_and_command (enum tui_layout_type); -static struct tui_win_info *make_source_or_disasm_window (enum tui_win_type, - int, int); static struct tui_win_info *make_command_window (int, int); static struct tui_win_info *make_source_window (int, int); static struct tui_win_info *make_disasm_window (int, int); -static void make_data_window (struct tui_win_info **, int, int); static void show_source_command (void); static void show_disasm_command (void); static void show_source_disasm_command (void); @@ -522,14 +519,9 @@ prev_layout (void) static struct tui_win_info * make_command_window (int height, int origin_y) { - struct tui_win_info *result - = (struct tui_win_info *) init_and_make_win (NULL, - CMD_WIN, - height, - tui_term_width (), - 0, - origin_y, - DONT_BOX_WINDOW); + struct tui_win_info *result = new tui_cmd_window (); + result->reset (CMD_WIN, height, tui_term_width (), 0, origin_y); + tui_make_window (result, DONT_BOX_WINDOW); return result; } @@ -539,8 +531,11 @@ make_command_window (int height, int origin_y) static struct tui_win_info * make_source_window (int height, int origin_y) { - return make_source_or_disasm_window (SRC_WIN, height, origin_y); -} /* make_source_window */ + tui_win_info *result = new tui_source_window (); + result->reset (SRC_WIN, height, tui_term_width (), 0, origin_y); + result->make_visible (true); + return result; +} /* make_disasm_window(). @@ -548,22 +543,20 @@ make_source_window (int height, int origin_y) static struct tui_win_info * make_disasm_window (int height, int origin_y) { - return make_source_or_disasm_window (DISASSEM_WIN, height, origin_y); -} /* make_disasm_window */ + tui_win_info *result = new tui_disasm_window (); + result->reset (SRC_WIN, height, tui_term_width (), 0, origin_y); + result->make_visible (true); + return result; +} -static void -make_data_window (struct tui_win_info **win_info_ptr, - int height, int origin_y) +static tui_win_info * +make_data_window (int height, int origin_y) { - *win_info_ptr - = (struct tui_win_info *) init_and_make_win (*win_info_ptr, - DATA_WIN, - height, - tui_term_width (), - 0, - origin_y, - BOX_WINDOW); + tui_win_info *result = new tui_data_window (); + result->reset (DATA_WIN, height, tui_term_width (), 0, origin_y); + result->make_visible (true); + return result; } @@ -606,16 +599,10 @@ show_source_disasm_command (void) { TUI_SRC_WIN->reset (TUI_SRC_WIN->type, src_height, - TUI_SRC_WIN->width, - TUI_SRC_WIN->execution_info->width, + tui_term_width (), + 0, 0); - TUI_SRC_WIN->execution_info->reset (EXEC_INFO_WIN, - src_height, - 3, - 0, - 0); tui_make_visible (TUI_SRC_WIN); - tui_make_visible (TUI_SRC_WIN->execution_info); TUI_SRC_WIN->m_has_locator = false; } @@ -645,16 +632,10 @@ show_source_disasm_command (void) TUI_DISASM_WIN->m_has_locator = true; TUI_DISASM_WIN->reset (TUI_DISASM_WIN->type, asm_height, - TUI_DISASM_WIN->width, - TUI_DISASM_WIN->execution_info->width, + tui_term_width (), + 0, src_height - 1); - TUI_DISASM_WIN->execution_info->reset (EXEC_INFO_WIN, - asm_height, - 3, - 0, - src_height - 1); tui_make_visible (TUI_DISASM_WIN); - tui_make_visible (TUI_DISASM_WIN->execution_info); } TUI_SRC_WIN->m_has_locator = false; TUI_DISASM_WIN->m_has_locator = true; @@ -695,7 +676,12 @@ show_data (enum tui_layout_type new_layout) src_height = total_height - data_height; tui_make_all_invisible (); tui_make_invisible (locator); - make_data_window (&tui_win_list[DATA_WIN], data_height, 0); + if (tui_win_list[DATA_WIN] == nullptr) + tui_win_list[DATA_WIN] = make_data_window (data_height, 0); + else + tui_win_list[DATA_WIN]->reset (data_height, tui_term_width (), 0, 0); + tui_win_list[DATA_WIN]->make_visible (true); + if (new_layout == SRC_DATA_COMMAND) win_type = SRC_WIN; else @@ -724,16 +710,10 @@ show_data (enum tui_layout_type new_layout) base = (tui_source_window_base *) tui_win_list[win_type]; tui_win_list[win_type]->reset (tui_win_list[win_type]->type, src_height, - tui_win_list[win_type]->width, - base->execution_info->width, + tui_term_width (), + 0, data_height - 1); - base->execution_info->reset (EXEC_INFO_WIN, - src_height, - 3, - 0, - data_height - 1); tui_make_visible (tui_win_list[win_type]); - tui_make_visible (base->execution_info); locator->reset (LOCATOR_WIN, 2 /* 1 */ , tui_term_width (), @@ -816,34 +796,6 @@ init_and_make_win (tui_gen_win_info *win_info, } -static struct tui_win_info * -make_source_or_disasm_window (enum tui_win_type type, - int height, int origin_y) -{ - struct tui_exec_info_window *execution_info - = (tui_exec_info_window *) init_and_make_win (nullptr, - EXEC_INFO_WIN, - height, - 3, - 0, - origin_y, - DONT_BOX_WINDOW); - - /* Now create the source window. */ - struct tui_source_window_base *result - = ((struct tui_source_window_base *) - init_and_make_win (NULL, - type, - height, - tui_term_width () - execution_info->width, - execution_info->width, - origin_y, - BOX_WINDOW)); - result->execution_info = execution_info; - return result; -} - - /* Show the Source/Command or the Disassem layout. */ static void show_source_or_disasm_and_command (enum tui_layout_type layout_type) @@ -893,16 +845,10 @@ show_source_or_disasm_and_command (enum tui_layout_type layout_type) base->m_has_locator = true; (*win_info_ptr)->reset ((*win_info_ptr)->type, src_height - 1, - (*win_info_ptr)->width, - base->execution_info->width, + tui_term_width (), + 0, 0); - base->execution_info->reset (EXEC_INFO_WIN, - src_height - 1, - 3, - 0, - 0); tui_make_visible (*win_info_ptr); - tui_make_visible (base->execution_info); } base->m_has_locator = true; diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c index f0bac24bfe..873612fecc 100644 --- a/gdb/tui/tui-source.c +++ b/gdb/tui/tui-source.c @@ -291,3 +291,13 @@ tui_source_window::location_matches_p (struct bp_location *loc, int line_no) && filename_cmp (fullname, symtab_to_fullname (loc->symtab)) == 0); } + +void +tui_source_window_base::reset (enum tui_win_type win_type, + int height, int width, + int origin_x, int origin_y) +{ + tui_gen_win_info::reset (win_type, height, width - 3, + origin_x + 3, origin_y); + execution_info->reset (EXEC_INFO_WIN, height, 3, origin_x, origin_y); +} diff --git a/gdb/tui/tui-wingeneral.c b/gdb/tui/tui-wingeneral.c index dc008cd719..3dca621b88 100644 --- a/gdb/tui/tui-wingeneral.c +++ b/gdb/tui/tui-wingeneral.c @@ -201,8 +201,7 @@ tui_make_invisible (struct tui_gen_win_info *win_info) void tui_source_window_base::make_visible (bool visible) { - if (execution_info != nullptr) - execution_info->make_visible (visible); + execution_info->make_visible (visible); tui_win_info::make_visible (visible); } diff --git a/gdb/tui/tui-winsource.c b/gdb/tui/tui-winsource.c index 38d5532912..d9f6425109 100644 --- a/gdb/tui/tui-winsource.c +++ b/gdb/tui/tui-winsource.c @@ -469,39 +469,36 @@ tui_exec_info_window::maybe_allocate_content (int n_elements) void tui_set_exec_info_content (struct tui_source_window_base *win_info) { - if (win_info->execution_info != NULL) - { - tui_exec_info_content *content - = win_info->execution_info->maybe_allocate_content (win_info->height); + tui_exec_info_content *content + = win_info->execution_info->maybe_allocate_content (win_info->height); - tui_update_breakpoint_info (win_info, nullptr, true); - for (int i = 0; i < win_info->content.size (); i++) - { - tui_exec_info_content &element = content[i]; - struct tui_source_element *src_element; - tui_bp_flags mode; - - src_element = &win_info->content[i]; - - memset (element, ' ', sizeof (tui_exec_info_content)); - element[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->break_mode; - if (mode & TUI_BP_HIT) - element[TUI_BP_HIT_POS] = (mode & TUI_BP_HARDWARE) ? 'H' : 'B'; - else if (mode & (TUI_BP_ENABLED | TUI_BP_DISABLED)) - element[TUI_BP_HIT_POS] = (mode & TUI_BP_HARDWARE) ? 'h' : 'b'; - - if (mode & TUI_BP_ENABLED) - element[TUI_BP_BREAK_POS] = '+'; - else if (mode & TUI_BP_DISABLED) - element[TUI_BP_BREAK_POS] = '-'; - - if (src_element->is_exec_point) - element[TUI_EXEC_POS] = '>'; - } + tui_update_breakpoint_info (win_info, nullptr, true); + for (int i = 0; i < win_info->content.size (); i++) + { + tui_exec_info_content &element = content[i]; + struct tui_source_element *src_element; + tui_bp_flags mode; + + src_element = &win_info->content[i]; + + memset (element, ' ', sizeof (tui_exec_info_content)); + element[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->break_mode; + if (mode & TUI_BP_HIT) + element[TUI_BP_HIT_POS] = (mode & TUI_BP_HARDWARE) ? 'H' : 'B'; + else if (mode & (TUI_BP_ENABLED | TUI_BP_DISABLED)) + element[TUI_BP_HIT_POS] = (mode & TUI_BP_HARDWARE) ? 'h' : 'b'; + + if (mode & TUI_BP_ENABLED) + element[TUI_BP_BREAK_POS] = '+'; + else if (mode & TUI_BP_DISABLED) + element[TUI_BP_BREAK_POS] = '-'; + + if (src_element->is_exec_point) + element[TUI_EXEC_POS] = '>'; } }
next reply other threads:[~2019-07-18 1:05 UTC|newest] Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-07-18 1:11 gdb-buildbot [this message] 2019-07-18 1:11 ` *** COMPILATION FAILED *** Failures on Solaris11-sparcv9-m64, branch master *** BREAKAGE *** gdb-buildbot 2019-07-18 1:46 ` *** COMPILATION FAILED *** Failures on Solaris11-amd64-m64, " gdb-buildbot 2019-07-18 2:44 ` *** COMPILATION FAILED *** Failures on NetBSD-x86_64-m64, " gdb-buildbot 2019-07-19 13:03 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-cc-with-index, " gdb-buildbot 2019-07-19 13:06 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-m32, " gdb-buildbot 2019-07-19 13:10 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-m64, " gdb-buildbot 2019-07-19 13:13 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-native-extended-gdbserver-m32, " gdb-buildbot 2019-07-19 13:20 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-native-extended-gdbserver-m64, " gdb-buildbot 2019-07-19 13:25 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-native-gdbserver-m64, " gdb-buildbot 2019-07-19 13:28 ` Failures on Fedora-i686, branch master gdb-buildbot 2019-07-19 14:28 ` *** COMPILATION FAILED *** Failures on Fedora-x86_64-native-gdbserver-m32, branch master *** BREAKAGE *** gdb-buildbot
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=098f9ed48e1c94a2624c825ba93d72b163d41196@gdb-build \ --to=gdb-buildbot@sergiodj.net \ --cc=gdb-testers@sourceware.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).