From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id 6H6sFF4YRmJQHAAAWB0awg (envelope-from ) for ; Thu, 31 Mar 2022 17:08:46 -0400 Received: by simark.ca (Postfix, from userid 112) id 5211E1F163; Thu, 31 Mar 2022 17:08:46 -0400 (EDT) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-3.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id B263A1E150 for ; Thu, 31 Mar 2022 17:08:45 -0400 (EDT) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 6B4B93898C72 for ; Thu, 31 Mar 2022 21:08:45 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 6B4B93898C72 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1648760925; bh=qWXiTSl5IZdvnVnHWYV0cqGPFIxoTdNUCwwGTRGHJrM=; h=To:Subject:Date:In-Reply-To:References:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=wPFHKq8oog21wc8OHctMZ2u8GFteoWfutQ+po5CbnYBcAJJW92VcFjciaYbCIJOM7 0NssppvJys9y4wRiKz0EBtadalVYXvUmqdchBITin0WINbHLm7GpIjVD3o9HM2ePZo vnNWx0kaHcOWqAM+Vn4nUReO0PbXdJCZkrHXQbbM= Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id BBA32388E816 for ; Thu, 31 Mar 2022 21:04:46 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BBA32388E816 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-653-d6EPqoPnPC23_rbOKHH1kg-1; Thu, 31 Mar 2022 17:04:44 -0400 X-MC-Unique: d6EPqoPnPC23_rbOKHH1kg-1 Received: by mail-wm1-f71.google.com with SMTP id v62-20020a1cac41000000b0038cfe6edf3fso1870609wme.5 for ; Thu, 31 Mar 2022 14:04:44 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=qWXiTSl5IZdvnVnHWYV0cqGPFIxoTdNUCwwGTRGHJrM=; b=18hrQ58PKryK0q5IdW67l7XINg1AkI2qhtQFFgHbCwOEKGo1C3lI+6UVdQIEPJ2eiw RJNXzm9lGrQ3ierzu1cevg6nkc7ZLjfS75TLHk423pea9+vyu4qskdZUseJqJoWFHgwT MW7byecI0qMbZ9LIQ/60mhfO6a+hSRSXXGw/a/a87i3cphp2JaG0Zb82M18y9jk1Z/bu wyaSEH695NsqgugwF94DlF7bgXlW877rgFbD2nnjXFNJCCj3wiHkLEsD2tFG0OfShmwe FtIK85DDKIFzscj2sWBhlLr9y8GrW4969zh3Mp8KqThj/Le99mxdeqY50O1GBM5AcfOI GcqQ== X-Gm-Message-State: AOAM5327b89SxkbYN8+yp5E4fuMyoEZRXZvHVebX5+74benSYaDh2+Tx LU9lVdw8sbPistc9deIqeCcl79q9xIEhUkDpoLott975fx8fqAuEG1YcsPH8fqnFi+D17nBBUtb If800l+1rf/L9zgbAe/rr06idO/oUrncdghpVtrnHXF5Nry91NxhKUKYgrYNO9/5qv6ZCx4Q7Kw == X-Received: by 2002:a05:6000:1681:b0:205:d419:1a92 with SMTP id y1-20020a056000168100b00205d4191a92mr5644145wrd.96.1648760682180; Thu, 31 Mar 2022 14:04:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy7vmKJWDJmbZ6jbG20fUr9+pJLuU8nh1dYUrFsOgE+MeYmH1Xkhhi6VThV9kCGgGdmFiOMwA== X-Received: by 2002:a05:6000:1681:b0:205:d419:1a92 with SMTP id y1-20020a056000168100b00205d4191a92mr5644134wrd.96.1648760681869; Thu, 31 Mar 2022 14:04:41 -0700 (PDT) Received: from localhost (host86-169-131-113.range86-169.btcentralplus.com. [86.169.131.113]) by smtp.gmail.com with ESMTPSA id i2-20020a05600c354200b0038cb422e3fesm8611997wmq.32.2022.03.31.14.04.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 31 Mar 2022 14:04:41 -0700 (PDT) To: gdb-patches@sourceware.org Subject: [PATCH 08/16] gdb/tui: fix 'tui reg next/prev' command when data window is hidden Date: Thu, 31 Mar 2022 22:04:14 +0100 Message-Id: <8a5c11bf303992a3223ae30a820c195a5ab5239b.1648760270.git.aburgess@redhat.com> X-Mailer: git-send-email 2.25.4 In-Reply-To: References: MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="US-ASCII"; x-default=true X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Andrew Burgess via Gdb-patches Reply-To: Andrew Burgess Cc: Andrew Burgess Errors-To: gdb-patches-bounces+public-inbox=simark.ca@sourceware.org Sender: "Gdb-patches" Start GDB like: $ gdb -q executable (gdb) start (gdb) layout src ... tui windows are now displayed ... (gdb) tui reg next At this point the data (register) window should be displayed, but will contain the message 'Register Values Unavailable', and at the console you'll see the message "unknown register group 'next'". The same happens with 'tui reg prev' (but the error message is slightly different). At this point you can continue to use 'tui reg next' and/or 'tui reg prev' and you'll keep getting the error message. The problem is that when the data (register) window is first displayed, it's current register group is nullptr. As a consequence tui_reg_next and tui_reg_prev (tui/tui-regs.c) will always just return nullptr, which triggers an error in tui_reg_command. In this commit I change tui_reg_next and tui_reg_prev so that they instead return the first and last register group respectively if the current register group is nullptr. So, after this, using 'tui reg next' will (in the above case) show the first register group, while 'tui reg prev' will display the last register group. --- gdb/testsuite/gdb.tui/regs.exp | 26 ++++++++++++++++++++++++++ gdb/tui/tui-regs.c | 34 ++++++++++++++-------------------- 2 files changed, 40 insertions(+), 20 deletions(-) diff --git a/gdb/testsuite/gdb.tui/regs.exp b/gdb/testsuite/gdb.tui/regs.exp index 178eba03f19..833f6762d39 100644 --- a/gdb/testsuite/gdb.tui/regs.exp +++ b/gdb/testsuite/gdb.tui/regs.exp @@ -44,3 +44,29 @@ Term::check_box "source box in regs layout" 0 6 80 9 set text [Term::get_line 1] # Just check for any register window content at all. Term::check_contents "any register contents" "\\|.*\[^ \].*\\|" + + +# Check that we can successfully cause the register window to appear +# using the 'tui reg next' and 'tui reg prev' commands. +foreach_with_prefix cmd { next prev } { + Term::clean_restart 24 80 $testfile + + if {![runto_main]} { + perror "test suppressed" + return + } + + if {![Term::enter_tui]} { + unsupported "TUI not supported" + return + } + + Term::command "tui reg ${cmd}" + Term::check_box "register box" 0 0 80 7 + Term::check_box "source box in regs layout" 0 6 80 9 + Term::check_region_contents "check register group title" \ + 0 0 80 1 "Register group: " + set contents [Term::get_region 0 15 80 8 "\r\n"] + gdb_assert {![regexp -- "unknown register group '${cmd}'" $contents]} \ + "check register group is known" +} diff --git a/gdb/tui/tui-regs.c b/gdb/tui/tui-regs.c index 75ffa9babbf..b968947fa1c 100644 --- a/gdb/tui/tui-regs.c +++ b/gdb/tui/tui-regs.c @@ -515,38 +515,32 @@ tui_data_item_window::rerender (WINDOW *handle, int field_width) } /* Helper for "tui reg next", wraps a call to REGGROUP_NEXT, but adds wrap - around behaviour. Returns the next register group, or NULL if the - register window is not currently being displayed. */ + around behaviour. Will never return nullptr. If CURRENT_GROUP is + nullptr (e.g. if the tui register window has only just been displayed + and has no current group selected), then the first register group will + be returned. */ static const reggroup * tui_reg_next (const reggroup *current_group, struct gdbarch *gdbarch) { - const reggroup *group = NULL; - - if (current_group != NULL) - { - group = reggroup_next (gdbarch, current_group); - if (group == NULL) - group = reggroup_next (gdbarch, NULL); - } + const reggroup *group = reggroup_next (gdbarch, current_group); + if (group == NULL) + group = reggroup_next (gdbarch, NULL); return group; } /* Helper for "tui reg prev", wraps a call to REGGROUP_PREV, but adds wrap - around behaviour. Returns the previous register group, or NULL if the - register window is not currently being displayed. */ + around behaviour. Will never return nullptr. If CURRENT_GROUP is + nullptr (e.g. if the tui register window has only just been displayed + and has no current group selected), then the last register group will + be returned. */ static const reggroup * tui_reg_prev (const reggroup *current_group, struct gdbarch *gdbarch) { - const reggroup *group = NULL; - - if (current_group != NULL) - { - group = reggroup_prev (gdbarch, current_group); - if (group == NULL) - group = reggroup_prev (gdbarch, NULL); - } + const reggroup *group = reggroup_prev (gdbarch, current_group); + if (group == NULL) + group = reggroup_prev (gdbarch, NULL); return group; } -- 2.25.4