Introduce new convenience variables $_gdb_major and $_gdb_minor
authorEli Zaretskii <eliz@gnu.org>
Sat, 30 Mar 2019 09:58:33 +0000 (12:58 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sat, 30 Mar 2019 09:58:33 +0000 (12:58 +0300)
gdb/ChangeLog:
2019-03-30  Eli Zaretskii  <eliz@gnu.org>

* NEWS: Announce $_gdb_major and $_gdb_minor.

* top.c (init_gdb_version_vars): New function.
(gdb_init): Call init_gdb_version_vars.

gdb/testsuite/ChangeLog:
2019-03-30  Simon Marchi <simark@simark.ca>

* gdb.base/default.exp: Add values for $_gdb_major and
$_gdb_minor.

gdb/doc/ChangeLog:
2019-03-30  Eli Zaretskii  <eliz@gnu.org>

* gdb.texinfo (Convenience Vars): Document $_gdb_major and
$_gdb_minor.

gdb/ChangeLog
gdb/NEWS
gdb/doc/ChangeLog
gdb/doc/gdb.texinfo
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.base/default.exp
gdb/top.c

index a79a860dda317a31bb95004b4f4477cc7f25dadd..a3dfd3169873113365687defd15902e7d8ffe730 100644 (file)
@@ -1,3 +1,10 @@
+2019-03-30  Eli Zaretskii  <eliz@gnu.org>
+
+       * NEWS: Announce $_gdb_major and $_gdb_minor.
+
+       * top.c (init_gdb_version_vars): New function.
+       (gdb_init): Call init_gdb_version_vars.
+
 2019-03-29  Tom Tromey  <tromey@adacore.com>
 
        * printcmd.c (_initialize_printcmd): Add usage lines.  Update some
index edcc9c951a0c447bbf39af1f07760e85231814aa..4bfa15becf5bece01aa62b5768073b29a3b2394e 100644 (file)
--- a/gdb/NEWS
+++ b/gdb/NEWS
@@ -3,6 +3,12 @@
 
 *** Changes since GDB 8.3
 
+* New built-in convenience variables $_gdb_major and $_gdb_minor
+  provide the GDB version.  They are 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.
+
 * GDB now supports Thread Local Storage (TLS) variables on several
   FreeBSD architectures (amd64, i386, powerpc, riscv).  Other
   architectures require kernel changes.  TLS is not yet supported for
index 87e20d3adb4dccd4a6a061836014f3e4aec2ff84..c0d5aac176455e13fa99ebf664e65ca64b957591 100644 (file)
@@ -1,3 +1,8 @@
+2019-03-30  Eli Zaretskii  <eliz@gnu.org>
+
+       * gdb.texinfo (Convenience Vars): Document $_gdb_major and
+       $_gdb_minor.
+
 2019-03-26  Andrew Burgess  <andrew.burgess@embecosm.com>
 
        * python.texi (Pretty Printing API): Document use of None for the
index 4c1d5e8294fe200c36ac19e7f07e9964296c385b..bb958cf25ddaad87e44131af6c173ae22dc76cf2 100644 (file)
@@ -11197,7 +11197,7 @@ For example, it will be empty before you execute the @code{run} command.
 @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 @@ The thread number of the current thread.  @xref{thread numbers}.
 @item $_gthread
 The global number of the current thread.  @xref{global thread numbers}.
 
+@item $_gdb_major
+@itemx $_gdb_minor
+@vindex $_gdb_major@r{, convenience variable}
+@vindex $_gdb_minor@r{, convenience variable}
+The major and minor version numbers of the running @value{GDBN}.
+Development snapshots and pretest versions have their minor version
+incremented by one; thus, @value{GDBN} pretest 9.11.90 will produce
+the value 12 for @code{$_gdb_minor}.  These variables allow 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
index c0310ca5258edd92b55a72c77a846460d0d4a124..75bb6c6123f18cf1c2fa1cf5d94cf8e1a125b97a 100644 (file)
@@ -1,3 +1,8 @@
+2019-03-30  Simon Marchi <simark@simark.ca>
+
+       * gdb.base/default.exp: Add values for $_gdb_major and
+       $_gdb_minor.
+
 2019-03-29  Tom Tromey  <tromey@adacore.com>
 
        * gdb.base/help.exp: Tighten apropos regexp.
index ece1428e617e20bec668a284330490e19a4d4767..9ff5144448d8402e337ff5efbd88f1eb1ebc0542 100644 (file)
@@ -602,6 +602,8 @@ set show_conv_list \
        {$_probe_arg10 = <error: No frame selected>} \
        {$_probe_arg11 = <error: No frame selected>} \
        {$_isvoid = <internal function _isvoid>} \
+       {$_gdb_major = 8} \
+       {$_gdb_minor = 4} \
     }
 if ![skip_python_tests] {
     append show_conv_list \
index b10b0649e9c571c241a7eb4bb49a66fd585b2921..afb77c0ec956f40726a33d0c987e8e4fe22c39a0 100644 (file)
--- 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    <http://www.gnu.org/software/gdb/documentation/>."));
   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;
@@ -2002,6 +2003,17 @@ set_history_filename (const char *args,
                                 history_filename, (char *) NULL);
 }
 
+static void
+init_gdb_version_vars (void)
+{
+  struct internalvar *major_version_var = create_internalvar ("_gdb_major");
+  struct internalvar *minor_version_var = create_internalvar ("_gdb_minor");
+  int vmajor = 0, vminor = 0, vrevision = 0;
+  sscanf (version, "%d.%d.%d", &vmajor, &vminor, &vrevision);
+  set_internalvar_integer (major_version_var, vmajor);
+  set_internalvar_integer (minor_version_var, vminor + (vrevision > 0));
+}
+
 static void
 init_main (void)
 {
@@ -2206,4 +2218,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_major and $_gdb_minor convenience variables.  */
+  init_gdb_version_vars ();
 }