From patchwork Wed Mar 6 16:02:00 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eli Zaretskii X-Patchwork-Id: 31738 Received: (qmail 40959 invoked by alias); 6 Mar 2019 16:02:04 -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 40948 invoked by uid 89); 6 Mar 2019 16:02:03 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-14.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, SPF_PASS autolearn=ham version=3.3.2 spammy=began, 1999, timely, $_gdb_version X-HELO: eggs.gnu.org Received: from eggs.gnu.org (HELO eggs.gnu.org) (209.51.188.92) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 06 Mar 2019 16:02:01 +0000 Received: from fencepost.gnu.org ([2001:470:142:3::e]:44315) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1YzX-0005u0-NL; Wed, 06 Mar 2019 11:01:59 -0500 Received: from [176.228.60.248] (port=3565 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1h1YzX-00016S-A2; Wed, 06 Mar 2019 11:01:59 -0500 Date: Wed, 06 Mar 2019 18:02:00 +0200 Message-Id: <83imwwc7pj.fsf@gnu.org> From: Eli Zaretskii To: Tom Tromey CC: gdb-patches@sourceware.org In-reply-to: <87d0n67d29.fsf@tromey.com> (message from Tom Tromey on Mon, 04 Mar 2019 10:40:46 -0700) Subject: Re: [PATCH 00/16] Add styling to the gdb CLI and TUI References: <20181128001435.12703-1-tom@tromey.com> <83k1kxfzwo.fsf@gnu.org> <8736rja4i8.fsf@tromey.com> <83r2brhw8k.fsf@gnu.org> <87h8cmh1wg.fsf@tromey.com> <83va12gz8j.fsf@gnu.org> <87mumeb935.fsf@tromey.com> <83d0n8eyzw.fsf@gnu.org> <87d0n6adk2.fsf@tromey.com> <83imwyee29.fsf@gnu.org> <87d0n67d29.fsf@tromey.com> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-IsSubscribed: yes > From: Tom Tromey > Cc: Tom Tromey , gdb-patches@sourceware.org > Date: Mon, 04 Mar 2019 10:40:46 -0700 > > >>>>> "Eli" == Eli Zaretskii writes: > > Eli> What do you think about the idea to add a convenience variable that > Eli> would provide the GDB version? > > Seems reasonable to me. How about the patch below? Is it okay to go in? (Note that I took this opportunity to clean up whitespace in top.c, I hope it's OK to do that as part of unrelated code changes.) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index ac61e65..f2915d0 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,10 @@ +2019-03-06 Eli Zaretskii + + * NEWS: Announce $_gdb_version. + + * top.c (init_gdb_version_var): New function. + (gdb_init): Call init_gdb_version_var. + 2019-03-06 Tom Tromey * remote-sim.c (gdbsim_target_open): Use result of diff --git a/gdb/NEWS b/gdb/NEWS index cc7c35c..260e6cc 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -3,6 +3,12 @@ *** Changes since GDB 8.3 +* New built-in convenience variable $_gdb_version provides the GDB + version. It is handy for conditionally using features available + only in or since specific GDB versions, in scripts that should work + error-free with many different versions, such as in system-wide init + files. + *** Changes in GDB 8.3 * GDB and GDBserver now support access to additional registers on diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 0380322..313a061 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,7 @@ +2019-03-06 Eli Zaretskii + + * gdb.texinfo (Convenience Vars): Document $_gdb_version. + 2019-03-05 Simon Marchi * python.texi (Values From Inferior): Change synopsys of the diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index f2028f8..9d15337 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -11197,7 +11197,7 @@ @vindex $_tlb@r{, convenience variable} The variable @code{$_tlb} is automatically set when debugging applications running on MS-Windows in native mode or connected to -gdbserver that supports the @code{qGetTIBAddr} request. +gdbserver that supports the @code{qGetTIBAddr} request. @xref{General Query Packets}. This variable contains the address of the thread information block. @@ -11211,6 +11211,17 @@ @item $_gthread The global number of the current thread. @xref{global thread numbers}. +@item $_gdb_version +@vindex $_gdb_version@r{, convenience variable} +The version of the running @value{GDBN}. The value is an integer +number that encodes the major and minor @value{GDBN} versions as +@w{@code{@var{major}*100 + @var{minor}}}, so, e.g., @value{GDBN} +version 9.10 will produce the value @code{910}. Development snapshots +and pretest versions have their minor version incremented by one; +thus, @value{GDBN} pretest 9.11.90 will produce the value 912. This +variable allows you to write scripts that work with different versions +of @value{GDBN} without errors caused by features unavailable in some +of those versions. @end table @node Convenience Funs diff --git a/gdb/top.c b/gdb/top.c index 22e6f7e..97b349a 100644 --- a/gdb/top.c +++ b/gdb/top.c @@ -147,22 +147,22 @@ int server_command; /* Timeout limit for response from target. */ -/* The default value has been changed many times over the years. It - was originally 5 seconds. But that was thought to be a long time +/* The default value has been changed many times over the years. It + was originally 5 seconds. But that was thought to be a long time to sit and wait, so it was changed to 2 seconds. That was thought - to be plenty unless the connection was going through some terminal + to be plenty unless the connection was going through some terminal server or multiplexer or other form of hairy serial connection. - In mid-1996, remote_timeout was moved from remote.c to top.c and + In mid-1996, remote_timeout was moved from remote.c to top.c and it began being used in other remote-* targets. It appears that the default was changed to 20 seconds at that time, perhaps because the Renesas E7000 ICE didn't always respond in a timely manner. But if 5 seconds is a long time to sit and wait for retransmissions, - 20 seconds is far worse. This demonstrates the difficulty of using + 20 seconds is far worse. This demonstrates the difficulty of using a single variable for all protocol timeouts. - As remote.c is used much more than remote-e7000.c, it was changed + As remote.c is used much more than remote-e7000.c, it was changed back to 2 seconds in 1999. */ int remote_timeout = 2; @@ -188,9 +188,9 @@ int (*deprecated_ui_loop_hook) (int); /* Called from print_frame_info to list the line we stopped in. */ -void (*deprecated_print_frame_info_listing_hook) (struct symtab * s, +void (*deprecated_print_frame_info_listing_hook) (struct symtab * s, int line, - int stopline, + int stopline, int noerror); /* Replaces most of query. */ @@ -237,7 +237,7 @@ ptid_t (*deprecated_target_wait_hook) (ptid_t ptid, /* Used by UI as a wrapper around command execution. May do various things like enabling/disabling buttons, etc... */ -void (*deprecated_call_command_hook) (struct cmd_list_element * c, +void (*deprecated_call_command_hook) (struct cmd_list_element * c, const char *cmd, int from_tty); /* Called when the current thread changes. Argument is thread id. */ @@ -1339,8 +1339,9 @@ There is NO WARRANTY, to the extent permitted by law."); resources online at:\n .")); fprintf_filtered (stream, "\n\n"); fprintf_filtered (stream, _("For help, type \"help\".\n")); - fprintf_filtered (stream, _("Type \"apropos word\" to search for \ -commands related to \"word\".")); + fprintf_filtered (stream, + _("Type \"apropos word\" to search for commands \ +related to \"word\".")); } /* Print the details of GDB build-time configuration. */ @@ -1608,7 +1609,7 @@ quit_force (int *exit_arg, int from_tty) undo_terminal_modifications_before_exit (); - /* An optional expression may be used to cause gdb to terminate with the + /* An optional expression may be used to cause gdb to terminate with the value of that expression. */ if (exit_arg) exit_code = *exit_arg; @@ -1998,11 +1999,21 @@ set_history_filename (const char *args, directories the file written will be the same as the one that was read. */ if (!IS_ABSOLUTE_PATH (history_filename)) - history_filename = reconcat (history_filename, current_directory, "/", + history_filename = reconcat (history_filename, current_directory, "/", history_filename, (char *) NULL); } static void +init_gdb_version_var (void) +{ + struct internalvar *version_var = create_internalvar ("_gdb_version"); + int vmajor = 0, vminor = 0, vrevision = 0; + sscanf (version, "%d.%d.%d", &vmajor, &vminor, &vrevision); + set_internalvar_integer (version_var, + vmajor * 100 + vminor + (vrevision > 0)); +} + +static void init_main (void) { struct cmd_list_element *c; @@ -2206,4 +2217,7 @@ gdb_init (char *argv0) prefix to be installed. Keep things simple and just do final script initialization here. */ finish_ext_lang_initialization (); + + /* Create $_gdb_version convenience variable. */ + init_gdb_version_var (); }