From patchwork Mon Dec 23 01:48:04 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andrew Burgess X-Patchwork-Id: 37073 Received: (qmail 19127 invoked by alias); 23 Dec 2019 01:48:13 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 19103 invoked by uid 89); 23 Dec 2019 01:48:12 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-25.5 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS autolearn=ham version=3.3.1 spammy=focused X-HELO: mail-wr1-f66.google.com Received: from mail-wr1-f66.google.com (HELO mail-wr1-f66.google.com) (209.85.221.66) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 23 Dec 2019 01:48:09 +0000 Received: by mail-wr1-f66.google.com with SMTP id z7so15010387wrl.13 for ; Sun, 22 Dec 2019 17:48:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=embecosm.com; s=google; h=from:to:cc:subject:date:message-id; bh=z7R9lXlXOaWhN6PBMxWrvcIMAMye0Ri+7REedIViNY0=; b=IbuMjeQTXfkmIBtHB4OzdFjj6/RldZiqLAzc7We9+thutmdeBW54rbYWvEXg1/PtlL /+ASZAA9pnCGrR21Iqf+39I008jC9UQGtgmtHGOsrA9g3CmrshIZr+OvqvvkVMqrq21l Pl+oVKjfCqJWNDjnwDt5IQMBWiEolnOIPiDw+QPhCHS5ZQjRWnY9lvfG2SRWT0QH32hX Acii1E80KSUylM31Ak7ixPb1nglv+K/fwLB6lL0My0JEnsA7wBpTa29jl/Dhf9kMpiec zjbfOuL6efkPvuwomqumw4GMsHGZtwq3EYcYD1ZzKt8wGck0B3BlZlPkVbcYLenh3pfB TboQ== Return-Path: Received: from localhost (host86-186-80-236.range86-186.btcentralplus.com. [86.186.80.236]) by smtp.gmail.com with ESMTPSA id q3sm19251778wrn.33.2019.12.22.17.48.06 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sun, 22 Dec 2019 17:48:07 -0800 (PST) From: Andrew Burgess To: gdb-patches@sourceware.org Cc: Andrew Burgess Subject: [PATCH] gdb: use tui_set_layout not show_layout to fix window focus Date: Mon, 23 Dec 2019 01:48:04 +0000 Message-Id: <20191223014804.23240-1-andrew.burgess@embecosm.com> X-IsSubscribed: yes 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/testsuite/gdb.tui/list.exp b/gdb/testsuite/gdb.tui/list.exp index 08153c695d7..7f241706f63 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 9ab89a87fa4..62d400a97c4 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: