From patchwork Tue Mar 5 21:38:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 86843 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 224D938582A9 for ; Tue, 5 Mar 2024 21:39:17 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from omta36.uswest2.a.cloudfilter.net (omta36.uswest2.a.cloudfilter.net [35.89.44.35]) by sourceware.org (Postfix) with ESMTPS id 37FB8385840F for ; Tue, 5 Mar 2024 21:38:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 37FB8385840F Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 37FB8385840F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=35.89.44.35 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709674734; cv=none; b=GDQJhppR6fu9UL8iglm/wS6lzB5S78MGnDvZ9HaakKXG18BNONyWl4ZK4NLdpHnFd0xe6k/yS+c/4u53L1S9RxSrVzxDtpvZTrE7tgMsHclFED9kwBxJW1c7ZT0XrXD1aPbc8nFryY3gotuKEJyL0vTZAuFMzskH+p7NWwUHljU= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1709674734; c=relaxed/simple; bh=nvRjUC144P6ZFd4YkLCM3VmvKLxS2UHEVLPorMwxwdc=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=GZQh2t5OpGYQZvHePl5oEmMZtIQUhGjAfrKQCA6JoThBdMk1sUNigtJ88BEMNqM6Q+QM60lrW2d6aO+TcH3B1k2mKkvEyYUDBofvCqx/EOu69G4xgMdLyd91FcKubNjMU79ASMCnz1amRwLBpLhtaKiTViehY1LbMd0tpnGe4Uo= ARC-Authentication-Results: i=1; server2.sourceware.org Received: from eig-obgw-5005a.ext.cloudfilter.net ([10.0.29.234]) by cmsmtp with ESMTPS id hPQVrJMXutf2QhcUrrQwut; Tue, 05 Mar 2024 21:38:50 +0000 Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTPS id hcUrr9pFWHZXphcUrrZhLA; Tue, 05 Mar 2024 21:38:49 +0000 X-Authority-Analysis: v=2.4 cv=OppJyT/t c=1 sm=1 tr=0 ts=65e790e9 a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=K6JAEmCyrfEA:10 a=Qbun_eYptAEA:10 a=mDV3o1hIAAAA:8 a=pDyxsaHK_6l7VPFox0YA:9 a=_FVE-zBwftR9WsbkzFJk:22 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=Content-Transfer-Encoding:MIME-Version:Message-ID:Date:Subject: Cc:To:From:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=fuB3XnCCb0NucYIipqu1m2he1xE3lvhh4HCcYs66A0Y=; b=GKQR5GusGmcOrEEdJHDROSAx2i FUhCThNjRXhUgLhVIYsXehXNr5tZO4CICWw5GGoJVv55B7JkfobrD0DYa4vOcVkzSIWhVd3zh2FE3 W+SS7nuji0gl+IyulS1uIeDO3; Received: from 71-211-170-195.hlrn.qwest.net ([71.211.170.195]:41588 helo=localhost.localdomain) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96.2) (envelope-from ) id 1rhcUq-003SFQ-2X; Tue, 05 Mar 2024 14:38:48 -0700 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [PATCH v2] Remove tui-out.[ch] Date: Tue, 5 Mar 2024 14:38:39 -0700 Message-ID: <20240305213839.3093613-1-tom@tromey.com> X-Mailer: git-send-email 2.43.0 MIME-Version: 1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 71.211.170.195 X-Source-L: No X-Exim-ID: 1rhcUq-003SFQ-2X X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 71-211-170-195.hlrn.qwest.net (localhost.localdomain) [71.211.170.195]:41588 X-Source-Auth: tom+tromey.com X-Email-Count: 17 X-Org: HG=bhshared;ORG=bluehost; X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-CMAE-Envelope: MS4xfH49EylEMX63oI3Xg9JYI7Ld6tv3myJEVw3l+utLXoWAqkfFNNCPxsB4DRq92o5vXJXJr7k++ydo3EroodFEboYRJa1GPNt2BtFDpmObtKTO/HQ+qcLK zUyrlBE/zxTcc382rW6UVyuGlaGlEOzkakibQqCNFf/rZ3MEl7TngV1Da4IEM82YrVIEE2qaxA1K/7w3syFQRWrgBr2wJPr6PjU= X-Spam-Status: No, score=-3022.1 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_SHORT, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.30 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org The other day on irc, we were discussing the "m_line" hack in tui-out.c, and I mentioned that it would be nice to replace this with a new ui_out_flag. Later, I looked at ui_out_flag and found: ui_source_list = (1 << 0), ... and sure enough, this is tested already. This patch removes tui-out.[ch] and changes the TUI to use an ordinary cli-out object without this flag set. As far as I can tell, this doesn't affect behavior at all -- the TUI tests all pass, and interactively I tried switching stack frames, "list", etc, and it all seems to work. New in v2: fixed the problem pointed out by Keith, and added a test case for that scenario. Reviewed-By: Andrew Burgess --- gdb/Makefile.in | 2 - gdb/source.c | 27 ++---- gdb/testsuite/gdb.tui/tui-missing-src.exp | 2 + gdb/tui/tui-io.c | 3 +- gdb/tui/tui-out.c | 111 ---------------------- gdb/tui/tui-out.h | 64 ------------- 6 files changed, 12 insertions(+), 197 deletions(-) delete mode 100644 gdb/tui/tui-out.c delete mode 100644 gdb/tui/tui-out.h diff --git a/gdb/Makefile.in b/gdb/Makefile.in index 0e0f19c40c9..340ff266a6e 100644 --- a/gdb/Makefile.in +++ b/gdb/Makefile.in @@ -318,7 +318,6 @@ SUBDIR_TUI_SRCS = \ tui/tui-io.c \ tui/tui-layout.c \ tui/tui-location.c \ - tui/tui-out.c \ tui/tui-regs.c \ tui/tui-source.c \ tui/tui-status.c \ @@ -1605,7 +1604,6 @@ HFILES_NO_SRCDIR = \ tui/tui-io.h \ tui/tui-layout.h \ tui/tui-location.h \ - tui/tui-out.h \ tui/tui-regs.h \ tui/tui-source.h \ tui/tui-status.h \ diff --git a/gdb/source.c b/gdb/source.c index 2c465a1251f..bbeb4154258 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -1341,30 +1341,21 @@ print_source_lines_base (struct symtab *s, int line, int stopline, styled_string (file_name_style.style (), filename), safe_strerror (errcode)); } - else + else if (uiout->is_mi_like_p () || uiout->test_flags (ui_source_list)) { + /* CLI expects only the "file" field. MI expects both + fields. ui_source_list is set only for CLI, not for + TUI. */ + uiout->field_signed ("line", line); uiout->text ("\tin "); - /* CLI expects only the "file" field. TUI expects only the - "fullname" field (and TUI does break if "file" is printed). - MI expects both fields. ui_source_list is set only for CLI, - not for TUI. */ - if (uiout->is_mi_like_p () || uiout->test_flags (ui_source_list)) - uiout->field_string ("file", symtab_to_filename_for_display (s), - file_name_style.style ()); - if (uiout->is_mi_like_p () || !uiout->test_flags (ui_source_list)) + uiout->field_string ("file", symtab_to_filename_for_display (s), + file_name_style.style ()); + if (uiout->is_mi_like_p ()) { const char *s_fullname = symtab_to_fullname (s); - char *local_fullname; - - /* ui_out_field_string may free S_FULLNAME by calling - open_source_file for it again. See e.g., - tui_field_string->tui_show_source. */ - local_fullname = (char *) alloca (strlen (s_fullname) + 1); - strcpy (local_fullname, s_fullname); - - uiout->field_string ("fullname", local_fullname); + uiout->field_string ("fullname", s_fullname); } uiout->text ("\n"); diff --git a/gdb/testsuite/gdb.tui/tui-missing-src.exp b/gdb/testsuite/gdb.tui/tui-missing-src.exp index 19da9389a46..1929a1e3568 100644 --- a/gdb/testsuite/gdb.tui/tui-missing-src.exp +++ b/gdb/testsuite/gdb.tui/tui-missing-src.exp @@ -89,6 +89,8 @@ Term::check_box_contents "check source box is empty" \ Term::command "set pagination off" Term::command "start" Term::command "next" +Term::check_contents "next does not show source line" \ + "\\(gdb\\) next *\n\\(gdb\\)" Term::command "step" Term::check_contents "checking if inside f2 ()" "f2 \\(x=4\\)" Term::check_box_contents "f2.c must be displayed in source window" \ diff --git a/gdb/tui/tui-io.c b/gdb/tui/tui-io.c index 94554fd447d..ba07e3d573b 100644 --- a/gdb/tui/tui-io.c +++ b/gdb/tui/tui-io.c @@ -33,7 +33,6 @@ #include "tui/tui-win.h" #include "tui/tui-wingeneral.h" #include "tui/tui-file.h" -#include "tui/tui-out.h" #include "ui-out.h" #include "cli-out.h" #include @@ -917,7 +916,7 @@ tui_initialize_io (void) tui_stdout = new pager_file (new tui_file (stdout, true)); tui_stderr = new tui_file (stderr, false); tui_stdlog = new timestamped_file (tui_stderr); - tui_out = new tui_ui_out (tui_stdout); + tui_out = new cli_ui_out (tui_stdout, 0); /* Create the default UI. */ tui_old_uiout = new cli_ui_out (gdb_stdout); diff --git a/gdb/tui/tui-out.c b/gdb/tui/tui-out.c deleted file mode 100644 index 2ce7309b902..00000000000 --- a/gdb/tui/tui-out.c +++ /dev/null @@ -1,111 +0,0 @@ -/* Output generating routines for GDB CLI. - - Copyright (C) 1999-2024 Free Software Foundation, Inc. - - Contributed by Cygnus Solutions. - Written by Fernando Nasser for Cygnus. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#include "defs.h" -#include "ui-out.h" -#include "tui-out.h" -#include "tui.h" - -/* Output an int field. */ - -void -tui_ui_out::do_field_signed (int fldno, int width, ui_align alignment, - const char *fldname, LONGEST value) -{ - if (suppress_output ()) - return; - - /* Don't print line number, keep it for later. */ - if (m_start_of_line == 0 && strcmp (fldname, "line") == 0) - { - m_start_of_line++; - m_line = value; - return; - } - m_start_of_line++; - - cli_ui_out::do_field_signed (fldno, width, alignment, fldname, value); -} - -/* Other cli_field_* end up here so alignment and field separators are - both handled by tui_field_string. */ - -void -tui_ui_out::do_field_string (int fldno, int width, ui_align align, - const char *fldname, const char *string, - const ui_file_style &style) -{ - if (suppress_output ()) - return; - - m_start_of_line++; - - if (fldname && m_line > 0 && strcmp (fldname, "fullname") == 0) - return; - - cli_ui_out::do_field_string (fldno, width, align, fldname, string, style); -} - -void -tui_ui_out::do_field_fmt (int fldno, int width, ui_align align, - const char *fldname, const ui_file_style &style, - const char *format, va_list args) -{ - if (suppress_output ()) - return; - - m_start_of_line++; - - cli_ui_out::do_field_fmt (fldno, width, align, fldname, style, format, args); -} - -void -tui_ui_out::do_text (const char *string) -{ - if (suppress_output ()) - return; - - m_start_of_line++; - if (m_line > 0) - { - /* Printing a source line, so suppress regular output -- the - line was shown on the TUI's source window by tui_show_source - above instead. */ - if (strchr (string, '\n') != 0) - { - /* We've reached the end of the line, so go back to letting - text output go to the console. */ - m_line = 0; - m_start_of_line = 0; - } - return; - } - if (strchr (string, '\n')) - m_start_of_line = 0; - - cli_ui_out::do_text (string); -} - -tui_ui_out::tui_ui_out (ui_file *stream) - : cli_ui_out (stream, 0) -{ -} diff --git a/gdb/tui/tui-out.h b/gdb/tui/tui-out.h deleted file mode 100644 index e4ebb1e7408..00000000000 --- a/gdb/tui/tui-out.h +++ /dev/null @@ -1,64 +0,0 @@ -/* Copyright (C) 2016-2024 Free Software Foundation, Inc. - - This file is part of GDB. - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . */ - -#ifndef TUI_TUI_OUT_H -#define TUI_TUI_OUT_H - -#include "cli-out.h" - -/* A ui_out class for the TUI. This is just like the CLI's ui_out, - except that it overrides output methods to detect when a source - line is being printed and show the source in the TUI's source - window instead of printing the line in the console window. */ -class tui_ui_out : public cli_ui_out -{ -public: - - explicit tui_ui_out (ui_file *stream); - -protected: - - void do_field_signed (int fldno, int width, ui_align align, const char *fldname, - LONGEST value) override; - void do_field_string (int fldno, int width, ui_align align, const char *fldname, - const char *string, const ui_file_style &style) override; - void do_field_fmt (int fldno, int width, ui_align align, const char *fldname, - const ui_file_style &style, - const char *format, va_list args) override - ATTRIBUTE_PRINTF (7, 0); - void do_text (const char *string) override; - -private: - - /* These fields are used to make print_source_lines show the source - in the TUI's source window instead of in the console. - M_START_OF_LINE is incremented whenever something is output to - the ui_out. If an integer field named "line" is printed on the - ui_out, and nothing else has been printed yet (both - M_START_OF_LINE and M_LINE are still 0), we assume - print_source_lines is starting to print a source line, and thus - record the line number in M_LINE. Afterwards, when we see a - string field named "fullname" being output, we take the fullname - and the recorded line and show the source line in the TUI's - source window. tui_ui_out::do_text() suppresses text output - until it sees an endline being printed, at which point these - variables are reset back to 0. */ - int m_line = 0; - int m_start_of_line = 0; -}; - -#endif /* TUI_TUI_OUT_H */