From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 82094 invoked by alias); 20 Mar 2019 19:35:50 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 82081 invoked by uid 89); 20 Mar 2019 19:35:50 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-16.0 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.1 spammy=online 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, 20 Mar 2019 19:35:48 +0000 Received: from fencepost.gnu.org ([2001:470:142:3::e]:32831) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h6h06-0006OY-93; Wed, 20 Mar 2019 15:35:46 -0400 Received: from [176.228.60.248] (port=2362 helo=home-c4e4a596f7) by fencepost.gnu.org with esmtpsa (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.82) (envelope-from ) id 1h6h05-0002SS-3X; Wed, 20 Mar 2019 15:35:45 -0400 Date: Wed, 20 Mar 2019 19:35:00 -0000 Message-Id: <83k1gts5it.fsf@gnu.org> From: Eli Zaretskii To: tom@tromey.com CC: gdb-patches@sourceware.org In-reply-to: <83imwwc7pj.fsf@gnu.org> (message from Eli Zaretskii on Wed, 06 Mar 2019 18:02:00 +0200) Subject: Re: GDB version as convenience variable 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> <83imwwc7pj.fsf@gnu.org> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-IsSubscribed: yes X-SW-Source: 2019-03/txt/msg00441.txt.bz2 Ping! > Date: Wed, 06 Mar 2019 18:02:00 +0200 > From: Eli Zaretskii > CC: gdb-patches@sourceware.org > > > 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 (); > } >