From f2302a34f273611ead5e700e6d9e50e8dfe027f8 Mon Sep 17 00:00:00 2001 From: Andrew Burgess Date: Sun, 22 Dec 2019 23:45:31 +0000 Subject: [PATCH] gdb: use tui_set_layout not show_layout to fix window focus When calling tui_add_win_to_layout, use tui_set_layout not show_layout so that window focus is correctly updated. If the focus is not correctly maintained then GDB can be crashed like this: start tui enable layout asm list SOME_FUNCTION At this point GDB will have "popped up" the source window to display SOME_FUNCTION. Previously no window would have focus at this point, and so if the user now does 'focus next' or 'focus prev', then GDB would crash. Calling tui_set_layout ensures that focus is correctly calculated as the source window is "popped up", and this fixes the issue. gdb/ChangeLog: * tui/tui-layout.c (tui_add_win_to_layout): Use tui_set_layout not show_layout. gdb/testsuite/ChangeLog: * gdb.tui/list.exp: Test 'focus next' after 'list main'. Change-Id: Id0b13f99b0e889261efedfd0adabe82020202f44 --- gdb/ChangeLog | 5 +++++ gdb/testsuite/ChangeLog | 4 ++++ gdb/testsuite/gdb.tui/list.exp | 3 +++ gdb/tui/tui-layout.c | 12 ++++++------ 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 735333fdf65..c24dccaaa97 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2020-01-05 Andrew Burgess + + * tui/tui-layout.c (tui_add_win_to_layout): Use tui_set_layout not + show_layout. + 2020-01-05 Luis Machado * aarch64-linux-nat.c diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 78f9700f257..ba857a46f3b 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2020-01-05 Andrew Burgess + + * gdb.tui/list.exp: Test 'focus next' after 'list main'. + 2020-01-03 Philippe Waroquiers * gdb.base/style.exp: Test that warnings are styled. diff --git a/gdb/testsuite/gdb.tui/list.exp b/gdb/testsuite/gdb.tui/list.exp index a4a9fdabfb6..41cec125d53 100644 --- a/gdb/testsuite/gdb.tui/list.exp +++ b/gdb/testsuite/gdb.tui/list.exp @@ -35,3 +35,6 @@ Term::check_contents "asm window shows main" "$hex
" Term::command "list main" Term::check_contents "list main" "21 *return 0" +# The following 'focus next' must be immediately after 'list main' to +# ensure that GDB has a valid idea of what is currently focused. +Term::command "focus next" diff --git a/gdb/tui/tui-layout.c b/gdb/tui/tui-layout.c index 1e9c5c53e3f..3720d3edc3c 100644 --- a/gdb/tui/tui-layout.c +++ b/gdb/tui/tui-layout.c @@ -201,9 +201,9 @@ tui_add_win_to_layout (enum tui_win_type type) && cur_layout != SRC_DATA_COMMAND) { if (cur_layout == DISASSEM_DATA_COMMAND) - show_layout (SRC_DATA_COMMAND); + tui_set_layout (SRC_DATA_COMMAND); else - show_layout (SRC_COMMAND); + tui_set_layout (SRC_COMMAND); } break; case DISASSEM_WIN: @@ -212,9 +212,9 @@ tui_add_win_to_layout (enum tui_win_type type) && cur_layout != DISASSEM_DATA_COMMAND) { if (cur_layout == SRC_DATA_COMMAND) - show_layout (DISASSEM_DATA_COMMAND); + tui_set_layout (DISASSEM_DATA_COMMAND); else - show_layout (DISASSEM_COMMAND); + tui_set_layout (DISASSEM_COMMAND); } break; case DATA_WIN: @@ -222,9 +222,9 @@ tui_add_win_to_layout (enum tui_win_type type) && cur_layout != DISASSEM_DATA_COMMAND) { if (cur_layout == DISASSEM_COMMAND) - show_layout (DISASSEM_DATA_COMMAND); + tui_set_layout (DISASSEM_DATA_COMMAND); else - show_layout (SRC_DATA_COMMAND); + tui_set_layout (SRC_DATA_COMMAND); } break; default: -- 2.30.2