Imported Upstream version 7.9
[platform/upstream/gdb.git] / gdb / doc / gdb.info-5
index 41c2d69..4baa5d6 100644 (file)
@@ -1,13 +1,6 @@
-This is gdb.info, produced by makeinfo version 4.8 from ./gdb.texinfo.
+This is gdb.info, produced by makeinfo version 5.2 from gdb.texinfo.
 
-INFO-DIR-SECTION Software development
-START-INFO-DIR-ENTRY
-* Gdb: (gdb).                     The GNU debugger.
-END-INFO-DIR-ENTRY
-
-   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
-1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-2010 2011, 2012 Free Software Foundation, Inc.
+Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -19,15 +12,18 @@ with the Back-Cover Texts as in (a) below.
    (a) The FSF's Back-Cover Text is: "You are free to copy and modify
 this GNU Manual.  Buying copies from GNU Press supports the FSF in
 developing GNU and promoting software freedom."
+INFO-DIR-SECTION Software development
+START-INFO-DIR-ENTRY
+* Gdb: (gdb).                     The GNU debugger.
+* gdbserver: (gdb) Server.        The GNU debugging server.
+END-INFO-DIR-ENTRY
 
    This file documents the GNU debugger GDB.
 
-   This is the Tenth Edition, of `Debugging with GDB: the GNU
-Source-Level Debugger' for GDB (GDB) Version 7.5.
+   This is the Tenth Edition, of 'Debugging with GDB: the GNU
+Source-Level Debugger' for GDB (GDB) Version 7.9.
 
-   Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
-1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
-2010 2011, 2012 Free Software Foundation, Inc.
+   Copyright (C) 1988-2015 Free Software Foundation, Inc.
 
    Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -41,7137 +37,8837 @@ this GNU Manual.  Buying copies from GNU Press supports the FSF in
 developing GNU and promoting software freedom."
 
 \1f
-File: gdb.info,  Node: Running Configure,  Next: Separate Objdir,  Prev: Requirements,  Up: Installing GDB
-
-C.2 Invoking the GDB `configure' Script
-=======================================
+File: gdb.info,  Node: GDB/MI Compatibility with CLI,  Next: GDB/MI Development and Front Ends,  Prev: GDB/MI Command Syntax,  Up: GDB/MI
 
-GDB comes with a `configure' script that automates the process of
-preparing GDB for installation; you can then use `make' to build the
-`gdb' program.
+27.3 GDB/MI Compatibility with CLI
+==================================
 
-   The GDB distribution includes all the source code you need for GDB
-in a single directory, whose name is usually composed by appending the
-version number to `gdb'.
+For the developers convenience CLI commands can be entered directly, but
+there may be some unexpected behaviour.  For example, commands that
+query the user will behave as if the user replied yes, breakpoint
+command lists are not executed and some CLI commands, such as 'if',
+'when' and 'define', prompt for further input with '>', which is not
+valid MI output.
 
-   For example, the GDB version 7.5 distribution is in the `gdb-7.5'
-directory.  That directory contains:
+   This feature may be removed at some stage in the future and it is
+recommended that front ends use the '-interpreter-exec' command (*note
+-interpreter-exec::).
 
-`gdb-7.5/configure (and supporting files)'
-     script for configuring GDB and all its supporting libraries
+\1f
+File: gdb.info,  Node: GDB/MI Development and Front Ends,  Next: GDB/MI Output Records,  Prev: GDB/MI Compatibility with CLI,  Up: GDB/MI
 
-`gdb-7.5/gdb'
-     the source specific to GDB itself
+27.4 GDB/MI Development and Front Ends
+======================================
 
-`gdb-7.5/bfd'
-     source for the Binary File Descriptor library
+The application which takes the MI output and presents the state of the
+program being debugged to the user is called a "front end".
 
-`gdb-7.5/include'
-     GNU include files
+   Although GDB/MI is still incomplete, it is currently being used by a
+variety of front ends to GDB.  This makes it difficult to introduce new
+functionality without breaking existing usage.  This section tries to
+minimize the problems by describing how the protocol might change.
 
-`gdb-7.5/libiberty'
-     source for the `-liberty' free software library
+   Some changes in MI need not break a carefully designed front end, and
+for these the MI version will remain unchanged.  The following is a list
+of changes that may occur within one level, so front ends should parse
+MI output in a way that can handle them:
 
-`gdb-7.5/opcodes'
-     source for the library of opcode tables and disassemblers
+   * New MI commands may be added.
 
-`gdb-7.5/readline'
-     source for the GNU command-line interface
+   * New fields may be added to the output of any MI command.
 
-`gdb-7.5/glob'
-     source for the GNU filename pattern-matching subroutine
+   * The range of values for fields with specified values, e.g.,
+     'in_scope' (*note -var-update::) may be extended.
 
-`gdb-7.5/mmalloc'
-     source for the GNU memory-mapped malloc package
+   If the changes are likely to break front ends, the MI version level
+will be increased by one.  This will allow the front end to parse the
+output according to the MI version.  Apart from mi0, new versions of GDB
+will not support old versions of MI and it will be the responsibility of
+the front end to work with the new one.
 
-   The simplest way to configure and build GDB is to run `configure'
-from the `gdb-VERSION-NUMBER' source directory, which in this example
-is the `gdb-7.5' directory.
+   The best way to avoid unexpected changes in MI that might break your
+front end is to make your project known to GDB developers and follow
+development on <gdb@sourceware.org> and <gdb-patches@sourceware.org>.
 
-   First switch to the `gdb-VERSION-NUMBER' source directory if you are
-not already in it; then run `configure'.  Pass the identifier for the
-platform on which GDB will run as an argument.
+\1f
+File: gdb.info,  Node: GDB/MI Output Records,  Next: GDB/MI Simple Examples,  Prev: GDB/MI Development and Front Ends,  Up: GDB/MI
 
-   For example:
+27.5 GDB/MI Output Records
+==========================
 
-     cd gdb-7.5
-     ./configure HOST
-     make
+* Menu:
 
-where HOST is an identifier such as `sun4' or `decstation', that
-identifies the platform where GDB will run.  (You can often leave off
-HOST; `configure' tries to guess the correct value by examining your
-system.)
+* GDB/MI Result Records::
+* GDB/MI Stream Records::
+* GDB/MI Async Records::
+* GDB/MI Breakpoint Information::
+* GDB/MI Frame Information::
+* GDB/MI Thread Information::
+* GDB/MI Ada Exception Information::
 
-   Running `configure HOST' and then running `make' builds the `bfd',
-`readline', `mmalloc', and `libiberty' libraries, then `gdb' itself.
-The configured source files, and the binaries, are left in the
-corresponding source directories.
+\1f
+File: gdb.info,  Node: GDB/MI Result Records,  Next: GDB/MI Stream Records,  Up: GDB/MI Output Records
 
-   `configure' is a Bourne-shell (`/bin/sh') script; if your system
-does not recognize this automatically when you run a different shell,
-you may need to run `sh' on it explicitly:
+27.5.1 GDB/MI Result Records
+----------------------------
 
-     sh configure HOST
+In addition to a number of out-of-band notifications, the response to a
+GDB/MI command includes one of the following result indications:
 
-   If you run `configure' from a directory that contains source
-directories for multiple libraries or programs, such as the `gdb-7.5'
-source directory for version 7.5, `configure' creates configuration
-files for every directory level underneath (unless you tell it not to,
-with the `--norecursion' option).
-
-   You should run the `configure' script from the top directory in the
-source tree, the `gdb-VERSION-NUMBER' directory.  If you run
-`configure' from one of the subdirectories, you will configure only
-that subdirectory.  That is usually not what you want.  In particular,
-if you run the first `configure' from the `gdb' subdirectory of the
-`gdb-VERSION-NUMBER' directory, you will omit the configuration of
-`bfd', `readline', and other sibling directories of the `gdb'
-subdirectory.  This leads to build errors about missing include files
-such as `bfd/bfd.h'.
+'"^done" [ "," RESULTS ]'
+     The synchronous operation was successful, 'RESULTS' are the return
+     values.
 
-   You can install `gdb' anywhere; it has no hardwired paths.  However,
-you should make sure that the shell on your path (named by the `SHELL'
-environment variable) is publicly readable.  Remember that GDB uses the
-shell to start your program--some systems refuse to let GDB debug child
-processes whose programs are not readable.
+'"^running"'
+     This result record is equivalent to '^done'.  Historically, it was
+     output instead of '^done' if the command has resumed the target.
+     This behaviour is maintained for backward compatibility, but all
+     frontends should treat '^done' and '^running' identically and rely
+     on the '*running' output record to determine which threads are
+     resumed.
 
-\1f
-File: gdb.info,  Node: Separate Objdir,  Next: Config Names,  Prev: Running Configure,  Up: Installing GDB
+'"^connected"'
+     GDB has connected to a remote target.
 
-C.3 Compiling GDB in Another Directory
-======================================
+'"^error" "," "msg=" C-STRING [ "," "code=" C-STRING ]'
+     The operation failed.  The 'msg=C-STRING' variable contains the
+     corresponding error message.
 
-If you want to run GDB versions for several host or target machines,
-you need a different `gdb' compiled for each combination of host and
-target.  `configure' is designed to make this easy by allowing you to
-generate each configuration in a separate subdirectory, rather than in
-the source directory.  If your `make' program handles the `VPATH'
-feature (GNU `make' does), running `make' in each of these directories
-builds the `gdb' program specified there.
-
-   To build `gdb' in a separate directory, run `configure' with the
-`--srcdir' option to specify where to find the source.  (You also need
-to specify a path to find `configure' itself from your working
-directory.  If the path to `configure' would be the same as the
-argument to `--srcdir', you can leave out the `--srcdir' option; it is
-assumed.)
-
-   For example, with version 7.5, you can build GDB in a separate
-directory for a Sun 4 like this:
+     If present, the 'code=C-STRING' variable provides an error code on
+     which consumers can rely on to detect the corresponding error
+     condition.  At present, only one error code is defined:
 
-     cd gdb-7.5
-     mkdir ../gdb-sun4
-     cd ../gdb-sun4
-     ../gdb-7.5/configure sun4
-     make
+     '"undefined-command"'
+          Indicates that the command causing the error does not exist.
 
-   When `configure' builds a configuration using a remote source
-directory, it creates a tree for the binaries with the same structure
-(and using the same names) as the tree under the source directory.  In
-the example, you'd find the Sun 4 library `libiberty.a' in the
-directory `gdb-sun4/libiberty', and GDB itself in `gdb-sun4/gdb'.
+'"^exit"'
+     GDB has terminated.
 
-   Make sure that your path to the `configure' script has just one
-instance of `gdb' in it.  If your path to `configure' looks like
-`../gdb-7.5/gdb/configure', you are configuring only one subdirectory
-of GDB, not the whole package.  This leads to build errors about
-missing include files such as `bfd/bfd.h'.
+\1f
+File: gdb.info,  Node: GDB/MI Stream Records,  Next: GDB/MI Async Records,  Prev: GDB/MI Result Records,  Up: GDB/MI Output Records
+
+27.5.2 GDB/MI Stream Records
+----------------------------
+
+GDB internally maintains a number of output streams: the console, the
+target, and the log.  The output intended for each of these streams is
+funneled through the GDB/MI interface using "stream records".
+
+   Each stream record begins with a unique "prefix character" which
+identifies its stream (*note GDB/MI Output Syntax: GDB/MI Output
+Syntax.).  In addition to the prefix, each stream record contains a
+'STRING-OUTPUT'.  This is either raw text (with an implicit new line) or
+a quoted C string (which does not contain an implicit newline).
+
+'"~" STRING-OUTPUT'
+     The console output stream contains text that should be displayed in
+     the CLI console window.  It contains the textual responses to CLI
+     commands.
+
+'"@" STRING-OUTPUT'
+     The target output stream contains any textual output from the
+     running target.  This is only present when GDB's event loop is
+     truly asynchronous, which is currently only the case for remote
+     targets.
 
-   One popular reason to build several GDB configurations in separate
-directories is to configure GDB for cross-compiling (where GDB runs on
-one machine--the "host"--while debugging programs that run on another
-machine--the "target").  You specify a cross-debugging target by giving
-the `--target=TARGET' option to `configure'.
+'"&" STRING-OUTPUT'
+     The log stream contains debugging messages being produced by GDB's
+     internals.
 
-   When you run `make' to build a program or library, you must run it
-in a configured directory--whatever directory you were in when you
-called `configure' (or one of its subdirectories).
+\1f
+File: gdb.info,  Node: GDB/MI Async Records,  Next: GDB/MI Breakpoint Information,  Prev: GDB/MI Stream Records,  Up: GDB/MI Output Records
 
-   The `Makefile' that `configure' generates in each source directory
-also runs recursively.  If you type `make' in a source directory such
-as `gdb-7.5' (or in a separate configured directory configured with
-`--srcdir=DIRNAME/gdb-7.5'), you will build all the required libraries,
-and then build GDB.
+27.5.3 GDB/MI Async Records
+---------------------------
 
-   When you have multiple hosts or targets configured in separate
-directories, you can run `make' on them in parallel (for example, if
-they are NFS-mounted on each of the hosts); they will not interfere
-with each other.
+"Async" records are used to notify the GDB/MI client of additional
+changes that have occurred.  Those changes can either be a consequence
+of GDB/MI commands (e.g., a breakpoint modified) or a result of target
+activity (e.g., target stopped).
+
+   The following is the list of possible async records:
+
+'*running,thread-id="THREAD"'
+     The target is now running.  The THREAD field tells which specific
+     thread is now running, and can be 'all' if all threads are running.
+     The frontend should assume that no interaction with a running
+     thread is possible after this notification is produced.  The
+     frontend should not assume that this notification is output only
+     once for any command.  GDB may emit this notification several
+     times, either for different threads, because it cannot resume all
+     threads together, or even for a single thread, if the thread must
+     be stepped though some code before letting it run freely.
+
+'*stopped,reason="REASON",thread-id="ID",stopped-threads="STOPPED",core="CORE"'
+     The target has stopped.  The REASON field can have one of the
+     following values:
+
+     'breakpoint-hit'
+          A breakpoint was reached.
+     'watchpoint-trigger'
+          A watchpoint was triggered.
+     'read-watchpoint-trigger'
+          A read watchpoint was triggered.
+     'access-watchpoint-trigger'
+          An access watchpoint was triggered.
+     'function-finished'
+          An -exec-finish or similar CLI command was accomplished.
+     'location-reached'
+          An -exec-until or similar CLI command was accomplished.
+     'watchpoint-scope'
+          A watchpoint has gone out of scope.
+     'end-stepping-range'
+          An -exec-next, -exec-next-instruction, -exec-step,
+          -exec-step-instruction or similar CLI command was
+          accomplished.
+     'exited-signalled'
+          The inferior exited because of a signal.
+     'exited'
+          The inferior exited.
+     'exited-normally'
+          The inferior exited normally.
+     'signal-received'
+          A signal was received by the inferior.
+     'solib-event'
+          The inferior has stopped due to a library being loaded or
+          unloaded.  This can happen when 'stop-on-solib-events' (*note
+          Files::) is set or when a 'catch load' or 'catch unload'
+          catchpoint is in use (*note Set Catchpoints::).
+     'fork'
+          The inferior has forked.  This is reported when 'catch fork'
+          (*note Set Catchpoints::) has been used.
+     'vfork'
+          The inferior has vforked.  This is reported in when 'catch
+          vfork' (*note Set Catchpoints::) has been used.
+     'syscall-entry'
+          The inferior entered a system call.  This is reported when
+          'catch syscall' (*note Set Catchpoints::) has been used.
+     'syscall-entry'
+          The inferior returned from a system call.  This is reported
+          when 'catch syscall' (*note Set Catchpoints::) has been used.
+     'exec'
+          The inferior called 'exec'.  This is reported when 'catch
+          exec' (*note Set Catchpoints::) has been used.
+
+     The ID field identifies the thread that directly caused the stop -
+     for example by hitting a breakpoint.  Depending on whether all-stop
+     mode is in effect (*note All-Stop Mode::), GDB may either stop all
+     threads, or only the thread that directly triggered the stop.  If
+     all threads are stopped, the STOPPED field will have the value of
+     '"all"'.  Otherwise, the value of the STOPPED field will be a list
+     of thread identifiers.  Presently, this list will always include a
+     single thread, but frontend should be prepared to see several
+     threads in the list.  The CORE field reports the processor core on
+     which the stop event has happened.  This field may be absent if
+     such information is not available.
+
+'=thread-group-added,id="ID"'
+'=thread-group-removed,id="ID"'
+     A thread group was either added or removed.  The ID field contains
+     the GDB identifier of the thread group.  When a thread group is
+     added, it generally might not be associated with a running process.
+     When a thread group is removed, its id becomes invalid and cannot
+     be used in any way.
+
+'=thread-group-started,id="ID",pid="PID"'
+     A thread group became associated with a running program, either
+     because the program was just started or the thread group was
+     attached to a program.  The ID field contains the GDB identifier of
+     the thread group.  The PID field contains process identifier,
+     specific to the operating system.
+
+'=thread-group-exited,id="ID"[,exit-code="CODE"]'
+     A thread group is no longer associated with a running program,
+     either because the program has exited, or because it was detached
+     from.  The ID field contains the GDB identifier of the thread
+     group.  The CODE field is the exit code of the inferior; it exists
+     only when the inferior exited with some code.
+
+'=thread-created,id="ID",group-id="GID"'
+'=thread-exited,id="ID",group-id="GID"'
+     A thread either was created, or has exited.  The ID field contains
+     the GDB identifier of the thread.  The GID field identifies the
+     thread group this thread belongs to.
+
+'=thread-selected,id="ID"'
+     Informs that the selected thread was changed as result of the last
+     command.  This notification is not emitted as result of
+     '-thread-select' command but is emitted whenever an MI command that
+     is not documented to change the selected thread actually changes
+     it.  In particular, invoking, directly or indirectly (via
+     user-defined command), the CLI 'thread' command, will generate this
+     notification.
+
+     We suggest that in response to this notification, front ends
+     highlight the selected thread and cause subsequent commands to
+     apply to that thread.
+
+'=library-loaded,...'
+     Reports that a new library file was loaded by the program.  This
+     notification has 4 fields--ID, TARGET-NAME, HOST-NAME, and
+     SYMBOLS-LOADED.  The ID field is an opaque identifier of the
+     library.  For remote debugging case, TARGET-NAME and HOST-NAME
+     fields give the name of the library file on the target, and on the
+     host respectively.  For native debugging, both those fields have
+     the same value.  The SYMBOLS-LOADED field is emitted only for
+     backward compatibility and should not be relied on to convey any
+     useful information.  The THREAD-GROUP field, if present, specifies
+     the id of the thread group in whose context the library was loaded.
+     If the field is absent, it means the library was loaded in the
+     context of all present thread groups.
+
+'=library-unloaded,...'
+     Reports that a library was unloaded by the program.  This
+     notification has 3 fields--ID, TARGET-NAME and HOST-NAME with the
+     same meaning as for the '=library-loaded' notification.  The
+     THREAD-GROUP field, if present, specifies the id of the thread
+     group in whose context the library was unloaded.  If the field is
+     absent, it means the library was unloaded in the context of all
+     present thread groups.
+
+'=traceframe-changed,num=TFNUM,tracepoint=TPNUM'
+'=traceframe-changed,end'
+     Reports that the trace frame was changed and its new number is
+     TFNUM.  The number of the tracepoint associated with this trace
+     frame is TPNUM.
+
+'=tsv-created,name=NAME,initial=INITIAL'
+     Reports that the new trace state variable NAME is created with
+     initial value INITIAL.
+
+'=tsv-deleted,name=NAME'
+'=tsv-deleted'
+     Reports that the trace state variable NAME is deleted or all trace
+     state variables are deleted.
+
+'=tsv-modified,name=NAME,initial=INITIAL[,current=CURRENT]'
+     Reports that the trace state variable NAME is modified with the
+     initial value INITIAL.  The current value CURRENT of trace state
+     variable is optional and is reported if the current value of trace
+     state variable is known.
+
+'=breakpoint-created,bkpt={...}'
+'=breakpoint-modified,bkpt={...}'
+'=breakpoint-deleted,id=NUMBER'
+     Reports that a breakpoint was created, modified, or deleted,
+     respectively.  Only user-visible breakpoints are reported to the MI
+     user.
+
+     The BKPT argument is of the same form as returned by the various
+     breakpoint commands; *Note GDB/MI Breakpoint Commands::.  The
+     NUMBER is the ordinal number of the breakpoint.
+
+     Note that if a breakpoint is emitted in the result record of a
+     command, then it will not also be emitted in an async record.
+
+'=record-started,thread-group="ID"'
+'=record-stopped,thread-group="ID"'
+     Execution log recording was either started or stopped on an
+     inferior.  The ID is the GDB identifier of the thread group
+     corresponding to the affected inferior.
+
+'=cmd-param-changed,param=PARAM,value=VALUE'
+     Reports that a parameter of the command 'set PARAM' is changed to
+     VALUE.  In the multi-word 'set' command, the PARAM is the whole
+     parameter list to 'set' command.  For example, In command 'set
+     check type on', PARAM is 'check type' and VALUE is 'on'.
+
+'=memory-changed,thread-group=ID,addr=ADDR,len=LEN[,type="code"]'
+     Reports that bytes from ADDR to DATA + LEN were written in an
+     inferior.  The ID is the identifier of the thread group
+     corresponding to the affected inferior.  The optional 'type="code"'
+     part is reported if the memory written to holds executable code.
 
 \1f
-File: gdb.info,  Node: Config Names,  Next: Configure Options,  Prev: Separate Objdir,  Up: Installing GDB
+File: gdb.info,  Node: GDB/MI Breakpoint Information,  Next: GDB/MI Frame Information,  Prev: GDB/MI Async Records,  Up: GDB/MI Output Records
 
-C.4 Specifying Names for Hosts and Targets
-==========================================
+27.5.4 GDB/MI Breakpoint Information
+------------------------------------
 
-The specifications used for hosts and targets in the `configure' script
-are based on a three-part naming scheme, but some short predefined
-aliases are also supported.  The full naming scheme encodes three pieces
-of information in the following pattern:
+When GDB reports information about a breakpoint, a tracepoint, a
+watchpoint, or a catchpoint, it uses a tuple with the following fields:
 
-     ARCHITECTURE-VENDOR-OS
+'number'
+     The breakpoint number.  For a breakpoint that represents one
+     location of a multi-location breakpoint, this will be a dotted
+     pair, like '1.2'.
 
-   For example, you can use the alias `sun4' as a HOST argument, or as
-the value for TARGET in a `--target=TARGET' option.  The equivalent
-full name is `sparc-sun-sunos4'.
+'type'
+     The type of the breakpoint.  For ordinary breakpoints this will be
+     'breakpoint', but many values are possible.
 
-   The `configure' script accompanying GDB does not provide any query
-facility to list all supported host and target names or aliases.
-`configure' calls the Bourne shell script `config.sub' to map
-abbreviations to full names; you can read the script, if you wish, or
-you can use it to test your guesses on abbreviations--for example:
+'catch-type'
+     If the type of the breakpoint is 'catchpoint', then this indicates
+     the exact type of catchpoint.
 
-     % sh config.sub i386-linux
-     i386-pc-linux-gnu
-     % sh config.sub alpha-linux
-     alpha-unknown-linux-gnu
-     % sh config.sub hp9k700
-     hppa1.1-hp-hpux
-     % sh config.sub sun4
-     sparc-sun-sunos4.1.1
-     % sh config.sub sun3
-     m68k-sun-sunos4.1.1
-     % sh config.sub i986v
-     Invalid configuration `i986v': machine `i986v' not recognized
+'disp'
+     This is the breakpoint disposition--either 'del', meaning that the
+     breakpoint will be deleted at the next stop, or 'keep', meaning
+     that the breakpoint will not be deleted.
 
-`config.sub' is also distributed in the GDB source directory
-(`gdb-7.5', for version 7.5).
+'enabled'
+     This indicates whether the breakpoint is enabled, in which case the
+     value is 'y', or disabled, in which case the value is 'n'.  Note
+     that this is not the same as the field 'enable'.
 
-\1f
-File: gdb.info,  Node: Configure Options,  Next: System-wide configuration,  Prev: Config Names,  Up: Installing GDB
+'addr'
+     The address of the breakpoint.  This may be a hexidecimal number,
+     giving the address; or the string '<PENDING>', for a pending
+     breakpoint; or the string '<MULTIPLE>', for a breakpoint with
+     multiple locations.  This field will not be present if no address
+     can be determined.  For example, a watchpoint does not have an
+     address.
 
-C.5 `configure' Options
-=======================
+'func'
+     If known, the function in which the breakpoint appears.  If not
+     known, this field is not present.
 
-Here is a summary of the `configure' options and arguments that are
-most often useful for building GDB.  `configure' also has several other
-options not listed here.  *note (configure.info)What Configure Does::,
-for a full explanation of `configure'.
+'filename'
+     The name of the source file which contains this function, if known.
+     If not known, this field is not present.
 
-     configure [--help]
-               [--prefix=DIR]
-               [--exec-prefix=DIR]
-               [--srcdir=DIRNAME]
-               [--norecursion] [--rm]
-               [--target=TARGET]
-               HOST
+'fullname'
+     The full file name of the source file which contains this function,
+     if known.  If not known, this field is not present.
 
-You may introduce options with a single `-' rather than `--' if you
-prefer; but you may abbreviate option names if you use `--'.
+'line'
+     The line number at which this breakpoint appears, if known.  If not
+     known, this field is not present.
 
-`--help'
-     Display a quick summary of how to invoke `configure'.
+'at'
+     If the source file is not known, this field may be provided.  If
+     provided, this holds the address of the breakpoint, possibly
+     followed by a symbol name.
 
-`--prefix=DIR'
-     Configure the source to install programs and files under directory
-     `DIR'.
-
-`--exec-prefix=DIR'
-     Configure the source to install programs under directory `DIR'.
-
-`--srcdir=DIRNAME'
-     *Warning: using this option requires GNU `make', or another `make'
-     that implements the `VPATH' feature.*
-     Use this option to make configurations in directories separate
-     from the GDB source directories.  Among other things, you can use
-     this to build (or maintain) several configurations simultaneously,
-     in separate directories.  `configure' writes
-     configuration-specific files in the current directory, but
-     arranges for them to use the source in the directory DIRNAME.
-     `configure' creates directories under the working directory in
-     parallel to the source directories below DIRNAME.
-
-`--norecursion'
-     Configure only the directory level where `configure' is executed;
-     do not propagate configuration to subdirectories.
+'pending'
+     If this breakpoint is pending, this field is present and holds the
+     text used to set the breakpoint, as entered by the user.
 
-`--target=TARGET'
-     Configure GDB for cross-debugging programs running on the specified
-     TARGET.  Without this option, GDB is configured to debug programs
-     that run on the same machine (HOST) as GDB itself.
+'evaluated-by'
+     Where this breakpoint's condition is evaluated, either 'host' or
+     'target'.
 
-     There is no convenient way to generate a list of all available
-     targets.
+'thread'
+     If this is a thread-specific breakpoint, then this identifies the
+     thread in which the breakpoint can trigger.
 
-`HOST ...'
-     Configure GDB to run on the specified HOST.
+'task'
+     If this breakpoint is restricted to a particular Ada task, then
+     this field will hold the task identifier.
 
-     There is no convenient way to generate a list of all available
-     hosts.
+'cond'
+     If the breakpoint is conditional, this is the condition expression.
 
-   There are many other options available as well, but they are
-generally needed for special purposes only.
+'ignore'
+     The ignore count of the breakpoint.
 
-\1f
-File: gdb.info,  Node: System-wide configuration,  Prev: Configure Options,  Up: Installing GDB
+'enable'
+     The enable count of the breakpoint.
 
-C.6 System-wide configuration and settings
-==========================================
+'traceframe-usage'
+     FIXME.
 
-GDB can be configured to have a system-wide init file; this file will
-be read and executed at startup (*note What GDB does during startup:
-Startup.).
+'static-tracepoint-marker-string-id'
+     For a static tracepoint, the name of the static tracepoint marker.
 
-   Here is the corresponding configure option:
+'mask'
+     For a masked watchpoint, this is the mask.
 
-`--with-system-gdbinit=FILE'
-     Specify that the default location of the system-wide init file is
-     FILE.
+'pass'
+     A tracepoint's pass count.
 
-   If GDB has been configured with the option `--prefix=$prefix', it
-may be subject to relocation.  Two possible cases:
+'original-location'
+     The location of the breakpoint as originally specified by the user.
+     This field is optional.
 
-   * If the default location of this init file contains `$prefix', it
-     will be subject to relocation.  Suppose that the configure options
-     are `--prefix=$prefix --with-system-gdbinit=$prefix/etc/gdbinit';
-     if GDB is moved from `$prefix' to `$install', the system init file
-     is looked for as `$install/etc/gdbinit' instead of
-     `$prefix/etc/gdbinit'.
+'times'
+     The number of times the breakpoint has been hit.
 
-   * By contrast, if the default location does not contain the prefix,
-     it will not be relocated.  E.g. if GDB has been configured with
-     `--prefix=/usr/local --with-system-gdbinit=/usr/share/gdb/gdbinit',
-     then GDB will always look for `/usr/share/gdb/gdbinit', wherever
-     GDB is installed.
+'installed'
+     This field is only given for tracepoints.  This is either 'y',
+     meaning that the tracepoint is installed, or 'n', meaning that it
+     is not.
+
+'what'
+     Some extra data, the exact contents of which are type-dependent.
+
+   For example, here is what the output of '-break-insert' (*note GDB/MI
+Breakpoint Commands::) might be:
+
+     -> -break-insert main
+     <- ^done,bkpt={number="1",type="breakpoint",disp="keep",
+         enabled="y",addr="0x08048564",func="main",file="myprog.c",
+         fullname="/home/nickrob/myprog.c",line="68",thread-groups=["i1"],
+         times="0"}
+     <- (gdb)
 
 \1f
-File: gdb.info,  Node: Maintenance Commands,  Next: Remote Protocol,  Prev: Installing GDB,  Up: Top
+File: gdb.info,  Node: GDB/MI Frame Information,  Next: GDB/MI Thread Information,  Prev: GDB/MI Breakpoint Information,  Up: GDB/MI Output Records
 
-Appendix D Maintenance Commands
-*******************************
+27.5.5 GDB/MI Frame Information
+-------------------------------
 
-In addition to commands intended for GDB users, GDB includes a number
-of commands intended for GDB developers, that are not documented
-elsewhere in this manual.  These commands are provided here for
-reference.  (For commands that turn on debugging messages, see *Note
-Debugging Output::.)
+Response from many MI commands includes an information about stack
+frame.  This information is a tuple that may have the following fields:
 
-`maint agent [-at LOCATION,] EXPRESSION'
-`maint agent-eval [-at LOCATION,] EXPRESSION'
-     Translate the given EXPRESSION into remote agent bytecodes.  This
-     command is useful for debugging the Agent Expression mechanism
-     (*note Agent Expressions::).  The `agent' version produces an
-     expression useful for data collection, such as by tracepoints,
-     while `maint agent-eval' produces an expression that evaluates
-     directly to a result.  For instance, a collection expression for
-     `globa + globb' will include bytecodes to record four bytes of
-     memory at each of the addresses of `globa' and `globb', while
-     discarding the result of the addition, while an evaluation
-     expression will do the addition and return the sum.  If `-at' is
-     given, generate remote agent bytecode for LOCATION.  If not,
-     generate remote agent bytecode for current frame PC address.
+'level'
+     The level of the stack frame.  The innermost frame has the level of
+     zero.  This field is always present.
 
-`maint agent-printf FORMAT,EXPR,...'
-     Translate the given format string and list of argument expressions
-     into remote agent bytecodes and display them as a disassembled
-     list.  This command is useful for debugging the agent version of
-     dynamic printf (*note Dynamic Printf::.
+'func'
+     The name of the function corresponding to the frame.  This field
+     may be absent if GDB is unable to determine the function name.
 
-`maint info breakpoints'
-     Using the same format as `info breakpoints', display both the
-     breakpoints you've set explicitly, and those GDB is using for
-     internal purposes.  Internal breakpoints are shown with negative
-     breakpoint numbers.  The type column identifies what kind of
-     breakpoint is shown:
+'addr'
+     The code address for the frame.  This field is always present.
 
-    `breakpoint'
-          Normal, explicitly set breakpoint.
+'file'
+     The name of the source files that correspond to the frame's code
+     address.  This field may be absent.
 
-    `watchpoint'
-          Normal, explicitly set watchpoint.
+'line'
+     The source line corresponding to the frames' code address.  This
+     field may be absent.
 
-    `longjmp'
-          Internal breakpoint, used to handle correctly stepping through
-          `longjmp' calls.
+'from'
+     The name of the binary file (either executable or shared library)
+     the corresponds to the frame's code address.  This field may be
+     absent.
 
-    `longjmp resume'
-          Internal breakpoint at the target of a `longjmp'.
+\1f
+File: gdb.info,  Node: GDB/MI Thread Information,  Next: GDB/MI Ada Exception Information,  Prev: GDB/MI Frame Information,  Up: GDB/MI Output Records
 
-    `until'
-          Temporary internal breakpoint used by the GDB `until' command.
+27.5.6 GDB/MI Thread Information
+--------------------------------
 
-    `finish'
-          Temporary internal breakpoint used by the GDB `finish'
-          command.
+Whenever GDB has to report an information about a thread, it uses a
+tuple with the following fields:
 
-    `shlib events'
-          Shared library events.
+'id'
+     The numeric id assigned to the thread by GDB.  This field is always
+     present.
 
+'target-id'
+     Target-specific string identifying the thread.  This field is
+     always present.
 
-`set displaced-stepping'
-`show displaced-stepping'
-     Control whether or not GDB will do "displaced stepping" if the
-     target supports it.  Displaced stepping is a way to single-step
-     over breakpoints without removing them from the inferior, by
-     executing an out-of-line copy of the instruction that was
-     originally at the breakpoint location.  It is also known as
-     out-of-line single-stepping.
+'details'
+     Additional information about the thread provided by the target.  It
+     is supposed to be human-readable and not interpreted by the
+     frontend.  This field is optional.
 
-    `set displaced-stepping on'
-          If the target architecture supports it, GDB will use
-          displaced stepping to step over breakpoints.
+'state'
+     Either 'stopped' or 'running', depending on whether the thread is
+     presently running.  This field is always present.
 
-    `set displaced-stepping off'
-          GDB will not use displaced stepping to step over breakpoints,
-          even if such is supported by the target architecture.
+'core'
+     The value of this field is an integer number of the processor core
+     the thread was last seen on.  This field is optional.
 
-    `set displaced-stepping auto'
-          This is the default mode.  GDB will use displaced stepping
-          only if non-stop mode is active (*note Non-Stop Mode::) and
-          the target architecture supports displaced stepping.
+\1f
+File: gdb.info,  Node: GDB/MI Ada Exception Information,  Prev: GDB/MI Thread Information,  Up: GDB/MI Output Records
 
-`maint check-symtabs'
-     Check the consistency of psymtabs and symtabs.
+27.5.7 GDB/MI Ada Exception Information
+---------------------------------------
 
-`maint cplus first_component NAME'
-     Print the first C++ class/namespace component of NAME.
+Whenever a '*stopped' record is emitted because the program stopped
+after hitting an exception catchpoint (*note Set Catchpoints::), GDB
+provides the name of the exception that was raised via the
+'exception-name' field.
 
-`maint cplus namespace'
-     Print the list of possible C++ namespaces.
+\1f
+File: gdb.info,  Node: GDB/MI Simple Examples,  Next: GDB/MI Command Description Format,  Prev: GDB/MI Output Records,  Up: GDB/MI
 
-`maint demangle NAME'
-     Demangle a C++ or Objective-C mangled NAME.
+27.6 Simple Examples of GDB/MI Interaction
+==========================================
 
-`maint deprecate COMMAND [REPLACEMENT]'
-`maint undeprecate COMMAND'
-     Deprecate or undeprecate the named COMMAND.  Deprecated commands
-     cause GDB to issue a warning when you use them.  The optional
-     argument REPLACEMENT says which newer command should be used in
-     favor of the deprecated one; if it is given, GDB will mention the
-     replacement as part of the warning.
+This subsection presents several simple examples of interaction using
+the GDB/MI interface.  In these examples, '->' means that the following
+line is passed to GDB/MI as input, while '<-' means the output received
+from GDB/MI.
+
+   Note the line breaks shown in the examples are here only for
+readability, they don't appear in the real output.
+
+Setting a Breakpoint
+--------------------
+
+Setting a breakpoint generates synchronous output which contains
+detailed information of the breakpoint.
+
+     -> -break-insert main
+     <- ^done,bkpt={number="1",type="breakpoint",disp="keep",
+         enabled="y",addr="0x08048564",func="main",file="myprog.c",
+         fullname="/home/nickrob/myprog.c",line="68",thread-groups=["i1"],
+         times="0"}
+     <- (gdb)
+
+Program Execution
+-----------------
+
+Program execution generates asynchronous records and MI gives the reason
+that execution stopped.
+
+     -> -exec-run
+     <- ^running
+     <- (gdb)
+     <- *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",thread-id="0",
+        frame={addr="0x08048564",func="main",
+        args=[{name="argc",value="1"},{name="argv",value="0xbfc4d4d4"}],
+        file="myprog.c",fullname="/home/nickrob/myprog.c",line="68"}
+     <- (gdb)
+     -> -exec-continue
+     <- ^running
+     <- (gdb)
+     <- *stopped,reason="exited-normally"
+     <- (gdb)
+
+Quitting GDB
+------------
 
-`maint dump-me'
-     Cause a fatal signal in the debugger and force it to dump its core.
-     This is supported only on systems which support aborting a program
-     with the `SIGQUIT' signal.
+Quitting GDB just prints the result class '^exit'.
 
-`maint internal-error [MESSAGE-TEXT]'
-`maint internal-warning [MESSAGE-TEXT]'
-     Cause GDB to call the internal function `internal_error' or
-     `internal_warning' and hence behave as though an internal error or
-     internal warning has been detected.  In addition to reporting the
-     internal problem, these functions give the user the opportunity to
-     either quit GDB or create a core file of the current GDB session.
+     -> (gdb)
+     <- -gdb-exit
+     <- ^exit
 
-     These commands take an optional parameter MESSAGE-TEXT that is
-     used as the text of the error or warning message.
+   Please note that '^exit' is printed immediately, but it might take
+some time for GDB to actually exit.  During that time, GDB performs
+necessary cleanups, including killing programs being debugged or
+disconnecting from debug hardware, so the frontend should wait till GDB
+exits and should only forcibly kill GDB if it fails to exit in
+reasonable time.
 
-     Here's an example of using `internal-error':
+A Bad Command
+-------------
 
-          (gdb) maint internal-error testing, 1, 2
-          .../maint.c:121: internal-error: testing, 1, 2
-          A problem internal to GDB has been detected.  Further
-          debugging may prove unreliable.
-          Quit this debugging session? (y or n) n
-          Create a core file? (y or n) n
-          (gdb)
+Here's what happens if you pass a non-existent command:
 
-`maint set internal-error ACTION [ask|yes|no]'
-`maint show internal-error ACTION'
-`maint set internal-warning ACTION [ask|yes|no]'
-`maint show internal-warning ACTION'
-     When GDB reports an internal problem (error or warning) it gives
-     the user the opportunity to both quit GDB and create a core file
-     of the current GDB session.  These commands let you override the
-     default behaviour for each particular ACTION, described in the
-     table below.
+     -> -rubbish
+     <- ^error,msg="Undefined MI command: rubbish"
+     <- (gdb)
 
-    `quit'
-          You can specify that GDB should always (yes) or never (no)
-          quit.  The default is to ask the user what to do.
+\1f
+File: gdb.info,  Node: GDB/MI Command Description Format,  Next: GDB/MI Breakpoint Commands,  Prev: GDB/MI Simple Examples,  Up: GDB/MI
 
-    `corefile'
-          You can specify that GDB should always (yes) or never (no)
-          create a core file.  The default is to ask the user what to
-          do.
+27.7 GDB/MI Command Description Format
+======================================
 
-`maint packet TEXT'
-     If GDB is talking to an inferior via the serial protocol, then
-     this command sends the string TEXT to the inferior, and displays
-     the response packet.  GDB supplies the initial `$' character, the
-     terminating `#' character, and the checksum.
+The remaining sections describe blocks of commands.  Each block of
+commands is laid out in a fashion similar to this section.
 
-`maint print architecture [FILE]'
-     Print the entire architecture configuration.  The optional argument
-     FILE names the file where the output goes.
+Motivation
+----------
 
-`maint print c-tdesc'
-     Print the current target description (*note Target Descriptions::)
-     as a C source file.  The created source file can be used in GDB
-     when an XML parser is not available to parse the description.
+The motivation for this collection of commands.
 
-`maint print dummy-frames'
-     Prints the contents of GDB's internal dummy-frame stack.
+Introduction
+------------
 
-          (gdb) b add
-          ...
-          (gdb) print add(2,3)
-          Breakpoint 2, add (a=2, b=3) at ...
-          58     return (a + b);
-          The program being debugged stopped while in a function called from GDB.
-          ...
-          (gdb) maint print dummy-frames
-          0x1a57c80: pc=0x01014068 fp=0x0200bddc sp=0x0200bdd6
-           top=0x0200bdd4 id={stack=0x200bddc,code=0x101405c}
-           call_lo=0x01014000 call_hi=0x01014001
-          (gdb)
+A brief introduction to this collection of commands as a whole.
 
-     Takes an optional file parameter.
+Commands
+--------
 
-`maint print registers [FILE]'
-`maint print raw-registers [FILE]'
-`maint print cooked-registers [FILE]'
-`maint print register-groups [FILE]'
-`maint print remote-registers [FILE]'
-     Print GDB's internal register data structures.
+For each command in the block, the following is described:
 
-     The command `maint print raw-registers' includes the contents of
-     the raw register cache; the command `maint print cooked-registers'
-     includes the (cooked) value of all registers, including registers
-     which aren't available on the target nor visible to user; the
-     command `maint print register-groups' includes the groups that
-     each register is a member of; and the command `maint print
-     remote-registers' includes the remote target's register numbers
-     and offsets in the `G' packets.  *Note Registers:
-     (gdbint)Registers.
+Synopsis
+........
 
-     These commands take an optional parameter, a file name to which to
-     write the information.
+      -command ARGS...
 
-`maint print reggroups [FILE]'
-     Print GDB's internal register group data structures.  The optional
-     argument FILE tells to what file to write the information.
+Result
+......
 
-     The register groups info looks like this:
+GDB Command
+...........
 
-          (gdb) maint print reggroups
-           Group      Type
-           general    user
-           float      user
-           all        user
-           vector     user
-           system     user
-           save       internal
-           restore    internal
+The corresponding GDB CLI command(s), if any.
 
-`flushregs'
-     This command forces GDB to flush its internal register cache.
+Example
+.......
 
-`maint print objfiles'
-     Print a dump of all known object files.  For each object file, this
-     command prints its name, address in memory, and all of its psymtabs
-     and symtabs.
+Example(s) formatted for readability.  Some of the described commands
+have not been implemented yet and these are labeled N.A. (not
+available).
 
-`maint print section-scripts [REGEXP]'
-     Print a dump of scripts specified in the `.debug_gdb_section'
-     section.  If REGEXP is specified, only print scripts loaded by
-     object files matching REGEXP.  For each script, this command
-     prints its name as specified in the objfile, and the full path if
-     known.  *Note dotdebug_gdb_scripts section::.
+\1f
+File: gdb.info,  Node: GDB/MI Breakpoint Commands,  Next: GDB/MI Catchpoint Commands,  Prev: GDB/MI Command Description Format,  Up: GDB/MI
 
-`maint print statistics'
-     This command prints, for each object file in the program, various
-     data about that object file followed by the byte cache ("bcache")
-     statistics for the object file.  The objfile data includes the
-     number of minimal, partial, full, and stabs symbols, the number of
-     types defined by the objfile, the number of as yet unexpanded psym
-     tables, the number of line tables and string tables, and the
-     amount of memory used by the various tables.  The bcache
-     statistics include the counts, sizes, and counts of duplicates of
-     all and unique objects, max, average, and median entry size, total
-     memory used and its overhead and savings, and various measures of
-     the hash table size and chain lengths.
-
-`maint print target-stack'
-     A "target" is an interface between the debugger and a particular
-     kind of file or process.  Targets can be stacked in "strata", so
-     that more than one target can potentially respond to a request.
-     In particular, memory accesses will walk down the stack of targets
-     until they find a target that is interested in handling that
-     particular address.
+27.8 GDB/MI Breakpoint Commands
+===============================
 
-     This command prints a short description of each layer that was
-     pushed on the "target stack", starting from the top layer down to
-     the bottom one.
+This section documents GDB/MI commands for manipulating breakpoints.
 
-`maint print type EXPR'
-     Print the type chain for a type specified by EXPR.  The argument
-     can be either a type name or a symbol.  If it is a symbol, the
-     type of that symbol is described.  The type chain produced by this
-     command is a recursive definition of the data type as stored in
-     GDB's data structures, including its flags and contained types.
+The '-break-after' Command
+--------------------------
 
-`maint set dwarf2 always-disassemble'
+Synopsis
+........
 
-`maint show dwarf2 always-disassemble'
-     Control the behavior of `info address' when using DWARF debugging
-     information.
+      -break-after NUMBER COUNT
 
-     The default is `off', which means that GDB should try to describe
-     a variable's location in an easily readable format.  When `on',
-     GDB will instead display the DWARF location expression in an
-     assembly-like format.  Note that some locations are too complex
-     for GDB to describe simply; in this case you will always see the
-     disassembly form.
+   The breakpoint number NUMBER is not in effect until it has been hit
+COUNT times.  To see how this is reflected in the output of the
+'-break-list' command, see the description of the '-break-list' command
+below.
 
-     Here is an example of the resulting disassembly:
+GDB Command
+...........
 
-          (gdb) info addr argc
-          Symbol "argc" is a complex DWARF expression:
-               1: DW_OP_fbreg 0
+The corresponding GDB command is 'ignore'.
+
+Example
+.......
+
+     (gdb)
+     -break-insert main
+     ^done,bkpt={number="1",type="breakpoint",disp="keep",
+     enabled="y",addr="0x000100d0",func="main",file="hello.c",
+     fullname="/home/foo/hello.c",line="5",thread-groups=["i1"],
+     times="0"}
+     (gdb)
+     -break-after 1 3
+     ~
+     ^done
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+     line="5",thread-groups=["i1"],times="0",ignore="3"}]}
+     (gdb)
+
+The '-break-commands' Command
+-----------------------------
 
-     For more information on these expressions, see the DWARF standard
-     (http://www.dwarfstd.org/).
+Synopsis
+........
 
-`maint set dwarf2 max-cache-age'
-`maint show dwarf2 max-cache-age'
-     Control the DWARF 2 compilation unit cache.
+      -break-commands NUMBER [ COMMAND1 ... COMMANDN ]
 
-     In object files with inter-compilation-unit references, such as
-     those produced by the GCC option `-feliminate-dwarf2-dups', the
-     DWARF 2 reader needs to frequently refer to previously read
-     compilation units.  This setting controls how long a compilation
-     unit will remain in the cache if it is not referenced.  A higher
-     limit means that cached compilation units will be stored in memory
-     longer, and more total memory will be used.  Setting it to zero
-     disables caching, which will slow down GDB startup, but reduce
-     memory consumption.
+   Specifies the CLI commands that should be executed when breakpoint
+NUMBER is hit.  The parameters COMMAND1 to COMMANDN are the commands.
+If no command is specified, any previously-set commands are cleared.
+*Note Break Commands::.  Typical use of this functionality is tracing a
+program, that is, printing of values of some variables whenever
+breakpoint is hit and then continuing.
 
-`maint set profile'
-`maint show profile'
-     Control profiling of GDB.
+GDB Command
+...........
 
-     Profiling will be disabled until you use the `maint set profile'
-     command to enable it.  When you enable profiling, the system will
-     begin collecting timing and execution count data; when you disable
-     profiling or exit GDB, the results will be written to a log file.
-     Remember that if you use profiling, GDB will overwrite the
-     profiling log file (often called `gmon.out').  If you have a
-     record of important profiling data in a `gmon.out' file, be sure
-     to move it to a safe location.
+The corresponding GDB command is 'commands'.
 
-     Configuring with `--enable-profiling' arranges for GDB to be
-     compiled with the `-pg' compiler option.
+Example
+.......
 
-`maint set show-debug-regs'
-`maint show show-debug-regs'
-     Control whether to show variables that mirror the hardware debug
-     registers.  Use `ON' to enable, `OFF' to disable.  If enabled, the
-     debug registers values are shown when GDB inserts or removes a
-     hardware breakpoint or watchpoint, and when the inferior triggers
-     a hardware-assisted breakpoint or watchpoint.
+     (gdb)
+     -break-insert main
+     ^done,bkpt={number="1",type="breakpoint",disp="keep",
+     enabled="y",addr="0x000100d0",func="main",file="hello.c",
+     fullname="/home/foo/hello.c",line="5",thread-groups=["i1"],
+     times="0"}
+     (gdb)
+     -break-commands 1 "print v" "continue"
+     ^done
+     (gdb)
 
-`maint set show-all-tib'
-`maint show show-all-tib'
-     Control whether to show all non zero areas within a 1k block
-     starting at thread local base, when using the `info w32
-     thread-information-block' command.
+The '-break-condition' Command
+------------------------------
 
-`maint space'
-     Control whether to display memory usage for each command.  If set
-     to a nonzero value, GDB will display how much memory each command
-     took, following the command's own output.  This can also be
-     requested by invoking GDB with the `--statistics' command-line
-     switch (*note Mode Options::).
-
-`maint time'
-     Control whether to display the execution time of GDB for each
-     command.  If set to a nonzero value, GDB will display how much
-     time it took to execute each command, following the command's own
-     output.  Both CPU time and wallclock time are printed.  Printing
-     both is useful when trying to determine whether the cost is CPU
-     or, e.g., disk/network, latency.  Note that the CPU time printed
-     is for GDB only, it does not include the execution time of the
-     inferior because there's no mechanism currently to compute how
-     much time was spent by GDB and how much time was spent by the
-     program been debugged.  This can also be requested by invoking GDB
-     with the `--statistics' command-line switch (*note Mode Options::).
-
-`maint translate-address [SECTION] ADDR'
-     Find the symbol stored at the location specified by the address
-     ADDR and an optional section name SECTION.  If found, GDB prints
-     the name of the closest symbol and an offset from the symbol's
-     location to the specified address.  This is similar to the `info
-     address' command (*note Symbols::), except that this command also
-     allows to find symbols in other sections.
+Synopsis
+........
 
-     If section was not specified, the section in which the symbol was
-     found is also printed.  For dynamically linked executables, the
-     name of executable or shared library containing the symbol is
-     printed as well.
+      -break-condition NUMBER EXPR
 
+   Breakpoint NUMBER will stop the program only if the condition in EXPR
+is true.  The condition becomes part of the '-break-list' output (see
+the description of the '-break-list' command below).
 
-   The following command is useful for non-interactive invocations of
-GDB, such as in the test suite.
+GDB Command
+...........
 
-`set watchdog NSEC'
-     Set the maximum number of seconds GDB will wait for the target
-     operation to finish.  If this time expires, GDB reports and error
-     and the command is aborted.
+The corresponding GDB command is 'condition'.
+
+Example
+.......
+
+     (gdb)
+     -break-condition 1 1
+     ^done
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+     line="5",cond="1",thread-groups=["i1"],times="0",ignore="3"}]}
+     (gdb)
+
+The '-break-delete' Command
+---------------------------
 
-`show watchdog'
-     Show the current setting of the target wait timeout.
+Synopsis
+........
 
-\1f
-File: gdb.info,  Node: Remote Protocol,  Next: Agent Expressions,  Prev: Maintenance Commands,  Up: Top
+      -break-delete ( BREAKPOINT )+
 
-Appendix E GDB Remote Serial Protocol
-*************************************
+   Delete the breakpoint(s) whose number(s) are specified in the
+argument list.  This is obviously reflected in the breakpoint list.
 
-* Menu:
+GDB Command
+...........
 
-* Overview::
-* Packets::
-* Stop Reply Packets::
-* General Query Packets::
-* Architecture-Specific Protocol Details::
-* Tracepoint Packets::
-* Host I/O Packets::
-* Interrupts::
-* Notification Packets::
-* Remote Non-Stop::
-* Packet Acknowledgment::
-* Examples::
-* File-I/O Remote Protocol Extension::
-* Library List Format::
-* Library List Format for SVR4 Targets::
-* Memory Map Format::
-* Thread List Format::
-* Traceframe Info Format::
+The corresponding GDB command is 'delete'.
 
-\1f
-File: gdb.info,  Node: Overview,  Next: Packets,  Up: Remote Protocol
-
-E.1 Overview
-============
-
-There may be occasions when you need to know something about the
-protocol--for example, if there is only one serial port to your target
-machine, you might want your program to do something special if it
-recognizes a packet meant for GDB.
-
-   In the examples below, `->' and `<-' are used to indicate
-transmitted and received data, respectively.
-
-   All GDB commands and responses (other than acknowledgments and
-notifications, see *Note Notification Packets::) are sent as a PACKET.
-A PACKET is introduced with the character `$', the actual PACKET-DATA,
-and the terminating character `#' followed by a two-digit CHECKSUM:
-
-     `$'PACKET-DATA`#'CHECKSUM
-   The two-digit CHECKSUM is computed as the modulo 256 sum of all
-characters between the leading `$' and the trailing `#' (an eight bit
-unsigned checksum).
-
-   Implementors should note that prior to GDB 5.0 the protocol
-specification also included an optional two-digit SEQUENCE-ID:
-
-     `$'SEQUENCE-ID`:'PACKET-DATA`#'CHECKSUM
-
-That SEQUENCE-ID was appended to the acknowledgment.  GDB has never
-output SEQUENCE-IDs.  Stubs that handle packets added since GDB 5.0
-must not accept SEQUENCE-ID.
-
-   When either the host or the target machine receives a packet, the
-first response expected is an acknowledgment: either `+' (to indicate
-the package was received correctly) or `-' (to request retransmission):
-
-     -> `$'PACKET-DATA`#'CHECKSUM
-     <- `+'
-   The `+'/`-' acknowledgments can be disabled once a connection is
-established.  *Note Packet Acknowledgment::, for details.
-
-   The host (GDB) sends COMMANDs, and the target (the debugging stub
-incorporated in your program) sends a RESPONSE.  In the case of step
-and continue COMMANDs, the response is only sent when the operation has
-completed, and the target has again stopped all threads in all attached
-processes.  This is the default all-stop mode behavior, but the remote
-protocol also supports GDB's non-stop execution mode; see *Note Remote
-Non-Stop::, for details.
-
-   PACKET-DATA consists of a sequence of characters with the exception
-of `#' and `$' (see `X' packet for additional exceptions).
-
-   Fields within the packet should be separated using `,' `;' or `:'.
-Except where otherwise noted all numbers are represented in HEX with
-leading zeros suppressed.
-
-   Implementors should note that prior to GDB 5.0, the character `:'
-could not appear as the third character in a packet (as it would
-potentially conflict with the SEQUENCE-ID).
-
-   Binary data in most packets is encoded either as two hexadecimal
-digits per byte of binary data.  This allowed the traditional remote
-protocol to work over connections which were only seven-bit clean.
-Some packets designed more recently assume an eight-bit clean
-connection, and use a more efficient encoding to send and receive
-binary data.
-
-   The binary data representation uses `7d' (ASCII `}') as an escape
-character.  Any escaped byte is transmitted as the escape character
-followed by the original character XORed with `0x20'.  For example, the
-byte `0x7d' would be transmitted as the two bytes `0x7d 0x5d'.  The
-bytes `0x23' (ASCII `#'), `0x24' (ASCII `$'), and `0x7d' (ASCII `}')
-must always be escaped.  Responses sent by the stub must also escape
-`0x2a' (ASCII `*'), so that it is not interpreted as the start of a
-run-length encoded sequence (described next).
-
-   Response DATA can be run-length encoded to save space.  Run-length
-encoding replaces runs of identical characters with one instance of the
-repeated character, followed by a `*' and a repeat count.  The repeat
-count is itself sent encoded, to avoid binary characters in DATA: a
-value of N is sent as `N+29'.  For a repeat count greater or equal to
-3, this produces a printable ASCII character, e.g. a space (ASCII code
-32) for a repeat count of 3.  (This is because run-length encoding
-starts to win for counts 3 or more.)  Thus, for example, `0* ' is a
-run-length encoding of "0000": the space character after `*' means
-repeat the leading `0' `32 - 29 = 3' more times.
-
-   The printable characters `#' and `$' or with a numeric value greater
-than 126 must not be used.  Runs of six repeats (`#') or seven repeats
-(`$') can be expanded using a repeat count of only five (`"').  For
-example, `00000000' can be encoded as `0*"00'.
-
-   The error response returned for some packets includes a two character
-error number.  That number is not well defined.
-
-   For any COMMAND not supported by the stub, an empty response
-(`$#00') should be returned.  That way it is possible to extend the
-protocol.  A newer GDB can tell if a packet is supported based on that
-response.
-
-   At a minimum, a stub is required to support the `g' and `G' commands
-for register access, and the `m' and `M' commands for memory access.
-Stubs that only control single-threaded targets can implement run
-control with the `c' (continue), and `s' (step) commands.  Stubs that
-support multi-threading targets should support the `vCont' command.
-All other commands are optional.
+Example
+.......
 
-\1f
-File: gdb.info,  Node: Packets,  Next: Stop Reply Packets,  Prev: Overview,  Up: Remote Protocol
+     (gdb)
+     -break-delete 1
+     ^done
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="0",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[]}
+     (gdb)
 
-E.2 Packets
-===========
+The '-break-disable' Command
+----------------------------
 
-The following table provides a complete list of all currently defined
-COMMANDs and their corresponding response DATA.  *Note File-I/O Remote
-Protocol Extension::, for details about the File I/O extension of the
-remote protocol.
-
-   Each packet's description has a template showing the packet's overall
-syntax, followed by an explanation of the packet's meaning.  We include
-spaces in some of the templates for clarity; these are not part of the
-packet's syntax.  No GDB packet uses spaces to separate its components.
-For example, a template like `foo BAR BAZ' describes a packet
-beginning with the three ASCII bytes `foo', followed by a BAR, followed
-directly by a BAZ.  GDB does not transmit a space character between the
-`foo' and the BAR, or between the BAR and the BAZ.
-
-   Several packets and replies include a THREAD-ID field to identify a
-thread.  Normally these are positive numbers with a target-specific
-interpretation, formatted as big-endian hex strings.  A THREAD-ID can
-also be a literal `-1' to indicate all threads, or `0' to pick any
-thread.
-
-   In addition, the remote protocol supports a multiprocess feature in
-which the THREAD-ID syntax is extended to optionally include both
-process and thread ID fields, as `pPID.TID'.  The PID (process) and TID
-(thread) components each have the format described above: a positive
-number with target-specific interpretation formatted as a big-endian
-hex string, literal `-1' to indicate all processes or threads
-(respectively), or `0' to indicate an arbitrary process or thread.
-Specifying just a process, as `pPID', is equivalent to `pPID.-1'.  It
-is an error to specify all processes but a specific thread, such as
-`p-1.TID'.  Note that the `p' prefix is _not_ used for those packets
-and replies explicitly documented to include a process ID, rather than
-a THREAD-ID.
+Synopsis
+........
 
-   The multiprocess THREAD-ID syntax extensions are only used if both
-GDB and the stub report support for the `multiprocess' feature using
-`qSupported'.  *Note multiprocess extensions::, for more information.
-
-   Note that all packet forms beginning with an upper- or lower-case
-letter, other than those described here, are reserved for future use.
-
-   Here are the packet descriptions.
+      -break-disable ( BREAKPOINT )+
 
-`!'
-     Enable extended mode.  In extended mode, the remote server is made
-     persistent.  The `R' packet is used to restart the program being
-     debugged.
-
-     Reply:
-    `OK'
-          The remote target both supports and has enabled extended mode.
-
-`?'
-     Indicate the reason the target halted.  The reply is the same as
-     for step and continue.  This packet has a special interpretation
-     when the target is in non-stop mode; see *Note Remote Non-Stop::.
-
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-`A ARGLEN,ARGNUM,ARG,...'
-     Initialized `argv[]' array passed into program. ARGLEN specifies
-     the number of bytes in the hex encoded byte stream ARG.  See
-     `gdbserver' for more details.
-
-     Reply:
-    `OK'
-          The arguments were set.
-
-    `E NN'
-          An error occurred.
-
-`b BAUD'
-     (Don't use this packet; its behavior is not well-defined.)  Change
-     the serial line speed to BAUD.
-
-     JTC: _When does the transport layer state change?  When it's
-     received, or after the ACK is transmitted.  In either case, there
-     are problems if the command or the acknowledgment packet is
-     dropped._
-
-     Stan: _If people really wanted to add something like this, and get
-     it working for the first time, they ought to modify ser-unix.c to
-     send some kind of out-of-band message to a specially-setup stub
-     and have the switch happen "in between" packets, so that from
-     remote protocol's point of view, nothing actually happened._
-
-`B ADDR,MODE'
-     Set (MODE is `S') or clear (MODE is `C') a breakpoint at ADDR.
-
-     Don't use this packet.  Use the `Z' and `z' packets instead (*note
-     insert breakpoint or watchpoint packet::).
-
-`bc'
-     Backward continue.  Execute the target system in reverse.  No
-     parameter.  *Note Reverse Execution::, for more information.
-
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-`bs'
-     Backward single step.  Execute one instruction in reverse.  No
-     parameter.  *Note Reverse Execution::, for more information.
-
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-`c [ADDR]'
-     Continue.  ADDR is address to resume.  If ADDR is omitted, resume
-     at current address.
-
-     This packet is deprecated for multi-threading support.  *Note
-     vCont packet::.
+   Disable the named BREAKPOINT(s).  The field 'enabled' in the break
+list is now set to 'n' for the named BREAKPOINT(s).
 
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
+GDB Command
+...........
 
-`C SIG[;ADDR]'
-     Continue with signal SIG (hex signal number).  If `;ADDR' is
-     omitted, resume at same address.
+The corresponding GDB command is 'disable'.
+
+Example
+.......
+
+     (gdb)
+     -break-disable 2
+     ^done
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="2",type="breakpoint",disp="keep",enabled="n",
+     addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+     line="5",thread-groups=["i1"],times="0"}]}
+     (gdb)
+
+The '-break-enable' Command
+---------------------------
 
-     This packet is deprecated for multi-threading support.  *Note
-     vCont packet::.
+Synopsis
+........
 
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
+      -break-enable ( BREAKPOINT )+
 
-`d'
-     Toggle debug flag.
+   Enable (previously disabled) BREAKPOINT(s).
 
-     Don't use this packet; instead, define a general set packet (*note
-     General Query Packets::).
+GDB Command
+...........
 
-`D'
-`D;PID'
-     The first form of the packet is used to detach GDB from the remote
-     system.  It is sent to the remote target before GDB disconnects
-     via the `detach' command.
+The corresponding GDB command is 'enable'.
+
+Example
+.......
+
+     (gdb)
+     -break-enable 2
+     ^done
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="2",type="breakpoint",disp="keep",enabled="y",
+     addr="0x000100d0",func="main",file="hello.c",fullname="/home/foo/hello.c",
+     line="5",thread-groups=["i1"],times="0"}]}
+     (gdb)
+
+The '-break-info' Command
+-------------------------
 
-     The second form, including a process ID, is used when multiprocess
-     protocol extensions are enabled (*note multiprocess extensions::),
-     to detach only a specific process.  The PID is specified as a
-     big-endian hex string.
+Synopsis
+........
 
-     Reply:
-    `OK'
-          for success
+      -break-info BREAKPOINT
 
-    `E NN'
-          for an error
+   Get information about a single breakpoint.
 
-`F RC,EE,CF;XX'
-     A reply from GDB to an `F' packet sent by the target.  This is
-     part of the File-I/O protocol extension.  *Note File-I/O Remote
-     Protocol Extension::, for the specification.
-
-`g'
-     Read general registers.
-
-     Reply:
-    `XX...'
-          Each byte of register data is described by two hex digits.
-          The bytes with the register are transmitted in target byte
-          order.  The size of each register and their position within
-          the `g' packet are determined by the GDB internal gdbarch
-          functions `DEPRECATED_REGISTER_RAW_SIZE' and
-          `gdbarch_register_name'.  The specification of several
-          standard `g' packets is specified below.
-
-          When reading registers from a trace frame (*note Using the
-          Collected Data: Analyze Collected Data.), the stub may also
-          return a string of literal `x''s in place of the register
-          data digits, to indicate that the corresponding register has
-          not been collected, thus its value is unavailable.  For
-          example, for an architecture with 4 registers of 4 bytes
-          each, the following reply indicates to GDB that registers 0
-          and 2 have not been collected, while registers 1 and 3 have
-          been collected, and both have zero value:
-
-               -> `g'
-               <- `xxxxxxxx00000000xxxxxxxx00000000'
-
-    `E NN'
-          for an error.
-
-`G XX...'
-     Write general registers.  *Note read registers packet::, for a
-     description of the XX... data.
-
-     Reply:
-    `OK'
-          for success
-
-    `E NN'
-          for an error
+   The result is a table of breakpoints.  *Note GDB/MI Breakpoint
+Information::, for details on the format of each breakpoint in the
+table.
 
-`H OP THREAD-ID'
-     Set thread for subsequent operations (`m', `M', `g', `G', et.al.).
-     OP depends on the operation to be performed: it should be `c' for
-     step and continue operations (note that this is deprecated,
-     supporting the `vCont' command is a better option), `g' for other
-     operations.  The thread designator THREAD-ID has the format and
-     interpretation described in *Note thread-id syntax::.
+GDB Command
+...........
 
-     Reply:
-    `OK'
-          for success
+The corresponding GDB command is 'info break BREAKPOINT'.
 
-    `E NN'
-          for an error
+Example
+.......
 
-`i [ADDR[,NNN]]'
-     Step the remote target by a single clock cycle.  If `,NNN' is
-     present, cycle step NNN cycles.  If ADDR is present, cycle step
-     starting at that address.
-
-`I'
-     Signal, then cycle step.  *Note step with signal packet::.  *Note
-     cycle step packet::.
-
-`k'
-     Kill request.
-
-     FIXME: _There is no description of how to operate when a specific
-     thread context has been selected (i.e. does 'k' kill only that
-     thread?)_.
-
-`m ADDR,LENGTH'
-     Read LENGTH bytes of memory starting at address ADDR.  Note that
-     ADDR may not be aligned to any particular boundary.
-
-     The stub need not use any particular size or alignment when
-     gathering data from memory for the response; even if ADDR is
-     word-aligned and LENGTH is a multiple of the word size, the stub
-     is free to use byte accesses, or not.  For this reason, this
-     packet may not be suitable for accessing memory-mapped I/O devices.  
-
-     Reply:
-    `XX...'
-          Memory contents; each byte is transmitted as a two-digit
-          hexadecimal number.  The reply may contain fewer bytes than
-          requested if the server was able to read only part of the
-          region of memory.
-
-    `E NN'
-          NN is errno
-
-`M ADDR,LENGTH:XX...'
-     Write LENGTH bytes of memory starting at address ADDR.  XX... is
-     the data; each byte is transmitted as a two-digit hexadecimal
-     number.
-
-     Reply:
-    `OK'
-          for success
-
-    `E NN'
-          for an error (this includes the case where only part of the
-          data was written).
-
-`p N'
-     Read the value of register N; N is in hex.  *Note read registers
-     packet::, for a description of how the returned register value is
-     encoded.
-
-     Reply:
-    `XX...'
-          the register's value
-
-    `E NN'
-          for an error
+N.A.
 
-    `'
-          Indicating an unrecognized QUERY.
+The '-break-insert' Command
+---------------------------
 
-`P N...=R...'
-     Write register N... with value R....  The register number N is in
-     hexadecimal, and R... contains two hex digits for each byte in the
-     register (target byte order).
+Synopsis
+........
+
+      -break-insert [ -t ] [ -h ] [ -f ] [ -d ] [ -a ]
+         [ -c CONDITION ] [ -i IGNORE-COUNT ]
+         [ -p THREAD-ID ] [ LOCATION ]
+
+If specified, LOCATION, can be one of:
+
+   * function
+   * filename:linenum
+   * filename:function
+   * *address
+
+   The possible optional parameters of this command are:
+
+'-t'
+     Insert a temporary breakpoint.
+'-h'
+     Insert a hardware breakpoint.
+'-f'
+     If LOCATION cannot be parsed (for example if it refers to unknown
+     files or functions), create a pending breakpoint.  Without this
+     flag, GDB will report an error, and won't create a breakpoint, if
+     LOCATION cannot be parsed.
+'-d'
+     Create a disabled breakpoint.
+'-a'
+     Create a tracepoint.  *Note Tracepoints::.  When this parameter is
+     used together with '-h', a fast tracepoint is created.
+'-c CONDITION'
+     Make the breakpoint conditional on CONDITION.
+'-i IGNORE-COUNT'
+     Initialize the IGNORE-COUNT.
+'-p THREAD-ID'
+     Restrict the breakpoint to the specified THREAD-ID.
+
+Result
+......
 
-     Reply:
-    `OK'
-          for success
+*Note GDB/MI Breakpoint Information::, for details on the format of the
+resulting breakpoint.
 
-    `E NN'
-          for an error
+   Note: this format is open to change.
 
-`q NAME PARAMS...'
-`Q NAME PARAMS...'
-     General query (`q') and set (`Q').  These packets are described
-     fully in *Note General Query Packets::.
+GDB Command
+...........
 
-`r'
-     Reset the entire system.
+The corresponding GDB commands are 'break', 'tbreak', 'hbreak', and
+'thbreak'.
+
+Example
+.......
+
+     (gdb)
+     -break-insert main
+     ^done,bkpt={number="1",addr="0x0001072c",file="recursive2.c",
+     fullname="/home/foo/recursive2.c,line="4",thread-groups=["i1"],
+     times="0"}
+     (gdb)
+     -break-insert -t foo
+     ^done,bkpt={number="2",addr="0x00010774",file="recursive2.c",
+     fullname="/home/foo/recursive2.c,line="11",thread-groups=["i1"],
+     times="0"}
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="2",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x0001072c", func="main",file="recursive2.c",
+     fullname="/home/foo/recursive2.c,"line="4",thread-groups=["i1"],
+     times="0"},
+     bkpt={number="2",type="breakpoint",disp="del",enabled="y",
+     addr="0x00010774",func="foo",file="recursive2.c",
+     fullname="/home/foo/recursive2.c",line="11",thread-groups=["i1"],
+     times="0"}]}
+     (gdb)
+
+The '-dprintf-insert' Command
+-----------------------------
 
-     Don't use this packet; use the `R' packet instead.
+Synopsis
+........
+
+      -dprintf-insert [ -t ] [ -f ] [ -d ]
+         [ -c CONDITION ] [ -i IGNORE-COUNT ]
+         [ -p THREAD-ID ] [ LOCATION ] [ FORMAT ]
+         [ ARGUMENT ]
+
+If specified, LOCATION, can be one of:
+
+   * FUNCTION
+   * FILENAME:LINENUM
+   * FILENAME:function
+   * *ADDRESS
+
+   The possible optional parameters of this command are:
+
+'-t'
+     Insert a temporary breakpoint.
+'-f'
+     If LOCATION cannot be parsed (for example, if it refers to unknown
+     files or functions), create a pending breakpoint.  Without this
+     flag, GDB will report an error, and won't create a breakpoint, if
+     LOCATION cannot be parsed.
+'-d'
+     Create a disabled breakpoint.
+'-c CONDITION'
+     Make the breakpoint conditional on CONDITION.
+'-i IGNORE-COUNT'
+     Set the ignore count of the breakpoint (*note ignore count:
+     Conditions.) to IGNORE-COUNT.
+'-p THREAD-ID'
+     Restrict the breakpoint to the specified THREAD-ID.
+
+Result
+......
 
-`R XX'
-     Restart the program being debugged.  XX, while needed, is ignored.
-     This packet is only available in extended mode (*note extended
-     mode::).
+*Note GDB/MI Breakpoint Information::, for details on the format of the
+resulting breakpoint.
 
-     The `R' packet has no reply.
+GDB Command
+...........
 
-`s [ADDR]'
-     Single step.  ADDR is the address at which to resume.  If ADDR is
-     omitted, resume at same address.
+The corresponding GDB command is 'dprintf'.
+
+Example
+.......
+
+     (gdb)
+     4-dprintf-insert foo "At foo entry\n"
+     4^done,bkpt={number="1",type="dprintf",disp="keep",enabled="y",
+     addr="0x000000000040061b",func="foo",file="mi-dprintf.c",
+     fullname="mi-dprintf.c",line="25",thread-groups=["i1"],
+     times="0",script={"printf \"At foo entry\\n\"","continue"},
+     original-location="foo"}
+     (gdb)
+     5-dprintf-insert 26 "arg=%d, g=%d\n" arg g
+     5^done,bkpt={number="2",type="dprintf",disp="keep",enabled="y",
+     addr="0x000000000040062a",func="foo",file="mi-dprintf.c",
+     fullname="mi-dprintf.c",line="26",thread-groups=["i1"],
+     times="0",script={"printf \"arg=%d, g=%d\\n\", arg, g","continue"},
+     original-location="mi-dprintf.c:26"}
+     (gdb)
+
+The '-break-list' Command
+-------------------------
 
-     This packet is deprecated for multi-threading support.  *Note
-     vCont packet::.
+Synopsis
+........
+
+      -break-list
+
+   Displays the list of inserted breakpoints, showing the following
+fields:
+
+'Number'
+     number of the breakpoint
+'Type'
+     type of the breakpoint: 'breakpoint' or 'watchpoint'
+'Disposition'
+     should the breakpoint be deleted or disabled when it is hit: 'keep'
+     or 'nokeep'
+'Enabled'
+     is the breakpoint enabled or no: 'y' or 'n'
+'Address'
+     memory location at which the breakpoint is set
+'What'
+     logical location of the breakpoint, expressed by function name,
+     file name, line number
+'Thread-groups'
+     list of thread groups to which this breakpoint applies
+'Times'
+     number of times the breakpoint has been hit
+
+   If there are no breakpoints or watchpoints, the 'BreakpointTable'
+'body' field is an empty list.
+
+GDB Command
+...........
 
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
+The corresponding GDB command is 'info break'.
+
+Example
+.......
+
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="2",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x000100d0",func="main",file="hello.c",line="5",thread-groups=["i1"],
+     times="0"},
+     bkpt={number="2",type="breakpoint",disp="keep",enabled="y",
+     addr="0x00010114",func="foo",file="hello.c",fullname="/home/foo/hello.c",
+     line="13",thread-groups=["i1"],times="0"}]}
+     (gdb)
+
+   Here's an example of the result when there are no breakpoints:
+
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="0",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[]}
+     (gdb)
+
+The '-break-passcount' Command
+------------------------------
 
-`S SIG[;ADDR]'
-     Step with signal.  This is analogous to the `C' packet, but
-     requests a single-step, rather than a normal resumption of
-     execution.
+Synopsis
+........
 
-     This packet is deprecated for multi-threading support.  *Note
-     vCont packet::.
+      -break-passcount TRACEPOINT-NUMBER PASSCOUNT
 
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
+   Set the passcount for tracepoint TRACEPOINT-NUMBER to PASSCOUNT.  If
+the breakpoint referred to by TRACEPOINT-NUMBER is not a tracepoint,
+error is emitted.  This corresponds to CLI command 'passcount'.
 
-`t ADDR:PP,MM'
-     Search backwards starting at address ADDR for a match with pattern
-     PP and mask MM.  PP and MM are 4 bytes.  ADDR must be at least 3
-     digits.
+The '-break-watch' Command
+--------------------------
 
-`T THREAD-ID'
-     Find out if the thread THREAD-ID is alive.  *Note thread-id
-     syntax::.
+Synopsis
+........
 
-     Reply:
-    `OK'
-          thread is still alive
+      -break-watch [ -a | -r ]
 
-    `E NN'
-          thread is dead
+   Create a watchpoint.  With the '-a' option it will create an "access"
+watchpoint, i.e., a watchpoint that triggers either on a read from or on
+a write to the memory location.  With the '-r' option, the watchpoint
+created is a "read" watchpoint, i.e., it will trigger only when the
+memory location is accessed for reading.  Without either of the options,
+the watchpoint created is a regular watchpoint, i.e., it will trigger
+when the memory location is accessed for writing.  *Note Setting
+Watchpoints: Set Watchpoints.
 
-`v'
-     Packets starting with `v' are identified by a multi-letter name,
-     up to the first `;' or `?' (or the end of the packet).
+   Note that '-break-list' will report a single list of watchpoints and
+breakpoints inserted.
 
-`vAttach;PID'
-     Attach to a new process with the specified process ID PID.  The
-     process ID is a hexadecimal integer identifying the process.  In
-     all-stop mode, all threads in the attached process are stopped; in
-     non-stop mode, it may be attached without being stopped if that is
-     supported by the target.
+GDB Command
+...........
 
-     This packet is only available in extended mode (*note extended
-     mode::).
+The corresponding GDB commands are 'watch', 'awatch', and 'rwatch'.
+
+Example
+.......
+
+Setting a watchpoint on a variable in the 'main' function:
+
+     (gdb)
+     -break-watch x
+     ^done,wpt={number="2",exp="x"}
+     (gdb)
+     -exec-continue
+     ^running
+     (gdb)
+     *stopped,reason="watchpoint-trigger",wpt={number="2",exp="x"},
+     value={old="-268439212",new="55"},
+     frame={func="main",args=[],file="recursive2.c",
+     fullname="/home/foo/bar/recursive2.c",line="5"}
+     (gdb)
+
+   Setting a watchpoint on a variable local to a function.  GDB will
+stop the program execution twice: first for the variable changing value,
+then for the watchpoint going out of scope.
+
+     (gdb)
+     -break-watch C
+     ^done,wpt={number="5",exp="C"}
+     (gdb)
+     -exec-continue
+     ^running
+     (gdb)
+     *stopped,reason="watchpoint-trigger",
+     wpt={number="5",exp="C"},value={old="-276895068",new="3"},
+     frame={func="callee4",args=[],
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="13"}
+     (gdb)
+     -exec-continue
+     ^running
+     (gdb)
+     *stopped,reason="watchpoint-scope",wpnum="5",
+     frame={func="callee3",args=[{name="strarg",
+     value="0x11940 \"A string argument.\""}],
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
+     (gdb)
+
+   Listing breakpoints and watchpoints, at different points in the
+program execution.  Note that once the watchpoint goes out of scope, it
+is deleted.
+
+     (gdb)
+     -break-watch C
+     ^done,wpt={number="2",exp="C"}
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="2",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x00010734",func="callee4",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c"line="8",thread-groups=["i1"],
+     times="1"},
+     bkpt={number="2",type="watchpoint",disp="keep",
+     enabled="y",addr="",what="C",thread-groups=["i1"],times="0"}]}
+     (gdb)
+     -exec-continue
+     ^running
+     (gdb)
+     *stopped,reason="watchpoint-trigger",wpt={number="2",exp="C"},
+     value={old="-276895068",new="3"},
+     frame={func="callee4",args=[],
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="13"}
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="2",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x00010734",func="callee4",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c",line="8",thread-groups=["i1"],
+     times="1"},
+     bkpt={number="2",type="watchpoint",disp="keep",
+     enabled="y",addr="",what="C",thread-groups=["i1"],times="-5"}]}
+     (gdb)
+     -exec-continue
+     ^running
+     ^done,reason="watchpoint-scope",wpnum="2",
+     frame={func="callee3",args=[{name="strarg",
+     value="0x11940 \"A string argument.\""}],
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
+     (gdb)
+     -break-list
+     ^done,BreakpointTable={nr_rows="1",nr_cols="6",
+     hdr=[{width="3",alignment="-1",col_name="number",colhdr="Num"},
+     {width="14",alignment="-1",col_name="type",colhdr="Type"},
+     {width="4",alignment="-1",col_name="disp",colhdr="Disp"},
+     {width="3",alignment="-1",col_name="enabled",colhdr="Enb"},
+     {width="10",alignment="-1",col_name="addr",colhdr="Address"},
+     {width="40",alignment="2",col_name="what",colhdr="What"}],
+     body=[bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x00010734",func="callee4",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/devo/gdb/testsuite/gdb.mi/basics.c",line="8",
+     thread-groups=["i1"],times="1"}]}
+     (gdb)
 
-     Reply:
-    `E NN'
-          for an error
+\1f
+File: gdb.info,  Node: GDB/MI Catchpoint Commands,  Next: GDB/MI Program Context,  Prev: GDB/MI Breakpoint Commands,  Up: GDB/MI
 
-    `Any stop packet'
-          for success in all-stop mode (*note Stop Reply Packets::)
-
-    `OK'
-          for success in non-stop mode (*note Remote Non-Stop::)
-
-`vCont[;ACTION[:THREAD-ID]]...'
-     Resume the inferior, specifying different actions for each thread.
-     If an action is specified with no THREAD-ID, then it is applied to
-     any threads that don't have a specific action specified; if no
-     default action is specified then other threads should remain
-     stopped in all-stop mode and in their current state in non-stop
-     mode.  Specifying multiple default actions is an error; specifying
-     no actions is also an error.  Thread IDs are specified using the
-     syntax described in *Note thread-id syntax::.
-
-     Currently supported actions are:
-
-    `c'
-          Continue.
-
-    `C SIG'
-          Continue with signal SIG.  The signal SIG should be two hex
-          digits.
-
-    `s'
-          Step.
-
-    `S SIG'
-          Step with signal SIG.  The signal SIG should be two hex
-          digits.
-
-    `t'
-          Stop.
-
-     The optional argument ADDR normally associated with the `c', `C',
-     `s', and `S' packets is not supported in `vCont'.
-
-     The `t' action is only relevant in non-stop mode (*note Remote
-     Non-Stop::) and may be ignored by the stub otherwise.  A stop
-     reply should be generated for any affected thread not already
-     stopped.  When a thread is stopped by means of a `t' action, the
-     corresponding stop reply should indicate that the thread has
-     stopped with signal `0', regardless of whether the target uses
-     some other signal as an implementation detail.
-
-     The stub must support `vCont' if it reports support for
-     multiprocess extensions (*note multiprocess extensions::).  Note
-     that in this case `vCont' actions can be specified to apply to all
-     threads in a process by using the `pPID.-1' form of the THREAD-ID.
-
-     Reply: *Note Stop Reply Packets::, for the reply specifications.
-
-`vCont?'
-     Request a list of actions supported by the `vCont' packet.
-
-     Reply:
-    `vCont[;ACTION...]'
-          The `vCont' packet is supported.  Each ACTION is a supported
-          command in the `vCont' packet.
-
-    `'
-          The `vCont' packet is not supported.
-
-`vFile:OPERATION:PARAMETER...'
-     Perform a file operation on the target system.  For details, see
-     *Note Host I/O Packets::.
-
-`vFlashErase:ADDR,LENGTH'
-     Direct the stub to erase LENGTH bytes of flash starting at ADDR.
-     The region may enclose any number of flash blocks, but its start
-     and end must fall on block boundaries, as indicated by the flash
-     block size appearing in the memory map (*note Memory Map
-     Format::).  GDB groups flash memory programming operations
-     together, and sends a `vFlashDone' request after each group; the
-     stub is allowed to delay erase operation until the `vFlashDone'
-     packet is received.
-
-     Reply:
-    `OK'
-          for success
-
-    `E NN'
-          for an error
+27.9 GDB/MI Catchpoint Commands
+===============================
 
-`vFlashWrite:ADDR:XX...'
-     Direct the stub to write data to flash address ADDR.  The data is
-     passed in binary form using the same encoding as for the `X'
-     packet (*note Binary Data::).  The memory ranges specified by
-     `vFlashWrite' packets preceding a `vFlashDone' packet must not
-     overlap, and must appear in order of increasing addresses
-     (although `vFlashErase' packets for higher addresses may already
-     have been received; the ordering is guaranteed only between
-     `vFlashWrite' packets).  If a packet writes to an address that was
-     neither erased by a preceding `vFlashErase' packet nor by some
-     other target-specific method, the results are unpredictable.
-
-     Reply:
-    `OK'
-          for success
-
-    `E.memtype'
-          for vFlashWrite addressing non-flash memory
-
-    `E NN'
-          for an error
+This section documents GDB/MI commands for manipulating catchpoints.
 
-`vFlashDone'
-     Indicate to the stub that flash programming operation is finished.
-     The stub is permitted to delay or batch the effects of a group of
-     `vFlashErase' and `vFlashWrite' packets until a `vFlashDone'
-     packet is received.  The contents of the affected regions of flash
-     memory are unpredictable until the `vFlashDone' request is
-     completed.
-
-`vKill;PID'
-     Kill the process with the specified process ID.  PID is a
-     hexadecimal integer identifying the process.  This packet is used
-     in preference to `k' when multiprocess protocol extensions are
-     supported; see *Note multiprocess extensions::.
-
-     Reply:
-    `E NN'
-          for an error
+* Menu:
 
-    `OK'
-          for success
+* Shared Library GDB/MI Catchpoint Commands::
+* Ada Exception GDB/MI Catchpoint Commands::
 
-`vRun;FILENAME[;ARGUMENT]...'
-     Run the program FILENAME, passing it each ARGUMENT on its command
-     line.  The file and arguments are hex-encoded strings.  If
-     FILENAME is an empty string, the stub may use a default program
-     (e.g. the last program run).  The program is created in the stopped
-     state.
+\1f
+File: gdb.info,  Node: Shared Library GDB/MI Catchpoint Commands,  Next: Ada Exception GDB/MI Catchpoint Commands,  Up: GDB/MI Catchpoint Commands
 
-     This packet is only available in extended mode (*note extended
-     mode::).
+27.9.1 Shared Library GDB/MI Catchpoints
+----------------------------------------
 
-     Reply:
-    `E NN'
-          for an error
+The '-catch-load' Command
+-------------------------
 
-    `Any stop packet'
-          for success (*note Stop Reply Packets::)
+Synopsis
+........
 
-`vStopped'
-     In non-stop mode (*note Remote Non-Stop::), acknowledge a previous
-     stop reply and prompt for the stub to report another one.
+      -catch-load [ -t ] [ -d ] REGEXP
 
-     Reply:
-    `Any stop packet'
-          if there is another unreported stop event (*note Stop Reply
-          Packets::)
+   Add a catchpoint for library load events.  If the '-t' option is
+used, the catchpoint is a temporary one (*note Setting Breakpoints: Set
+Breaks.).  If the '-d' option is used, the catchpoint is created in a
+disabled state.  The 'regexp' argument is a regular expression used to
+match the name of the loaded library.
 
-    `OK'
-          if there are no unreported stop events
+GDB Command
+...........
 
-`X ADDR,LENGTH:XX...'
-     Write data to memory, where the data is transmitted in binary.
-     ADDR is address, LENGTH is number of bytes, `XX...' is binary data
-     (*note Binary Data::).
+The corresponding GDB command is 'catch load'.
 
-     Reply:
-    `OK'
-          for success
+Example
+.......
 
-    `E NN'
-          for an error
+     -catch-load -t foo.so
+     ^done,bkpt={number="1",type="catchpoint",disp="del",enabled="y",
+     what="load of library matching foo.so",catch-type="load",times="0"}
+     (gdb)
 
-`z TYPE,ADDR,KIND'
-`Z TYPE,ADDR,KIND'
-     Insert (`Z') or remove (`z') a TYPE breakpoint or watchpoint
-     starting at address ADDRESS of kind KIND.
-
-     Each breakpoint and watchpoint packet TYPE is documented
-     separately.
-
-     _Implementation notes: A remote target shall return an empty string
-     for an unrecognized breakpoint or watchpoint packet TYPE.  A
-     remote target shall support either both or neither of a given
-     `ZTYPE...' and `zTYPE...' packet pair.  To avoid potential
-     problems with duplicate packets, the operations should be
-     implemented in an idempotent way._
-
-`z0,ADDR,KIND'
-`Z0,ADDR,KIND[;COND_LIST...][;cmds:PERSIST,CMD_LIST...]'
-     Insert (`Z0') or remove (`z0') a memory breakpoint at address ADDR
-     of type KIND.
-
-     A memory breakpoint is implemented by replacing the instruction at
-     ADDR with a software breakpoint or trap instruction.  The KIND is
-     target-specific and typically indicates the size of the breakpoint
-     in bytes that should be inserted.  E.g., the ARM and MIPS can
-     insert either a 2 or 4 byte breakpoint.  Some architectures have
-     additional meanings for KIND; COND_LIST is an optional list of
-     conditional expressions in bytecode form that should be evaluated
-     on the target's side.  These are the conditions that should be
-     taken into consideration when deciding if the breakpoint trigger
-     should be reported back to GDBN.
-
-     The COND_LIST parameter is comprised of a series of expressions,
-     concatenated without separators. Each expression has the following
-     form:
-
-    `X LEN,EXPR'
-          LEN is the length of the bytecode expression and EXPR is the
-          actual conditional expression in bytecode form.
-
-
-     The optional CMD_LIST parameter introduces commands that may be
-     run on the target, rather than being reported back to GDB.  The
-     parameter starts with a numeric flag PERSIST; if the flag is
-     nonzero, then the breakpoint may remain active and the commands
-     continue to be run even when GDB disconnects from the target.
-     Following this flag is a series of expressions concatenated with no
-     separators.  Each expression has the following form:
-
-    `X LEN,EXPR'
-          LEN is the length of the bytecode expression and EXPR is the
-          actual conditional expression in bytecode form.
-
-
-     see *Note Architecture-Specific Protocol Details::.
-
-     _Implementation note: It is possible for a target to copy or move
-     code that contains memory breakpoints (e.g., when implementing
-     overlays).  The behavior of this packet, in the presence of such a
-     target, is not defined._
-
-     Reply:
-    `OK'
-          success
-
-    `'
-          not supported
-
-    `E NN'
-          for an error
+The '-catch-unload' Command
+---------------------------
 
-`z1,ADDR,KIND'
-`Z1,ADDR,KIND[;COND_LIST...]'
-     Insert (`Z1') or remove (`z1') a hardware breakpoint at address
-     ADDR.
+Synopsis
+........
 
-     A hardware breakpoint is implemented using a mechanism that is not
-     dependant on being able to modify the target's memory.  KIND and
-     COND_LIST have the same meaning as in `Z0' packets.
+      -catch-unload [ -t ] [ -d ] REGEXP
 
-     _Implementation note: A hardware breakpoint is not affected by code
-     movement._
+   Add a catchpoint for library unload events.  If the '-t' option is
+used, the catchpoint is a temporary one (*note Setting Breakpoints: Set
+Breaks.).  If the '-d' option is used, the catchpoint is created in a
+disabled state.  The 'regexp' argument is a regular expression used to
+match the name of the unloaded library.
 
-     Reply:
-    `OK'
-          success
+GDB Command
+...........
 
-    `'
-          not supported
+The corresponding GDB command is 'catch unload'.
 
-    `E NN'
-          for an error
+Example
+.......
 
-`z2,ADDR,KIND'
-`Z2,ADDR,KIND'
-     Insert (`Z2') or remove (`z2') a write watchpoint at ADDR.  KIND
-     is interpreted as the number of bytes to watch.
+     -catch-unload -d bar.so
+     ^done,bkpt={number="2",type="catchpoint",disp="keep",enabled="n",
+     what="load of library matching bar.so",catch-type="unload",times="0"}
+     (gdb)
 
-     Reply:
-    `OK'
-          success
+\1f
+File: gdb.info,  Node: Ada Exception GDB/MI Catchpoint Commands,  Prev: Shared Library GDB/MI Catchpoint Commands,  Up: GDB/MI Catchpoint Commands
 
-    `'
-          not supported
+27.9.2 Ada Exception GDB/MI Catchpoints
+---------------------------------------
 
-    `E NN'
-          for an error
+The following GDB/MI commands can be used to create catchpoints that
+stop the execution when Ada exceptions are being raised.
 
-`z3,ADDR,KIND'
-`Z3,ADDR,KIND'
-     Insert (`Z3') or remove (`z3') a read watchpoint at ADDR.  KIND is
-     interpreted as the number of bytes to watch.
+The '-catch-assert' Command
+---------------------------
 
-     Reply:
-    `OK'
-          success
+Synopsis
+........
 
-    `'
-          not supported
+      -catch-assert [ -c CONDITION] [ -d ] [ -t ]
 
-    `E NN'
-          for an error
+   Add a catchpoint for failed Ada assertions.
 
-`z4,ADDR,KIND'
-`Z4,ADDR,KIND'
-     Insert (`Z4') or remove (`z4') an access watchpoint at ADDR.  KIND
-     is interpreted as the number of bytes to watch.
+   The possible optional parameters for this command are:
 
-     Reply:
-    `OK'
-          success
+'-c CONDITION'
+     Make the catchpoint conditional on CONDITION.
+'-d'
+     Create a disabled catchpoint.
+'-t'
+     Create a temporary catchpoint.
 
-    `'
-          not supported
+GDB Command
+...........
 
-    `E NN'
-          for an error
+The corresponding GDB command is 'catch assert'.
 
+Example
+.......
 
-\1f
-File: gdb.info,  Node: Stop Reply Packets,  Next: General Query Packets,  Prev: Packets,  Up: Remote Protocol
+     -catch-assert
+     ^done,bkptno="5",bkpt={number="5",type="breakpoint",disp="keep",
+     enabled="y",addr="0x0000000000404888",what="failed Ada assertions",
+     thread-groups=["i1"],times="0",
+     original-location="__gnat_debug_raise_assert_failure"}
+     (gdb)
 
-E.3 Stop Reply Packets
-======================
+The '-catch-exception' Command
+------------------------------
 
-The `C', `c', `S', `s', `vCont', `vAttach', `vRun', `vStopped', and `?'
-packets can receive any of the below as a reply.  Except for `?' and
-`vStopped', that reply is only returned when the target halts.  In the
-below the exact meaning of "signal number" is defined by the header
-`include/gdb/signals.h' in the GDB source code.
-
-   As in the description of request packets, we include spaces in the
-reply templates for clarity; these are not part of the reply packet's
-syntax.  No GDB stop reply packet uses spaces to separate its
-components.
-
-`S AA'
-     The program received signal number AA (a two-digit hexadecimal
-     number).  This is equivalent to a `T' response with no N:R pairs.
-
-`T AA N1:R1;N2:R2;...'
-     The program received signal number AA (a two-digit hexadecimal
-     number).  This is equivalent to an `S' response, except that the
-     `N:R' pairs can carry values of important registers and other
-     information directly in the stop reply packet, reducing round-trip
-     latency.  Single-step and breakpoint traps are reported this way.
-     Each `N:R' pair is interpreted as follows:
-
-        * If N is a hexadecimal number, it is a register number, and the
-          corresponding R gives that register's value.  R is a series
-          of bytes in target byte order, with each byte given by a
-          two-digit hex number.
-
-        * If N is `thread', then R is the THREAD-ID of the stopped
-          thread, as specified in *Note thread-id syntax::.
-
-        * If N is `core', then R is the hexadecimal number of the core
-          on which the stop event was detected.
-
-        * If N is a recognized "stop reason", it describes a more
-          specific event that stopped the target.  The currently
-          defined stop reasons are listed below.  AA should be `05',
-          the trap signal.  At most one stop reason should be present.
-
-        * Otherwise, GDB should ignore this `N:R' pair and go on to the
-          next; this allows us to extend the protocol in the future.
-
-     The currently defined stop reasons are:
-
-    `watch'
-    `rwatch'
-    `awatch'
-          The packet indicates a watchpoint hit, and R is the data
-          address, in hex.
-
-    `library'
-          The packet indicates that the loaded libraries have changed.
-          GDB should use `qXfer:libraries:read' to fetch a new list of
-          loaded libraries.  R is ignored.
-
-    `replaylog'
-          The packet indicates that the target cannot continue replaying
-          logged execution events, because it has reached the end (or
-          the beginning when executing backward) of the log.  The value
-          of R will be either `begin' or `end'.  *Note Reverse
-          Execution::, for more information.
-
-`W AA'
-`W AA ; process:PID'
-     The process exited, and AA is the exit status.  This is only
-     applicable to certain targets.
-
-     The second form of the response, including the process ID of the
-     exited process, can be used only when GDB has reported support for
-     multiprocess protocol extensions; see *Note multiprocess
-     extensions::.  The PID is formatted as a big-endian hex string.
-
-`X AA'
-`X AA ; process:PID'
-     The process terminated with signal AA.
-
-     The second form of the response, including the process ID of the
-     terminated process, can be used only when GDB has reported support
-     for multiprocess protocol extensions; see *Note multiprocess
-     extensions::.  The PID is formatted as a big-endian hex string.
-
-`O XX...'
-     `XX...' is hex encoding of ASCII data, to be written as the
-     program's console output.  This can happen at any time while the
-     program is running and the debugger should continue to wait for
-     `W', `T', etc.  This reply is not permitted in non-stop mode.
-
-`F CALL-ID,PARAMETER...'
-     CALL-ID is the identifier which says which host system call should
-     be called.  This is just the name of the function.  Translation
-     into the correct system call is only applicable as it's defined in
-     GDB.  *Note File-I/O Remote Protocol Extension::, for a list of
-     implemented system calls.
-
-     `PARAMETER...' is a list of parameters as defined for this very
-     system call.
-
-     The target replies with this packet when it expects GDB to call a
-     host system call on behalf of the target.  GDB replies with an
-     appropriate `F' packet and keeps up waiting for the next reply
-     packet from the target.  The latest `C', `c', `S' or `s' action is
-     expected to be continued.  *Note File-I/O Remote Protocol
-     Extension::, for more details.
+Synopsis
+........
+
+      -catch-exception [ -c CONDITION] [ -d ] [ -e EXCEPTION-NAME ]
+         [ -t ] [ -u ]
+
+   Add a catchpoint stopping when Ada exceptions are raised.  By
+default, the command stops the program when any Ada exception gets
+raised.  But it is also possible, by using some of the optional
+parameters described below, to create more selective catchpoints.
+
+   The possible optional parameters for this command are:
+
+'-c CONDITION'
+     Make the catchpoint conditional on CONDITION.
+'-d'
+     Create a disabled catchpoint.
+'-e EXCEPTION-NAME'
+     Only stop when EXCEPTION-NAME is raised.  This option cannot be
+     used combined with '-u'.
+'-t'
+     Create a temporary catchpoint.
+'-u'
+     Stop only when an unhandled exception gets raised.  This option
+     cannot be used combined with '-e'.
+
+GDB Command
+...........
 
+The corresponding GDB commands are 'catch exception' and 'catch
+exception unhandled'.
 
-\1f
-File: gdb.info,  Node: General Query Packets,  Next: Architecture-Specific Protocol Details,  Prev: Stop Reply Packets,  Up: Remote Protocol
+Example
+.......
 
-E.4 General Query Packets
-=========================
+     -catch-exception -e Program_Error
+     ^done,bkptno="4",bkpt={number="4",type="breakpoint",disp="keep",
+     enabled="y",addr="0x0000000000404874",
+     what="`Program_Error' Ada exception", thread-groups=["i1"],
+     times="0",original-location="__gnat_debug_raise_exception"}
+     (gdb)
 
-Packets starting with `q' are "general query packets"; packets starting
-with `Q' are "general set packets".  General query and set packets are
-a semi-unified form for retrieving and sending information to and from
-the stub.
-
-   The initial letter of a query or set packet is followed by a name
-indicating what sort of thing the packet applies to.  For example, GDB
-may use a `qSymbol' packet to exchange symbol definitions with the
-stub.  These packet names follow some conventions:
-
-   * The name must not contain commas, colons or semicolons.
-
-   * Most GDB query and set packets have a leading upper case letter.
-
-   * The names of custom vendor packets should use a company prefix, in
-     lower case, followed by a period.  For example, packets designed at
-     the Acme Corporation might begin with `qacme.foo' (for querying
-     foos) or `Qacme.bar' (for setting bars).
-
-   The name of a query or set packet should be separated from any
-parameters by a `:'; the parameters themselves should be separated by
-`,' or `;'.  Stubs must be careful to match the full packet name, and
-check for a separator or the end of the packet, in case two packet
-names share a common prefix.  New packets should not begin with `qC',
-`qP', or `qL'(1).
-
-   Like the descriptions of the other packets, each description here
-has a template showing the packet's overall syntax, followed by an
-explanation of the packet's meaning.  We include spaces in some of the
-templates for clarity; these are not part of the packet's syntax.  No
-GDB packet uses spaces to separate its components.
-
-   Here are the currently defined query and set packets:
-
-`QAgent:1'
-
-`QAgent:0'
-     Turn on or off the agent as a helper to perform some debugging
-     operations delegated from GDB (*note Control Agent::).
-
-`QAllow:OP:VAL...'
-     Specify which operations GDB expects to request of the target, as
-     a semicolon-separated list of operation name and value pairs.
-     Possible values for OP include `WriteReg', `WriteMem',
-     `InsertBreak', `InsertTrace', `InsertFastTrace', and `Stop'. VAL
-     is either 0, indicating that GDB will not request the operation,
-     or 1, indicating that it may.  (The target can then use this to
-     set up its own internals optimally, for instance if the debugger
-     never expects to insert breakpoints, it may not need to install
-     its own trap handler.)
-
-`qC'
-     Return the current thread ID.
-
-     Reply:
-    `QC THREAD-ID'
-          Where THREAD-ID is a thread ID as documented in *Note
-          thread-id syntax::.
-
-    `(anything else)'
-          Any other reply implies the old thread ID.
-
-`qCRC:ADDR,LENGTH'
-     Compute the CRC checksum of a block of memory using CRC-32 defined
-     in IEEE 802.3.  The CRC is computed byte at a time, taking the most
-     significant bit of each byte first.  The initial pattern code
-     `0xffffffff' is used to ensure leading zeros affect the CRC.
-
-     _Note:_ This is the same CRC used in validating separate debug
-     files (*note Debugging Information in Separate Files: Separate
-     Debug Files.).  However the algorithm is slightly different.  When
-     validating separate debug files, the CRC is computed taking the
-     _least_ significant bit of each byte first, and the final result
-     is inverted to detect trailing zeros.
-
-     Reply:
-    `E NN'
-          An error (such as memory fault)
-
-    `C CRC32'
-          The specified memory region's checksum is CRC32.
-
-`QDisableRandomization:VALUE'
-     Some target operating systems will randomize the virtual address
-     space of the inferior process as a security feature, but provide a
-     feature to disable such randomization, e.g. to allow for a more
-     deterministic debugging experience.  On such systems, this packet
-     with a VALUE of 1 directs the target to disable address space
-     randomization for processes subsequently started via `vRun'
-     packets, while a packet with a VALUE of 0 tells the target to
-     enable address space randomization.
-
-     This packet is only available in extended mode (*note extended
-     mode::).
-
-     Reply:
-    `OK'
-          The request succeeded.
-
-    `E NN'
-          An error occurred.  NN are hex digits.
-
-    `'
-          An empty reply indicates that `QDisableRandomization' is not
-          supported by the stub.
-
-     This packet is not probed by default; the remote stub must request
-     it, by supplying an appropriate `qSupported' response (*note
-     qSupported::).  This should only be done on targets that actually
-     support disabling address space randomization.
-
-`qfThreadInfo'
-`qsThreadInfo'
-     Obtain a list of all active thread IDs from the target (OS).
-     Since there may be too many active threads to fit into one reply
-     packet, this query works iteratively: it may require more than one
-     query/reply sequence to obtain the entire list of threads.  The
-     first query of the sequence will be the `qfThreadInfo' query;
-     subsequent queries in the sequence will be the `qsThreadInfo'
-     query.
-
-     NOTE: This packet replaces the `qL' query (see below).
-
-     Reply:
-    `m THREAD-ID'
-          A single thread ID
-
-    `m THREAD-ID,THREAD-ID...'
-          a comma-separated list of thread IDs
-
-    `l'
-          (lower case letter `L') denotes end of list.
-
-     In response to each query, the target will reply with a list of
-     one or more thread IDs, separated by commas.  GDB will respond to
-     each reply with a request for more thread ids (using the `qs' form
-     of the query), until the target responds with `l' (lower-case ell,
-     for "last").  Refer to *Note thread-id syntax::, for the format of
-     the THREAD-ID fields.
-
-`qGetTLSAddr:THREAD-ID,OFFSET,LM'
-     Fetch the address associated with thread local storage specified
-     by THREAD-ID, OFFSET, and LM.
-
-     THREAD-ID is the thread ID associated with the thread for which to
-     fetch the TLS address.  *Note thread-id syntax::.
-
-     OFFSET is the (big endian, hex encoded) offset associated with the
-     thread local variable.  (This offset is obtained from the debug
-     information associated with the variable.)
-
-     LM is the (big endian, hex encoded) OS/ABI-specific encoding of the
-     load module associated with the thread local storage.  For example,
-     a GNU/Linux system will pass the link map address of the shared
-     object associated with the thread local storage under
-     consideration.  Other operating environments may choose to
-     represent the load module differently, so the precise meaning of
-     this parameter will vary.
-
-     Reply:
-    `XX...'
-          Hex encoded (big endian) bytes representing the address of
-          the thread local storage requested.
-
-    `E NN'
-          An error occurred.  NN are hex digits.
-
-    `'
-          An empty reply indicates that `qGetTLSAddr' is not supported
-          by the stub.
-
-`qGetTIBAddr:THREAD-ID'
-     Fetch address of the Windows OS specific Thread Information Block.
-
-     THREAD-ID is the thread ID associated with the thread.
-
-     Reply:
-    `XX...'
-          Hex encoded (big endian) bytes representing the linear
-          address of the thread information block.
-
-    `E NN'
-          An error occured.  This means that either the thread was not
-          found, or the address could not be retrieved.
-
-    `'
-          An empty reply indicates that `qGetTIBAddr' is not supported
-          by the stub.
-
-`qL STARTFLAG THREADCOUNT NEXTTHREAD'
-     Obtain thread information from RTOS.  Where: STARTFLAG (one hex
-     digit) is one to indicate the first query and zero to indicate a
-     subsequent query; THREADCOUNT (two hex digits) is the maximum
-     number of threads the response packet can contain; and NEXTTHREAD
-     (eight hex digits), for subsequent queries (STARTFLAG is zero), is
-     returned in the response as ARGTHREAD.
-
-     Don't use this packet; use the `qfThreadInfo' query instead (see
-     above).
-
-     Reply:
-    `qM COUNT DONE ARGTHREAD THREAD...'
-          Where: COUNT (two hex digits) is the number of threads being
-          returned; DONE (one hex digit) is zero to indicate more
-          threads and one indicates no further threads; ARGTHREADID
-          (eight hex digits) is NEXTTHREAD from the request packet;
-          THREAD...  is a sequence of thread IDs from the target.
-          THREADID (eight hex digits).  See
-          `remote.c:parse_threadlist_response()'.
-
-`qOffsets'
-     Get section offsets that the target used when relocating the
-     downloaded image.
-
-     Reply:
-    `Text=XXX;Data=YYY[;Bss=ZZZ]'
-          Relocate the `Text' section by XXX from its original address.
-          Relocate the `Data' section by YYY from its original address.
-          If the object file format provides segment information (e.g.
-          ELF `PT_LOAD' program headers), GDB will relocate entire
-          segments by the supplied offsets.
-
-          _Note: while a `Bss' offset may be included in the response,
-          GDB ignores this and instead applies the `Data' offset to the
-          `Bss' section._
-
-    `TextSeg=XXX[;DataSeg=YYY]'
-          Relocate the first segment of the object file, which
-          conventionally contains program code, to a starting address
-          of XXX.  If `DataSeg' is specified, relocate the second
-          segment, which conventionally contains modifiable data, to a
-          starting address of YYY.  GDB will report an error if the
-          object file does not contain segment information, or does not
-          contain at least as many segments as mentioned in the reply.
-          Extra segments are kept at fixed offsets relative to the last
-          relocated segment.
-
-`qP MODE THREAD-ID'
-     Returns information on THREAD-ID.  Where: MODE is a hex encoded 32
-     bit mode; THREAD-ID is a thread ID (*note thread-id syntax::).
-
-     Don't use this packet; use the `qThreadExtraInfo' query instead
-     (see below).
-
-     Reply: see `remote.c:remote_unpack_thread_info_response()'.
-
-`QNonStop:1'
-
-`QNonStop:0'
-     Enter non-stop (`QNonStop:1') or all-stop (`QNonStop:0') mode.
-     *Note Remote Non-Stop::, for more information.
-
-     Reply:
-    `OK'
-          The request succeeded.
-
-    `E NN'
-          An error occurred.  NN are hex digits.
-
-    `'
-          An empty reply indicates that `QNonStop' is not supported by
-          the stub.
-
-     This packet is not probed by default; the remote stub must request
-     it, by supplying an appropriate `qSupported' response (*note
-     qSupported::).  Use of this packet is controlled by the `set
-     non-stop' command; *note Non-Stop Mode::.
-
-`QPassSignals: SIGNAL [;SIGNAL]...'
-     Each listed SIGNAL should be passed directly to the inferior
-     process.  Signals are numbered identically to continue packets and
-     stop replies (*note Stop Reply Packets::).  Each SIGNAL list item
-     should be strictly greater than the previous item.  These signals
-     do not need to stop the inferior, or be reported to GDB.  All
-     other signals should be reported to GDB.  Multiple `QPassSignals'
-     packets do not combine; any earlier `QPassSignals' list is
-     completely replaced by the new list.  This packet improves
-     performance when using `handle SIGNAL nostop noprint pass'.
-
-     Reply:
-    `OK'
-          The request succeeded.
-
-    `E NN'
-          An error occurred.  NN are hex digits.
-
-    `'
-          An empty reply indicates that `QPassSignals' is not supported
-          by the stub.
-
-     Use of this packet is controlled by the `set remote pass-signals'
-     command (*note set remote pass-signals: Remote Configuration.).
-     This packet is not probed by default; the remote stub must request
-     it, by supplying an appropriate `qSupported' response (*note
-     qSupported::).
-
-`QProgramSignals: SIGNAL [;SIGNAL]...'
-     Each listed SIGNAL may be delivered to the inferior process.
-     Others should be silently discarded.
-
-     In some cases, the remote stub may need to decide whether to
-     deliver a signal to the program or not without GDB involvement.
-     One example of that is while detaching -- the program's threads
-     may have stopped for signals that haven't yet had a chance of
-     being reported to GDB, and so the remote stub can use the signal
-     list specified by this packet to know whether to deliver or ignore
-     those pending signals.
-
-     This does not influence whether to deliver a signal as requested
-     by a resumption packet (*note vCont packet::).
-
-     Signals are numbered identically to continue packets and stop
-     replies (*note Stop Reply Packets::).  Each SIGNAL list item
-     should be strictly greater than the previous item.  Multiple
-     `QProgramSignals' packets do not combine; any earlier
-     `QProgramSignals' list is completely replaced by the new list.
-
-     Reply:
-    `OK'
-          The request succeeded.
-
-    `E NN'
-          An error occurred.  NN are hex digits.
-
-    `'
-          An empty reply indicates that `QProgramSignals' is not
-          supported by the stub.
-
-     Use of this packet is controlled by the `set remote
-     program-signals' command (*note set remote program-signals: Remote
-     Configuration.).  This packet is not probed by default; the remote
-     stub must request it, by supplying an appropriate `qSupported'
-     response (*note qSupported::).
-
-`qRcmd,COMMAND'
-     COMMAND (hex encoded) is passed to the local interpreter for
-     execution.  Invalid commands should be reported using the output
-     string.  Before the final result packet, the target may also
-     respond with a number of intermediate `OOUTPUT' console output
-     packets.  _Implementors should note that providing access to a
-     stubs's interpreter may have security implications_.
-
-     Reply:
-    `OK'
-          A command response with no output.
-
-    `OUTPUT'
-          A command response with the hex encoded output string OUTPUT.
-
-    `E NN'
-          Indicate a badly formed request.
-
-    `'
-          An empty reply indicates that `qRcmd' is not recognized.
-
-     (Note that the `qRcmd' packet's name is separated from the command
-     by a `,', not a `:', contrary to the naming conventions above.
-     Please don't use this packet as a model for new packets.)
-
-`qSearch:memory:ADDRESS;LENGTH;SEARCH-PATTERN'
-     Search LENGTH bytes at ADDRESS for SEARCH-PATTERN.  ADDRESS and
-     LENGTH are encoded in hex.  SEARCH-PATTERN is a sequence of bytes,
-     hex encoded.
-
-     Reply:
-    `0'
-          The pattern was not found.
-
-    `1,address'
-          The pattern was found at ADDRESS.
-
-    `E NN'
-          A badly formed request or an error was encountered while
-          searching memory.
-
-    `'
-          An empty reply indicates that `qSearch:memory' is not
-          recognized.
-
-`QStartNoAckMode'
-     Request that the remote stub disable the normal `+'/`-' protocol
-     acknowledgments (*note Packet Acknowledgment::).
-
-     Reply:
-    `OK'
-          The stub has switched to no-acknowledgment mode.  GDB
-          acknowledges this reponse, but neither the stub nor GDB shall
-          send or expect further `+'/`-' acknowledgments in the current
-          connection.
-
-    `'
-          An empty reply indicates that the stub does not support
-          no-acknowledgment mode.
-
-`qSupported [:GDBFEATURE [;GDBFEATURE]... ]'
-     Tell the remote stub about features supported by GDB, and query
-     the stub for features it supports.  This packet allows GDB and the
-     remote stub to take advantage of each others' features.
-     `qSupported' also consolidates multiple feature probes at startup,
-     to improve GDB performance--a single larger packet performs better
-     than multiple smaller probe packets on high-latency links.  Some
-     features may enable behavior which must not be on by default, e.g.
-     because it would confuse older clients or stubs.  Other features
-     may describe packets which could be automatically probed for, but
-     are not.  These features must be reported before GDB will use
-     them.  This "default unsupported" behavior is not appropriate for
-     all packets, but it helps to keep the initial connection time
-     under control with new versions of GDB which support increasing
-     numbers of packets.
-
-     Reply:
-    `STUBFEATURE [;STUBFEATURE]...'
-          The stub supports or does not support each returned
-          STUBFEATURE, depending on the form of each STUBFEATURE (see
-          below for the possible forms).
-
-    `'
-          An empty reply indicates that `qSupported' is not recognized,
-          or that no features needed to be reported to GDB.
-
-     The allowed forms for each feature (either a GDBFEATURE in the
-     `qSupported' packet, or a STUBFEATURE in the response) are:
-
-    `NAME=VALUE'
-          The remote protocol feature NAME is supported, and associated
-          with the specified VALUE.  The format of VALUE depends on the
-          feature, but it must not include a semicolon.
-
-    `NAME+'
-          The remote protocol feature NAME is supported, and does not
-          need an associated value.
-
-    `NAME-'
-          The remote protocol feature NAME is not supported.
-
-    `NAME?'
-          The remote protocol feature NAME may be supported, and GDB
-          should auto-detect support in some other way when it is
-          needed.  This form will not be used for GDBFEATURE
-          notifications, but may be used for STUBFEATURE responses.
-
-     Whenever the stub receives a `qSupported' request, the supplied
-     set of GDB features should override any previous request.  This
-     allows GDB to put the stub in a known state, even if the stub had
-     previously been communicating with a different version of GDB.
-
-     The following values of GDBFEATURE (for the packet sent by GDB)
-     are defined:
-
-    `multiprocess'
-          This feature indicates whether GDB supports multiprocess
-          extensions to the remote protocol.  GDB does not use such
-          extensions unless the stub also reports that it supports them
-          by including `multiprocess+' in its `qSupported' reply.
-          *Note multiprocess extensions::, for details.
-
-    `xmlRegisters'
-          This feature indicates that GDB supports the XML target
-          description.  If the stub sees `xmlRegisters=' with target
-          specific strings separated by a comma, it will report register
-          description.
-
-    `qRelocInsn'
-          This feature indicates whether GDB supports the `qRelocInsn'
-          packet (*note Relocate instruction reply packet: Tracepoint
-          Packets.).
-
-     Stubs should ignore any unknown values for GDBFEATURE.  Any GDB
-     which sends a `qSupported' packet supports receiving packets of
-     unlimited length (earlier versions of GDB may reject overly long
-     responses).  Additional values for GDBFEATURE may be defined in
-     the future to let the stub take advantage of new features in GDB,
-     e.g. incompatible improvements in the remote protocol--the
-     `multiprocess' feature is an example of such a feature.  The
-     stub's reply should be independent of the GDBFEATURE entries sent
-     by GDB; first GDB describes all the features it supports, and then
-     the stub replies with all the features it supports.
-
-     Similarly, GDB will silently ignore unrecognized stub feature
-     responses, as long as each response uses one of the standard forms.
-
-     Some features are flags.  A stub which supports a flag feature
-     should respond with a `+' form response.  Other features require
-     values, and the stub should respond with an `=' form response.
-
-     Each feature has a default value, which GDB will use if
-     `qSupported' is not available or if the feature is not mentioned
-     in the `qSupported' response.  The default values are fixed; a
-     stub is free to omit any feature responses that match the defaults.
-
-     Not all features can be probed, but for those which can, the
-     probing mechanism is useful: in some cases, a stub's internal
-     architecture may not allow the protocol layer to know some
-     information about the underlying target in advance.  This is
-     especially common in stubs which may be configured for multiple
-     targets.
+\1f
+File: gdb.info,  Node: GDB/MI Program Context,  Next: GDB/MI Thread Commands,  Prev: GDB/MI Catchpoint Commands,  Up: GDB/MI
 
-     These are the currently defined stub features and their properties:
-
-     Feature Name            Value         Default  Probe Allowed
-                             Required               
-     `PacketSize'            Yes           `-'      No
-     `qXfer:auxv:read'       No            `-'      Yes
-     `qXfer:features:read'   No            `-'      Yes
-     `qXfer:libraries:read'  No            `-'      Yes
-     `qXfer:memory-map:read' No            `-'      Yes
-     `qXfer:sdata:read'      No            `-'      Yes
-     `qXfer:spu:read'        No            `-'      Yes
-     `qXfer:spu:write'       No            `-'      Yes
-     `qXfer:siginfo:read'    No            `-'      Yes
-     `qXfer:siginfo:write'   No            `-'      Yes
-     `qXfer:threads:read'    No            `-'      Yes
-     `qXfer:traceframe-info:read'No            `-'      Yes
-     `qXfer:uib:read'        No            `-'      Yes
-     `qXfer:fdpic:read'      No            `-'      Yes
-     `QNonStop'              No            `-'      Yes
-     `QPassSignals'          No            `-'      Yes
-     `QStartNoAckMode'       No            `-'      Yes
-     `multiprocess'          No            `-'      No
-     `ConditionalBreakpoints'No            `-'      No
-     `ConditionalTracepoints'No            `-'      No
-     `ReverseContinue'       No            `-'      No
-     `ReverseStep'           No            `-'      No
-     `TracepointSource'      No            `-'      No
-     `QAgent'                No            `-'      No
-     `QAllow'                No            `-'      No
-     `QDisableRandomization' No            `-'      No
-     `EnableDisableTracepoints'No            `-'      No
-     `tracenz'               No            `-'      No
-     `BreakpointCommands'    No            `-'      No
-
-     These are the currently defined stub features, in more detail:
-
-    `PacketSize=BYTES'
-          The remote stub can accept packets up to at least BYTES in
-          length.  GDB will send packets up to this size for bulk
-          transfers, and will never send larger packets.  This is a
-          limit on the data characters in the packet, including the
-          frame and checksum.  There is no trailing NUL byte in a
-          remote protocol packet; if the stub stores packets in a
-          NUL-terminated format, it should allow an extra byte in its
-          buffer for the NUL.  If this stub feature is not supported,
-          GDB guesses based on the size of the `g' packet response.
-
-    `qXfer:auxv:read'
-          The remote stub understands the `qXfer:auxv:read' packet
-          (*note qXfer auxiliary vector read::).
-
-    `qXfer:features:read'
-          The remote stub understands the `qXfer:features:read' packet
-          (*note qXfer target description read::).
-
-    `qXfer:libraries:read'
-          The remote stub understands the `qXfer:libraries:read' packet
-          (*note qXfer library list read::).
-
-    `qXfer:libraries-svr4:read'
-          The remote stub understands the `qXfer:libraries-svr4:read'
-          packet (*note qXfer svr4 library list read::).
-
-    `qXfer:memory-map:read'
-          The remote stub understands the `qXfer:memory-map:read' packet
-          (*note qXfer memory map read::).
-
-    `qXfer:sdata:read'
-          The remote stub understands the `qXfer:sdata:read' packet
-          (*note qXfer sdata read::).
-
-    `qXfer:spu:read'
-          The remote stub understands the `qXfer:spu:read' packet
-          (*note qXfer spu read::).
-
-    `qXfer:spu:write'
-          The remote stub understands the `qXfer:spu:write' packet
-          (*note qXfer spu write::).
-
-    `qXfer:siginfo:read'
-          The remote stub understands the `qXfer:siginfo:read' packet
-          (*note qXfer siginfo read::).
-
-    `qXfer:siginfo:write'
-          The remote stub understands the `qXfer:siginfo:write' packet
-          (*note qXfer siginfo write::).
-
-    `qXfer:threads:read'
-          The remote stub understands the `qXfer:threads:read' packet
-          (*note qXfer threads read::).
-
-    `qXfer:traceframe-info:read'
-          The remote stub understands the `qXfer:traceframe-info:read'
-          packet (*note qXfer traceframe info read::).
-
-    `qXfer:uib:read'
-          The remote stub understands the `qXfer:uib:read' packet
-          (*note qXfer unwind info block::).
-
-    `qXfer:fdpic:read'
-          The remote stub understands the `qXfer:fdpic:read' packet
-          (*note qXfer fdpic loadmap read::).
-
-    `QNonStop'
-          The remote stub understands the `QNonStop' packet (*note
-          QNonStop::).
-
-    `QPassSignals'
-          The remote stub understands the `QPassSignals' packet (*note
-          QPassSignals::).
-
-    `QStartNoAckMode'
-          The remote stub understands the `QStartNoAckMode' packet and
-          prefers to operate in no-acknowledgment mode.  *Note Packet
-          Acknowledgment::.
-
-    `multiprocess'
-          The remote stub understands the multiprocess extensions to
-          the remote protocol syntax.  The multiprocess extensions
-          affect the syntax of thread IDs in both packets and replies
-          (*note thread-id syntax::), and add process IDs to the `D'
-          packet and `W' and `X' replies.  Note that reporting this
-          feature indicates support for the syntactic extensions only,
-          not that the stub necessarily supports debugging of more than
-          one process at a time.  The stub must not use multiprocess
-          extensions in packet replies unless GDB has also indicated it
-          supports them in its `qSupported' request.
-
-    `qXfer:osdata:read'
-          The remote stub understands the `qXfer:osdata:read' packet
-          ((*note qXfer osdata read::).
-
-    `ConditionalBreakpoints'
-          The target accepts and implements evaluation of conditional
-          expressions defined for breakpoints.  The target will only
-          report breakpoint triggers when such conditions are true
-          (*note Break Conditions: Conditions.).
-
-    `ConditionalTracepoints'
-          The remote stub accepts and implements conditional
-          expressions defined for tracepoints (*note Tracepoint
-          Conditions::).
-
-    `ReverseContinue'
-          The remote stub accepts and implements the reverse continue
-          packet (*note bc::).
-
-    `ReverseStep'
-          The remote stub accepts and implements the reverse step packet
-          (*note bs::).
-
-    `TracepointSource'
-          The remote stub understands the `QTDPsrc' packet that supplies
-          the source form of tracepoint definitions.
-
-    `QAgent'
-          The remote stub understands the `QAgent' packet.
-
-    `QAllow'
-          The remote stub understands the `QAllow' packet.
-
-    `QDisableRandomization'
-          The remote stub understands the `QDisableRandomization'
-          packet.
-
-    `StaticTracepoint'
-          The remote stub supports static tracepoints.
-
-    `InstallInTrace'
-          The remote stub supports installing tracepoint in tracing.
-
-    `EnableDisableTracepoints'
-          The remote stub supports the `QTEnable' (*note QTEnable::) and
-          `QTDisable' (*note QTDisable::) packets that allow tracepoints
-          to be enabled and disabled while a trace experiment is
-          running.
-
-    `tracenz'
-          The remote stub supports the `tracenz' bytecode for
-          collecting strings.  See *Note Bytecode Descriptions:: for
-          details about the bytecode.
-
-    `BreakpointCommands'
-          The remote stub supports running a breakpoint's command list
-          itself, rather than reporting the hit to GDB.
-
-
-`qSymbol::'
-     Notify the target that GDB is prepared to serve symbol lookup
-     requests.  Accept requests from the target for the values of
-     symbols.
-
-     Reply:
-    `OK'
-          The target does not need to look up any (more) symbols.
-
-    `qSymbol:SYM_NAME'
-          The target requests the value of symbol SYM_NAME (hex
-          encoded).  GDB may provide the value by using the
-          `qSymbol:SYM_VALUE:SYM_NAME' message, described below.
-
-`qSymbol:SYM_VALUE:SYM_NAME'
-     Set the value of SYM_NAME to SYM_VALUE.
-
-     SYM_NAME (hex encoded) is the name of a symbol whose value the
-     target has previously requested.
-
-     SYM_VALUE (hex) is the value for symbol SYM_NAME.  If GDB cannot
-     supply a value for SYM_NAME, then this field will be empty.
-
-     Reply:
-    `OK'
-          The target does not need to look up any (more) symbols.
-
-    `qSymbol:SYM_NAME'
-          The target requests the value of a new symbol SYM_NAME (hex
-          encoded).  GDB will continue to supply the values of symbols
-          (if available), until the target ceases to request them.
-
-`qTBuffer'
-
-`QTBuffer'
-
-`QTDisconnected'
-`QTDP'
-`QTDPsrc'
-`QTDV'
-`qTfP'
-`qTfV'
-`QTFrame'
-`qTMinFTPILen'
-     *Note Tracepoint Packets::.
-
-`qThreadExtraInfo,THREAD-ID'
-     Obtain a printable string description of a thread's attributes from
-     the target OS.  THREAD-ID is a thread ID; see *Note thread-id
-     syntax::.  This string may contain anything that the target OS
-     thinks is interesting for GDB to tell the user about the thread.
-     The string is displayed in GDB's `info threads' display.  Some
-     examples of possible thread extra info strings are `Runnable', or
-     `Blocked on Mutex'.
-
-     Reply:
-    `XX...'
-          Where `XX...' is a hex encoding of ASCII data, comprising the
-          printable string containing the extra information about the
-          thread's attributes.
-
-     (Note that the `qThreadExtraInfo' packet's name is separated from
-     the command by a `,', not a `:', contrary to the naming
-     conventions above.  Please don't use this packet as a model for new
-     packets.)
-
-`QTNotes'
-
-`qTP'
-
-`QTSave'
-
-`qTsP'
-
-`qTsV'
-`QTStart'
-`QTStop'
-`QTEnable'
-`QTDisable'
-`QTinit'
-`QTro'
-`qTStatus'
-`qTV'
-`qTfSTM'
-`qTsSTM'
-`qTSTMat'
-     *Note Tracepoint Packets::.
-
-`qXfer:OBJECT:read:ANNEX:OFFSET,LENGTH'
-     Read uninterpreted bytes from the target's special data area
-     identified by the keyword OBJECT.  Request LENGTH bytes starting
-     at OFFSET bytes into the data.  The content and encoding of ANNEX
-     is specific to OBJECT; it can supply additional details about what
-     data to access.
-
-     Here are the specific requests of this form defined so far.  All
-     `qXfer:OBJECT:read:...' requests use the same reply formats,
-     listed below.
-
-    `qXfer:auxv:read::OFFSET,LENGTH'
-          Access the target's "auxiliary vector".  *Note auxiliary
-          vector: OS Information.  Note ANNEX must be empty.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate `qSupported' response
-          (*note qSupported::).
-
-    `qXfer:features:read:ANNEX:OFFSET,LENGTH'
-          Access the "target description".  *Note Target
-          Descriptions::.  The annex specifies which XML document to
-          access.  The main description is always loaded from the
-          `target.xml' annex.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate `qSupported' response
-          (*note qSupported::).
-
-    `qXfer:libraries:read:ANNEX:OFFSET,LENGTH'
-          Access the target's list of loaded libraries.  *Note Library
-          List Format::.  The annex part of the generic `qXfer' packet
-          must be empty (*note qXfer read::).
-
-          Targets which maintain a list of libraries in the program's
-          memory do not need to implement this packet; it is designed
-          for platforms where the operating system manages the list of
-          loaded libraries.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate `qSupported' response
-          (*note qSupported::).
-
-    `qXfer:libraries-svr4:read:ANNEX:OFFSET,LENGTH'
-          Access the target's list of loaded libraries when the target
-          is an SVR4 platform.  *Note Library List Format for SVR4
-          Targets::.  The annex part of the generic `qXfer' packet must
-          be empty (*note qXfer read::).
-
-          This packet is optional for better performance on SVR4
-          targets.  GDB uses memory read packets to read the SVR4
-          library list otherwise.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate `qSupported' response
-          (*note qSupported::).
-
-    `qXfer:memory-map:read::OFFSET,LENGTH'
-          Access the target's "memory-map".  *Note Memory Map Format::.
-          The annex part of the generic `qXfer' packet must be empty
-          (*note qXfer read::).
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate `qSupported' response
-          (*note qSupported::).
-
-    `qXfer:sdata:read::OFFSET,LENGTH'
-          Read contents of the extra collected static tracepoint marker
-          information.  The annex part of the generic `qXfer' packet
-          must be empty (*note qXfer read::).  *Note Tracepoint Action
-          Lists: Tracepoint Actions.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate `qSupported' response
-          (*note qSupported::).
-
-    `qXfer:siginfo:read::OFFSET,LENGTH'
-          Read contents of the extra signal information on the target
-          system.  The annex part of the generic `qXfer' packet must be
-          empty (*note qXfer read::).
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate `qSupported' response
-          (*note qSupported::).
-
-    `qXfer:spu:read:ANNEX:OFFSET,LENGTH'
-          Read contents of an `spufs' file on the target system.  The
-          annex specifies which file to read; it must be of the form
-          `ID/NAME', where ID specifies an SPU context ID in the target
-          process, and NAME identifes the `spufs' file in that context
-          to be accessed.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate `qSupported' response
-          (*note qSupported::).
-
-    `qXfer:threads:read::OFFSET,LENGTH'
-          Access the list of threads on target.  *Note Thread List
-          Format::.  The annex part of the generic `qXfer' packet must
-          be empty (*note qXfer read::).
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate `qSupported' response
-          (*note qSupported::).
-
-    `qXfer:traceframe-info:read::OFFSET,LENGTH'
-          Return a description of the current traceframe's contents.
-          *Note Traceframe Info Format::.  The annex part of the generic
-          `qXfer' packet must be empty (*note qXfer read::).
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate `qSupported' response
-          (*note qSupported::).
-
-    `qXfer:uib:read:PC:OFFSET,LENGTH'
-          Return the unwind information block for PC.  This packet is
-          used on OpenVMS/ia64 to ask the kernel unwind information.
-
-          This packet is not probed by default.
-
-    `qXfer:fdpic:read:ANNEX:OFFSET,LENGTH'
-          Read contents of `loadmap's on the target system.  The annex,
-          either `exec' or `interp', specifies which `loadmap',
-          executable `loadmap' or interpreter `loadmap' to read.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate `qSupported' response
-          (*note qSupported::).
-
-    `qXfer:osdata:read::OFFSET,LENGTH'
-          Access the target's "operating system information".  *Note
-          Operating System Information::.
-
-
-     Reply:
-    `m DATA'
-          Data DATA (*note Binary Data::) has been read from the
-          target.  There may be more data at a higher address (although
-          it is permitted to return `m' even for the last valid block
-          of data, as long as at least one byte of data was read).
-          DATA may have fewer bytes than the LENGTH in the request.
-
-    `l DATA'
-          Data DATA (*note Binary Data::) has been read from the target.
-          There is no more data to be read.  DATA may have fewer bytes
-          than the LENGTH in the request.
-
-    `l'
-          The OFFSET in the request is at the end of the data.  There
-          is no more data to be read.
-
-    `E00'
-          The request was malformed, or ANNEX was invalid.
-
-    `E NN'
-          The offset was invalid, or there was an error encountered
-          reading the data.  NN is a hex-encoded `errno' value.
-
-    `'
-          An empty reply indicates the OBJECT string was not recognized
-          by the stub, or that the object does not support reading.
-
-`qXfer:OBJECT:write:ANNEX:OFFSET:DATA...'
-     Write uninterpreted bytes into the target's special data area
-     identified by the keyword OBJECT, starting at OFFSET bytes into
-     the data.  DATA... is the binary-encoded data (*note Binary
-     Data::) to be written.  The content and encoding of ANNEX is
-     specific to OBJECT; it can supply additional details about what
-     data to access.
-
-     Here are the specific requests of this form defined so far.  All
-     `qXfer:OBJECT:write:...' requests use the same reply formats,
-     listed below.
-
-    `qXfer:siginfo:write::OFFSET:DATA...'
-          Write DATA to the extra signal information on the target
-          system.  The annex part of the generic `qXfer' packet must be
-          empty (*note qXfer write::).
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate `qSupported' response
-          (*note qSupported::).
-
-    `qXfer:spu:write:ANNEX:OFFSET:DATA...'
-          Write DATA to an `spufs' file on the target system.  The
-          annex specifies which file to write; it must be of the form
-          `ID/NAME', where ID specifies an SPU context ID in the target
-          process, and NAME identifes the `spufs' file in that context
-          to be accessed.
-
-          This packet is not probed by default; the remote stub must
-          request it, by supplying an appropriate `qSupported' response
-          (*note qSupported::).
-
-     Reply:
-    `NN'
-          NN (hex encoded) is the number of bytes written.  This may be
-          fewer bytes than supplied in the request.
-
-    `E00'
-          The request was malformed, or ANNEX was invalid.
-
-    `E NN'
-          The offset was invalid, or there was an error encountered
-          writing the data.  NN is a hex-encoded `errno' value.
-
-    `'
-          An empty reply indicates the OBJECT string was not recognized
-          by the stub, or that the object does not support writing.
-
-`qXfer:OBJECT:OPERATION:...'
-     Requests of this form may be added in the future.  When a stub does
-     not recognize the OBJECT keyword, or its support for OBJECT does
-     not recognize the OPERATION keyword, the stub must respond with an
-     empty packet.
-
-`qAttached:PID'
-     Return an indication of whether the remote server attached to an
-     existing process or created a new process.  When the multiprocess
-     protocol extensions are supported (*note multiprocess
-     extensions::), PID is an integer in hexadecimal format identifying
-     the target process.  Otherwise, GDB will omit the PID field and
-     the query packet will be simplified as `qAttached'.
-
-     This query is used, for example, to know whether the remote process
-     should be detached or killed when a GDB session is ended with the
-     `quit' command.
-
-     Reply:
-    `1'
-          The remote server attached to an existing process.
-
-    `0'
-          The remote server created a new process.
-
-    `E NN'
-          A badly formed request or an error was encountered.
+27.10 GDB/MI Program Context
+============================
 
+The '-exec-arguments' Command
+-----------------------------
 
-   ---------- Footnotes ----------
+Synopsis
+........
 
-   (1) The `qP' and `qL' packets predate these conventions, and have
-arguments without any terminator for the packet name; we suspect they
-are in widespread use in places that are difficult to upgrade.  The
-`qC' packet has no arguments, but some existing stubs (e.g. RedBoot)
-are known to not check for the end of the packet.
+      -exec-arguments ARGS
 
-\1f
-File: gdb.info,  Node: Architecture-Specific Protocol Details,  Next: Tracepoint Packets,  Prev: General Query Packets,  Up: Remote Protocol
+   Set the inferior program arguments, to be used in the next
+'-exec-run'.
 
-E.5 Architecture-Specific Protocol Details
-==========================================
+GDB Command
+...........
 
-This section describes how the remote protocol is applied to specific
-target architectures.  Also see *Note Standard Target Features::, for
-details of XML target descriptions for each architecture.
+The corresponding GDB command is 'set args'.
 
-* Menu:
+Example
+.......
 
-* ARM-Specific Protocol Details::
-* MIPS-Specific Protocol Details::
+     (gdb)
+     -exec-arguments -v word
+     ^done
+     (gdb)
 
-\1f
-File: gdb.info,  Node: ARM-Specific Protocol Details,  Next: MIPS-Specific Protocol Details,  Up: Architecture-Specific Protocol Details
+The '-environment-cd' Command
+-----------------------------
 
-E.5.1 ARM-specific Protocol Details
------------------------------------
+Synopsis
+........
 
-* Menu:
+      -environment-cd PATHDIR
 
-* ARM Breakpoint Kinds::
+   Set GDB's working directory.
 
-\1f
-File: gdb.info,  Node: ARM Breakpoint Kinds,  Up: ARM-Specific Protocol Details
+GDB Command
+...........
+
+The corresponding GDB command is 'cd'.
 
-E.5.1.1 ARM Breakpoint Kinds
-............................
+Example
+.......
 
-These breakpoint kinds are defined for the `Z0' and `Z1' packets.
+     (gdb)
+     -environment-cd /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
+     ^done
+     (gdb)
 
-2
-     16-bit Thumb mode breakpoint.
+The '-environment-directory' Command
+------------------------------------
 
-3
-     32-bit Thumb mode (Thumb-2) breakpoint.
+Synopsis
+........
+
+      -environment-directory [ -r ] [ PATHDIR ]+
+
+   Add directories PATHDIR to beginning of search path for source files.
+If the '-r' option is used, the search path is reset to the default
+search path.  If directories PATHDIR are supplied in addition to the
+'-r' option, the search path is first reset and then addition occurs as
+normal.  Multiple directories may be specified, separated by blanks.
+Specifying multiple directories in a single command results in the
+directories added to the beginning of the search path in the same order
+they were presented in the command.  If blanks are needed as part of a
+directory name, double-quotes should be used around the name.  In the
+command output, the path will show up separated by the system
+directory-separator character.  The directory-separator character must
+not be used in any directory name.  If no directories are specified, the
+current search path is displayed.
+
+GDB Command
+...........
 
-4
-     32-bit ARM mode breakpoint.
+The corresponding GDB command is 'dir'.
+
+Example
+.......
+
+     (gdb)
+     -environment-directory /kwikemart/marge/ezannoni/flathead-dev/devo/gdb
+     ^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
+     (gdb)
+     -environment-directory ""
+     ^done,source-path="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb:$cdir:$cwd"
+     (gdb)
+     -environment-directory -r /home/jjohnstn/src/gdb /usr/src
+     ^done,source-path="/home/jjohnstn/src/gdb:/usr/src:$cdir:$cwd"
+     (gdb)
+     -environment-directory -r
+     ^done,source-path="$cdir:$cwd"
+     (gdb)
+
+The '-environment-path' Command
+-------------------------------
+
+Synopsis
+........
+
+      -environment-path [ -r ] [ PATHDIR ]+
+
+   Add directories PATHDIR to beginning of search path for object files.
+If the '-r' option is used, the search path is reset to the original
+search path that existed at gdb start-up.  If directories PATHDIR are
+supplied in addition to the '-r' option, the search path is first reset
+and then addition occurs as normal.  Multiple directories may be
+specified, separated by blanks.  Specifying multiple directories in a
+single command results in the directories added to the beginning of the
+search path in the same order they were presented in the command.  If
+blanks are needed as part of a directory name, double-quotes should be
+used around the name.  In the command output, the path will show up
+separated by the system directory-separator character.  The
+directory-separator character must not be used in any directory name.
+If no directories are specified, the current path is displayed.
+
+GDB Command
+...........
 
+The corresponding GDB command is 'path'.
 
-\1f
-File: gdb.info,  Node: MIPS-Specific Protocol Details,  Prev: ARM-Specific Protocol Details,  Up: Architecture-Specific Protocol Details
+Example
+.......
 
-E.5.2 MIPS-specific Protocol Details
-------------------------------------
+     (gdb)
+     -environment-path
+     ^done,path="/usr/bin"
+     (gdb)
+     -environment-path /kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb /bin
+     ^done,path="/kwikemart/marge/ezannoni/flathead-dev/ppc-eabi/gdb:/bin:/usr/bin"
+     (gdb)
+     -environment-path -r /usr/local/bin
+     ^done,path="/usr/local/bin:/usr/bin"
+     (gdb)
 
-* Menu:
+The '-environment-pwd' Command
+------------------------------
 
-* MIPS Register packet Format::
-* MIPS Breakpoint Kinds::
+Synopsis
+........
 
-\1f
-File: gdb.info,  Node: MIPS Register packet Format,  Next: MIPS Breakpoint Kinds,  Up: MIPS-Specific Protocol Details
+      -environment-pwd
 
-E.5.2.1 MIPS Register Packet Format
-...................................
+   Show the current working directory.
 
-The following `g'/`G' packets have previously been defined.  In the
-below, some thirty-two bit registers are transferred as sixty-four
-bits.  Those registers should be zero/sign extended (which?)  to fill
-the space allocated.  Register bytes are transferred in target byte
-order.  The two nibbles within a register byte are transferred
-most-significant - least-significant.
+GDB Command
+...........
 
-MIPS32
-     All registers are transferred as thirty-two bit quantities in the
-     order: 32 general-purpose; sr; lo; hi; bad; cause; pc; 32
-     floating-point registers; fsr; fir; fp.
+The corresponding GDB command is 'pwd'.
 
-MIPS64
-     All registers are transferred as sixty-four bit quantities
-     (including thirty-two bit registers such as `sr').  The ordering
-     is the same as `MIPS32'.
+Example
+.......
 
+     (gdb)
+     -environment-pwd
+     ^done,cwd="/kwikemart/marge/ezannoni/flathead-dev/devo/gdb"
+     (gdb)
 
 \1f
-File: gdb.info,  Node: MIPS Breakpoint Kinds,  Prev: MIPS Register packet Format,  Up: MIPS-Specific Protocol Details
+File: gdb.info,  Node: GDB/MI Thread Commands,  Next: GDB/MI Ada Tasking Commands,  Prev: GDB/MI Program Context,  Up: GDB/MI
 
-E.5.2.2 MIPS Breakpoint Kinds
-.............................
+27.11 GDB/MI Thread Commands
+============================
 
-These breakpoint kinds are defined for the `Z0' and `Z1' packets.
+The '-thread-info' Command
+--------------------------
 
-2
-     16-bit MIPS16 mode breakpoint.
+Synopsis
+........
 
-3
-     16-bit microMIPS mode breakpoint.
+      -thread-info [ THREAD-ID ]
 
-4
-     32-bit standard MIPS mode breakpoint.
+   Reports information about either a specific thread, if the THREAD-ID
+parameter is present, or about all threads.  When printing information
+about all threads, also reports the current thread.
 
-5
-     32-bit microMIPS mode breakpoint.
+GDB Command
+...........
 
+The 'info thread' command prints the same information about all threads.
 
-\1f
-File: gdb.info,  Node: Tracepoint Packets,  Next: Host I/O Packets,  Prev: Architecture-Specific Protocol Details,  Up: Remote Protocol
+Result
+......
 
-E.6 Tracepoint Packets
-======================
+The result is a list of threads.  The following attributes are defined
+for a given thread:
+
+'current'
+     This field exists only for the current thread.  It has the value
+     '*'.
+
+'id'
+     The identifier that GDB uses to refer to the thread.
+
+'target-id'
+     The identifier that the target uses to refer to the thread.
+
+'details'
+     Extra information about the thread, in a target-specific format.
+     This field is optional.
+
+'name'
+     The name of the thread.  If the user specified a name using the
+     'thread name' command, then this name is given.  Otherwise, if GDB
+     can extract the thread name from the target, then that name is
+     given.  If GDB cannot find the thread name, then this field is
+     omitted.
+
+'frame'
+     The stack frame currently executing in the thread.
+
+'state'
+     The thread's state.  The 'state' field may have the following
+     values:
+
+     'stopped'
+          The thread is stopped.  Frame information is available for
+          stopped threads.
+
+     'running'
+          The thread is running.  There's no frame information for
+          running threads.
+
+'core'
+     If GDB can find the CPU core on which this thread is running, then
+     this field is the core identifier.  This field is optional.
+
+Example
+.......
+
+     -thread-info
+     ^done,threads=[
+     {id="2",target-id="Thread 0xb7e14b90 (LWP 21257)",
+        frame={level="0",addr="0xffffe410",func="__kernel_vsyscall",
+                args=[]},state="running"},
+     {id="1",target-id="Thread 0xb7e156b0 (LWP 21254)",
+        frame={level="0",addr="0x0804891f",func="foo",
+                args=[{name="i",value="10"}],
+                file="/tmp/a.c",fullname="/tmp/a.c",line="158"},
+                state="running"}],
+     current-thread-id="1"
+     (gdb)
+
+The '-thread-list-ids' Command
+------------------------------
 
-Here we describe the packets GDB uses to implement tracepoints (*note
-Tracepoints::).
-
-`QTDP:N:ADDR:ENA:STEP:PASS[:FFLEN][:XLEN,BYTES][-]'
-     Create a new tracepoint, number N, at ADDR.  If ENA is `E', then
-     the tracepoint is enabled; if it is `D', then the tracepoint is
-     disabled.  STEP is the tracepoint's step count, and PASS is its
-     pass count.  If an `F' is present, then the tracepoint is to be a
-     fast tracepoint, and the FLEN is the number of bytes that the
-     target should copy elsewhere to make room for the tracepoint.  If
-     an `X' is present, it introduces a tracepoint condition, which
-     consists of a hexadecimal length, followed by a comma and
-     hex-encoded bytes, in a manner similar to action encodings as
-     described below.  If the trailing `-' is present, further `QTDP'
-     packets will follow to specify this tracepoint's actions.
+Synopsis
+........
 
-     Replies:
-    `OK'
-          The packet was understood and carried out.
-
-    `qRelocInsn'
-          *Note Relocate instruction reply packet: Tracepoint Packets.
-
-    `'
-          The packet was not recognized.
-
-`QTDP:-N:ADDR:[S]ACTION...[-]'
-     Define actions to be taken when a tracepoint is hit.  N and ADDR
-     must be the same as in the initial `QTDP' packet for this
-     tracepoint.  This packet may only be sent immediately after
-     another `QTDP' packet that ended with a `-'.  If the trailing `-'
-     is present, further `QTDP' packets will follow, specifying more
-     actions for this tracepoint.
-
-     In the series of action packets for a given tracepoint, at most one
-     can have an `S' before its first ACTION.  If such a packet is
-     sent, it and the following packets define "while-stepping"
-     actions.  Any prior packets define ordinary actions -- that is,
-     those taken when the tracepoint is first hit.  If no action packet
-     has an `S', then all the packets in the series specify ordinary
-     tracepoint actions.
-
-     The `ACTION...' portion of the packet is a series of actions,
-     concatenated without separators.  Each action has one of the
-     following forms:
-
-    `R MASK'
-          Collect the registers whose bits are set in MASK.  MASK is a
-          hexadecimal number whose I'th bit is set if register number I
-          should be collected.  (The least significant bit is numbered
-          zero.)  Note that MASK may be any number of digits long; it
-          may not fit in a 32-bit word.
-
-    `M BASEREG,OFFSET,LEN'
-          Collect LEN bytes of memory starting at the address in
-          register number BASEREG, plus OFFSET.  If BASEREG is `-1',
-          then the range has a fixed address: OFFSET is the address of
-          the lowest byte to collect.  The BASEREG, OFFSET, and LEN
-          parameters are all unsigned hexadecimal values (the `-1'
-          value for BASEREG is a special case).
-
-    `X LEN,EXPR'
-          Evaluate EXPR, whose length is LEN, and collect memory as it
-          directs.  EXPR is an agent expression, as described in *Note
-          Agent Expressions::.  Each byte of the expression is encoded
-          as a two-digit hex number in the packet; LEN is the number of
-          bytes in the expression (and thus one-half the number of hex
-          digits in the packet).
-
-
-     Any number of actions may be packed together in a single `QTDP'
-     packet, as long as the packet does not exceed the maximum packet
-     length (400 bytes, for many stubs).  There may be only one `R'
-     action per tracepoint, and it must precede any `M' or `X' actions.
-     Any registers referred to by `M' and `X' actions must be
-     collected by a preceding `R' action.  (The "while-stepping"
-     actions are treated as if they were attached to a separate
-     tracepoint, as far as these restrictions are concerned.)
+      -thread-list-ids
 
-     Replies:
-    `OK'
-          The packet was understood and carried out.
-
-    `qRelocInsn'
-          *Note Relocate instruction reply packet: Tracepoint Packets.
-
-    `'
-          The packet was not recognized.
-
-`QTDPsrc:N:ADDR:TYPE:START:SLEN:BYTES'
-     Specify a source string of tracepoint N at address ADDR.  This is
-     useful to get accurate reproduction of the tracepoints originally
-     downloaded at the beginning of the trace run.  TYPE is the name of
-     the tracepoint part, such as `cond' for the tracepoint's
-     conditional expression (see below for a list of types), while
-     BYTES is the string, encoded in hexadecimal.
-
-     START is the offset of the BYTES within the overall source string,
-     while SLEN is the total length of the source string.  This is
-     intended for handling source strings that are longer than will fit
-     in a single packet.
-
-     The available string types are `at' for the location, `cond' for
-     the conditional, and `cmd' for an action command.  GDB sends a
-     separate packet for each command in the action list, in the same
-     order in which the commands are stored in the list.
-
-     The target does not need to do anything with source strings except
-     report them back as part of the replies to the `qTfP'/`qTsP' query
-     packets.
-
-     Although this packet is optional, and GDB will only send it if the
-     target replies with `TracepointSource' *Note General Query
-     Packets::, it makes both disconnected tracing and trace files much
-     easier to use.  Otherwise the user must be careful that the
-     tracepoints in effect while looking at trace frames are identical
-     to the ones in effect during the trace run; even a small
-     discrepancy could cause `tdump' not to work, or a particular trace
-     frame not be found.
-
-`QTDV:N:VALUE'
-     Create a new trace state variable, number N, with an initial value
-     of VALUE, which is a 64-bit signed integer.  Both N and VALUE are
-     encoded as hexadecimal values. GDB has the option of not using
-     this packet for initial values of zero; the target should simply
-     create the trace state variables as they are mentioned in
-     expressions.
-
-`QTFrame:N'
-     Select the N'th tracepoint frame from the buffer, and use the
-     register and memory contents recorded there to answer subsequent
-     request packets from GDB.
-
-     A successful reply from the stub indicates that the stub has found
-     the requested frame.  The response is a series of parts,
-     concatenated without separators, describing the frame we selected.
-     Each part has one of the following forms:
-
-    `F F'
-          The selected frame is number N in the trace frame buffer; F
-          is a hexadecimal number.  If F is `-1', then there was no
-          frame matching the criteria in the request packet.
-
-    `T T'
-          The selected trace frame records a hit of tracepoint number T;
-          T is a hexadecimal number.
-
-
-`QTFrame:pc:ADDR'
-     Like `QTFrame:N', but select the first tracepoint frame after the
-     currently selected frame whose PC is ADDR; ADDR is a hexadecimal
-     number.
-
-`QTFrame:tdp:T'
-     Like `QTFrame:N', but select the first tracepoint frame after the
-     currently selected frame that is a hit of tracepoint T; T is a
-     hexadecimal number.
-
-`QTFrame:range:START:END'
-     Like `QTFrame:N', but select the first tracepoint frame after the
-     currently selected frame whose PC is between START (inclusive) and
-     END (inclusive); START and END are hexadecimal numbers.
-
-`QTFrame:outside:START:END'
-     Like `QTFrame:range:START:END', but select the first frame
-     _outside_ the given range of addresses (exclusive).
-
-`qTMinFTPILen'
-     This packet requests the minimum length of instruction at which a
-     fast tracepoint (*note Set Tracepoints::) may be placed.  For
-     instance, on the 32-bit x86 architecture, it is possible to use a
-     4-byte jump, but it depends on the target system being able to
-     create trampolines in the first 64K of memory, which might or
-     might not be possible for that system.  So the reply to this
-     packet will be 4 if it is able to arrange for that.
+   Produces a list of the currently known GDB thread ids.  At the end of
+the list it also prints the total number of such threads.
 
-     Replies:
+   This command is retained for historical reasons, the '-thread-info'
+command should be used instead.
+
+GDB Command
+...........
 
-    `0'
-          The minimum instruction length is currently unknown.
+Part of 'info threads' supplies the same information.
 
-    `LENGTH'
-          The minimum instruction length is LENGTH, where LENGTH is
-          greater or equal to 1.  LENGTH is a hexadecimal number.  A
-          reply of 1 means that a fast tracepoint may be placed on any
-          instruction regardless of size.
+Example
+.......
 
-    `E'
-          An error has occurred.
+     (gdb)
+     -thread-list-ids
+     ^done,thread-ids={thread-id="3",thread-id="2",thread-id="1"},
+     current-thread-id="1",number-of-threads="3"
+     (gdb)
 
-    `'
-          An empty reply indicates that the request is not supported by
-          the stub.
+The '-thread-select' Command
+----------------------------
 
-`QTStart'
-     Begin the tracepoint experiment.  Begin collecting data from
-     tracepoint hits in the trace frame buffer.  This packet supports
-     the `qRelocInsn' reply (*note Relocate instruction reply packet:
-     Tracepoint Packets.).
+Synopsis
+........
 
-`QTStop'
-     End the tracepoint experiment.  Stop collecting trace frames.
+      -thread-select THREADNUM
 
-`QTEnable:N:ADDR'
-     Enable tracepoint N at address ADDR in a started tracepoint
-     experiment.  If the tracepoint was previously disabled, then
-     collection of data from it will resume.
+   Make THREADNUM the current thread.  It prints the number of the new
+current thread, and the topmost frame for that thread.
 
-`QTDisable:N:ADDR'
-     Disable tracepoint N at address ADDR in a started tracepoint
-     experiment.  No more data will be collected from the tracepoint
-     unless `QTEnable:N:ADDR' is subsequently issued.
+   This command is deprecated in favor of explicitly using the
+'--thread' option to each command.
 
-`QTinit'
-     Clear the table of tracepoints, and empty the trace frame buffer.
+GDB Command
+...........
 
-`QTro:START1,END1:START2,END2:...'
-     Establish the given ranges of memory as "transparent".  The stub
-     will answer requests for these ranges from memory's current
-     contents, if they were not collected as part of the tracepoint hit.
+The corresponding GDB command is 'thread'.
+
+Example
+.......
+
+     (gdb)
+     -exec-next
+     ^running
+     (gdb)
+     *stopped,reason="end-stepping-range",thread-id="2",line="187",
+     file="../../../devo/gdb/testsuite/gdb.threads/linux-dp.c"
+     (gdb)
+     -thread-list-ids
+     ^done,
+     thread-ids={thread-id="3",thread-id="2",thread-id="1"},
+     number-of-threads="3"
+     (gdb)
+     -thread-select 3
+     ^done,new-thread-id="3",
+     frame={level="0",func="vprintf",
+     args=[{name="format",value="0x8048e9c \"%*s%c %d %c\\n\""},
+     {name="arg",value="0x2"}],file="vprintf.c",line="31"}
+     (gdb)
 
-     GDB uses this to mark read-only regions of memory, like those
-     containing program code.  Since these areas never change, they
-     should still have the same contents they did when the tracepoint
-     was hit, so there's no reason for the stub to refuse to provide
-     their contents.
+\1f
+File: gdb.info,  Node: GDB/MI Ada Tasking Commands,  Next: GDB/MI Program Execution,  Prev: GDB/MI Thread Commands,  Up: GDB/MI
 
-`QTDisconnected:VALUE'
-     Set the choice to what to do with the tracing run when GDB
-     disconnects from the target.  A VALUE of 1 directs the target to
-     continue the tracing run, while 0 tells the target to stop tracing
-     if GDB is no longer in the picture.
+27.12 GDB/MI Ada Tasking Commands
+=================================
 
-`qTStatus'
-     Ask the stub if there is a trace experiment running right now.
+The '-ada-task-info' Command
+----------------------------
 
-     The reply has the form:
+Synopsis
+........
 
-    `TRUNNING[;FIELD]...'
-          RUNNING is a single digit `1' if the trace is presently
-          running, or `0' if not.  It is followed by semicolon-separated
-          optional fields that an agent may use to report additional
-          status.
+      -ada-task-info [ TASK-ID ]
 
+   Reports information about either a specific Ada task, if the TASK-ID
+parameter is present, or about all Ada tasks.
 
-     If the trace is not running, the agent may report any of several
-     explanations as one of the optional fields:
+GDB Command
+...........
 
-    `tnotrun:0'
-          No trace has been run yet.
+The 'info tasks' command prints the same information about all Ada tasks
+(*note Ada Tasks::).
 
-    `tstop[:TEXT]:0'
-          The trace was stopped by a user-originated stop command.  The
-          optional TEXT field is a user-supplied string supplied as
-          part of the stop command (for instance, an explanation of why
-          the trace was stopped manually).  It is hex-encoded.
+Result
+......
 
-    `tfull:0'
-          The trace stopped because the trace buffer filled up.
+The result is a table of Ada tasks.  The following columns are defined
+for each Ada task:
 
-    `tdisconnected:0'
-          The trace stopped because GDB disconnected from the target.
+'current'
+     This field exists only for the current thread.  It has the value
+     '*'.
 
-    `tpasscount:TPNUM'
-          The trace stopped because tracepoint TPNUM exceeded its pass
-          count.
+'id'
+     The identifier that GDB uses to refer to the Ada task.
 
-    `terror:TEXT:TPNUM'
-          The trace stopped because tracepoint TPNUM had an error.  The
-          string TEXT is available to describe the nature of the error
-          (for instance, a divide by zero in the condition expression).
-          TEXT is hex encoded.
+'task-id'
+     The identifier that the target uses to refer to the Ada task.
 
-    `tunknown:0'
-          The trace stopped for some other reason.
+'thread-id'
+     The identifier of the thread corresponding to the Ada task.
 
+     This field should always exist, as Ada tasks are always implemented
+     on top of a thread.  But if GDB cannot find this corresponding
+     thread for any reason, the field is omitted.
 
-     Additional optional fields supply statistical and other
-     information.  Although not required, they are extremely useful for
-     users monitoring the progress of a trace run.  If a trace has
-     stopped, and these numbers are reported, they must reflect the
-     state of the just-stopped trace.
+'parent-id'
+     This field exists only when the task was created by another task.
+     In this case, it provides the ID of the parent task.
 
-    `tframes:N'
-          The number of trace frames in the buffer.
+'priority'
+     The base priority of the task.
 
-    `tcreated:N'
-          The total number of trace frames created during the run. This
-          may be larger than the trace frame count, if the buffer is
-          circular.
+'state'
+     The current state of the task.  For a detailed description of the
+     possible states, see *note Ada Tasks::.
 
-    `tsize:N'
-          The total size of the trace buffer, in bytes.
+'name'
+     The name of the task.
 
-    `tfree:N'
-          The number of bytes still unused in the buffer.
+Example
+.......
 
-    `circular:N'
-          The value of the circular trace buffer flag.  `1' means that
-          the trace buffer is circular and old trace frames will be
-          discarded if necessary to make room, `0' means that the trace
-          buffer is linear and may fill up.
+     -ada-task-info
+     ^done,tasks={nr_rows="3",nr_cols="8",
+     hdr=[{width="1",alignment="-1",col_name="current",colhdr=""},
+     {width="3",alignment="1",col_name="id",colhdr="ID"},
+     {width="9",alignment="1",col_name="task-id",colhdr="TID"},
+     {width="4",alignment="1",col_name="thread-id",colhdr=""},
+     {width="4",alignment="1",col_name="parent-id",colhdr="P-ID"},
+     {width="3",alignment="1",col_name="priority",colhdr="Pri"},
+     {width="22",alignment="-1",col_name="state",colhdr="State"},
+     {width="1",alignment="2",col_name="name",colhdr="Name"}],
+     body=[{current="*",id="1",task-id="   644010",thread-id="1",priority="48",
+     state="Child Termination Wait",name="main_task"}]}
+     (gdb)
 
-    `disconn:N'
-          The value of the disconnected tracing flag.  `1' means that
-          tracing will continue after GDB disconnects, `0' means that
-          the trace run will stop.
+\1f
+File: gdb.info,  Node: GDB/MI Program Execution,  Next: GDB/MI Stack Manipulation,  Prev: GDB/MI Ada Tasking Commands,  Up: GDB/MI
+
+27.13 GDB/MI Program Execution
+==============================
+
+These are the asynchronous commands which generate the out-of-band
+record '*stopped'.  Currently GDB only really executes asynchronously
+with remote targets and this interaction is mimicked in other cases.
+
+The '-exec-continue' Command
+----------------------------
+
+Synopsis
+........
+
+      -exec-continue [--reverse] [--all|--thread-group N]
+
+   Resumes the execution of the inferior program, which will continue to
+execute until it reaches a debugger stop event.  If the '--reverse'
+option is specified, execution resumes in reverse until it reaches a
+stop event.  Stop events may include
+   * breakpoints or watchpoints
+   * signals or exceptions
+   * the end of the process (or its beginning under '--reverse')
+   * the end or beginning of a replay log if one is being used.
+   In all-stop mode (*note All-Stop Mode::), may resume only one thread,
+or all threads, depending on the value of the 'scheduler-locking'
+variable.  If '--all' is specified, all threads (in all inferiors) will
+be resumed.  The '--all' option is ignored in all-stop mode.  If the
+'--thread-group' options is specified, then all threads in that thread
+group are resumed.
+
+GDB Command
+...........
 
+The corresponding GDB corresponding is 'continue'.
 
-`qTP:TP:ADDR'
-     Ask the stub for the current state of tracepoint number TP at
-     address ADDR.
+Example
+.......
 
-     Replies:
-    `VHITS:USAGE'
-          The tracepoint has been hit HITS times so far during the trace
-          run, and accounts for USAGE in the trace buffer.  Note that
-          `while-stepping' steps are not counted as separate hits, but
-          the steps' space consumption is added into the usage number.
+     -exec-continue
+     ^running
+     (gdb)
+     @Hello world
+     *stopped,reason="breakpoint-hit",disp="keep",bkptno="2",frame={
+     func="foo",args=[],file="hello.c",fullname="/home/foo/bar/hello.c",
+     line="13"}
+     (gdb)
 
+The '-exec-finish' Command
+--------------------------
 
-`qTV:VAR'
-     Ask the stub for the value of the trace state variable number VAR.
+Synopsis
+........
 
-     Replies:
-    `VVALUE'
-          The value of the variable is VALUE.  This will be the current
-          value of the variable if the user is examining a running
-          target, or a saved value if the variable was collected in the
-          trace frame that the user is looking at.  Note that multiple
-          requests may result in different reply values, such as when
-          requesting values while the program is running.
-
-    `U'
-          The value of the variable is unknown.  This would occur, for
-          example, if the user is examining a trace frame in which the
-          requested variable was not collected.
-
-`qTfP'
-`qTsP'
-     These packets request data about tracepoints that are being used by
-     the target.  GDB sends `qTfP' to get the first piece of data, and
-     multiple `qTsP' to get additional pieces.  Replies to these
-     packets generally take the form of the `QTDP' packets that define
-     tracepoints. (FIXME add detailed syntax)
-
-`qTfV'
-`qTsV'
-     These packets request data about trace state variables that are on
-     the target.  GDB sends `qTfV' to get the first vari of data, and
-     multiple `qTsV' to get additional variables.  Replies to these
-     packets follow the syntax of the `QTDV' packets that define trace
-     state variables.
-
-`qTfSTM'
-`qTsSTM'
-     These packets request data about static tracepoint markers that
-     exist in the target program.  GDB sends `qTfSTM' to get the first
-     piece of data, and multiple `qTsSTM' to get additional pieces.
-     Replies to these packets take the following form:
-
-     Reply:
-    `m ADDRESS:ID:EXTRA'
-          A single marker
-
-    `m ADDRESS:ID:EXTRA,ADDRESS:ID:EXTRA...'
-          a comma-separated list of markers
-
-    `l'
-          (lower case letter `L') denotes end of list.
-
-    `E NN'
-          An error occurred.  NN are hex digits.
-
-    `'
-          An empty reply indicates that the request is not supported by
-          the stub.
-
-     ADDRESS is encoded in hex.  ID and EXTRA are strings encoded in
-     hex.
-
-     In response to each query, the target will reply with a list of
-     one or more markers, separated by commas.  GDB will respond to each
-     reply with a request for more markers (using the `qs' form of the
-     query), until the target responds with `l' (lower-case ell, for
-     "last").
-
-`qTSTMat:ADDRESS'
-     This packets requests data about static tracepoint markers in the
-     target program at ADDRESS.  Replies to this packet follow the
-     syntax of the `qTfSTM' and `qTsSTM' packets that list static
-     tracepoint markers.
-
-`QTSave:FILENAME'
-     This packet directs the target to save trace data to the file name
-     FILENAME in the target's filesystem.  FILENAME is encoded as a hex
-     string; the interpretation of the file name (relative vs absolute,
-     wild cards, etc) is up to the target.
-
-`qTBuffer:OFFSET,LEN'
-     Return up to LEN bytes of the current contents of trace buffer,
-     starting at OFFSET.  The trace buffer is treated as if it were a
-     contiguous collection of traceframes, as per the trace file format.
-     The reply consists as many hex-encoded bytes as the target can
-     deliver in a packet; it is not an error to return fewer than were
-     asked for.  A reply consisting of just `l' indicates that no bytes
-     are available.
-
-`QTBuffer:circular:VALUE'
-     This packet directs the target to use a circular trace buffer if
-     VALUE is 1, or a linear buffer if the value is 0.
-
-`QTNotes:[TYPE:TEXT][;TYPE:TEXT]...'
-     This packet adds optional textual notes to the trace run.
-     Allowable types include `user', `notes', and `tstop', the TEXT
-     fields are arbitrary strings, hex-encoded.
-
-
-E.6.1 Relocate instruction reply packet
----------------------------------------
+      -exec-finish [--reverse]
 
-When installing fast tracepoints in memory, the target may need to
-relocate the instruction currently at the tracepoint address to a
-different address in memory.  For most instructions, a simple copy is
-enough, but, for example, call instructions that implicitly push the
-return address on the stack, and relative branches or other PC-relative
-instructions require offset adjustment, so that the effect of executing
-the instruction at a different address is the same as if it had
-executed in the original location.
-
-   In response to several of the tracepoint packets, the target may also
-respond with a number of intermediate `qRelocInsn' request packets
-before the final result packet, to have GDB handle this relocation
-operation.  If a packet supports this mechanism, its documentation will
-explicitly say so.  See for example the above descriptions for the
-`QTStart' and `QTDP' packets.  The format of the request is:
-
-`qRelocInsn:FROM;TO'
-     This requests GDB to copy instruction at address FROM to address
-     TO, possibly adjusted so that executing the instruction at TO has
-     the same effect as executing it at FROM.  GDB writes the adjusted
-     instruction to target memory starting at TO.
-
-   Replies:
-`qRelocInsn:ADJUSTED_SIZE'
-     Informs the stub the relocation is complete.  ADJUSTED_SIZE is the
-     length in bytes of resulting relocated instruction sequence.
-
-`E NN'
-     A badly formed request was detected, or an error was encountered
-     while relocating the instruction.
+   Resumes the execution of the inferior program until the current
+function is exited.  Displays the results returned by the function.  If
+the '--reverse' option is specified, resumes the reverse execution of
+the inferior program until the point where current function was called.
 
-\1f
-File: gdb.info,  Node: Host I/O Packets,  Next: Interrupts,  Prev: Tracepoint Packets,  Up: Remote Protocol
-
-E.7 Host I/O Packets
-====================
-
-The "Host I/O" packets allow GDB to perform I/O operations on the far
-side of a remote link.  For example, Host I/O is used to upload and
-download files to a remote target with its own filesystem.  Host I/O
-uses the same constant values and data structure layout as the
-target-initiated File-I/O protocol.  However, the Host I/O packets are
-structured differently.  The target-initiated protocol relies on target
-memory to store parameters and buffers.  Host I/O requests are
-initiated by GDB, and the target's memory is not involved.  *Note
-File-I/O Remote Protocol Extension::, for more details on the
-target-initiated protocol.
-
-   The Host I/O request packets all encode a single operation along with
-its arguments.  They have this format:
-
-`vFile:OPERATION: PARAMETER...'
-     OPERATION is the name of the particular request; the target should
-     compare the entire packet name up to the second colon when checking
-     for a supported operation.  The format of PARAMETER depends on the
-     operation.  Numbers are always passed in hexadecimal.  Negative
-     numbers have an explicit minus sign (i.e. two's complement is not
-     used).  Strings (e.g. filenames) are encoded as a series of
-     hexadecimal bytes.  The last argument to a system call may be a
-     buffer of escaped binary data (*note Binary Data::).
-
-
-   The valid responses to Host I/O packets are:
-
-`F RESULT [, ERRNO] [; ATTACHMENT]'
-     RESULT is the integer value returned by this operation, usually
-     non-negative for success and -1 for errors.  If an error has
-     occured, ERRNO will be included in the result.  ERRNO will have a
-     value defined by the File-I/O protocol (*note Errno Values::).  For
-     operations which return data, ATTACHMENT supplies the data as a
-     binary buffer.  Binary buffers in response packets are escaped in
-     the normal way (*note Binary Data::).  See the individual packet
-     documentation for the interpretation of RESULT and ATTACHMENT.
-
-`'
-     An empty response indicates that this operation is not recognized.
-
-
-   These are the supported Host I/O operations:
-
-`vFile:open: PATHNAME, FLAGS, MODE'
-     Open a file at PATHNAME and return a file descriptor for it, or
-     return -1 if an error occurs.  PATHNAME is a string, FLAGS is an
-     integer indicating a mask of open flags (*note Open Flags::), and
-     MODE is an integer indicating a mask of mode bits to use if the
-     file is created (*note mode_t Values::).  *Note open::, for
-     details of the open flags and mode values.
-
-`vFile:close: FD'
-     Close the open file corresponding to FD and return 0, or -1 if an
-     error occurs.
-
-`vFile:pread: FD, COUNT, OFFSET'
-     Read data from the open file corresponding to FD.  Up to COUNT
-     bytes will be read from the file, starting at OFFSET relative to
-     the start of the file.  The target may read fewer bytes; common
-     reasons include packet size limits and an end-of-file condition.
-     The number of bytes read is returned.  Zero should only be
-     returned for a successful read at the end of the file, or if COUNT
-     was zero.
-
-     The data read should be returned as a binary attachment on success.
-     If zero bytes were read, the response should include an empty
-     binary attachment (i.e. a trailing semicolon).  The return value
-     is the number of target bytes read; the binary attachment may be
-     longer if some characters were escaped.
-
-`vFile:pwrite: FD, OFFSET, DATA'
-     Write DATA (a binary buffer) to the open file corresponding to FD.
-     Start the write at OFFSET from the start of the file.  Unlike
-     many `write' system calls, there is no separate COUNT argument;
-     the length of DATA in the packet is used.  `vFile:write' returns
-     the number of bytes written, which may be shorter than the length
-     of DATA, or -1 if an error occurred.
-
-`vFile:unlink: PATHNAME'
-     Delete the file at PATHNAME on the target.  Return 0, or -1 if an
-     error occurs.  PATHNAME is a string.
-
-`vFile:readlink: FILENAME'
-     Read value of symbolic link FILENAME on the target.  Return the
-     number of bytes read, or -1 if an error occurs.
-
-     The data read should be returned as a binary attachment on success.
-     If zero bytes were read, the response should include an empty
-     binary attachment (i.e. a trailing semicolon).  The return value
-     is the number of target bytes read; the binary attachment may be
-     longer if some characters were escaped.
+GDB Command
+...........
 
+The corresponding GDB command is 'finish'.
 
-\1f
-File: gdb.info,  Node: Interrupts,  Next: Notification Packets,  Prev: Host I/O Packets,  Up: Remote Protocol
-
-E.8 Interrupts
-==============
-
-When a program on the remote target is running, GDB may attempt to
-interrupt it by sending a `Ctrl-C', `BREAK' or a `BREAK' followed by
-`g', control of which is specified via GDB's `interrupt-sequence'.
-
-   The precise meaning of `BREAK' is defined by the transport mechanism
-and may, in fact, be undefined.  GDB does not currently define a
-`BREAK' mechanism for any of the network interfaces except for TCP, in
-which case GDB sends the `telnet' BREAK sequence.
-
-   `Ctrl-C', on the other hand, is defined and implemented for all
-transport mechanisms.  It is represented by sending the single byte
-`0x03' without any of the usual packet overhead described in the
-Overview section (*note Overview::).  When a `0x03' byte is transmitted
-as part of a packet, it is considered to be packet data and does _not_
-represent an interrupt.  E.g., an `X' packet (*note X packet::), used
-for binary downloads, may include an unescaped `0x03' as part of its
-packet.
-
-   `BREAK' followed by `g' is also known as Magic SysRq g.  When Linux
-kernel receives this sequence from serial port, it stops execution and
-connects to gdb.
-
-   Stubs are not required to recognize these interrupt mechanisms and
-the precise meaning associated with receipt of the interrupt is
-implementation defined.  If the target supports debugging of multiple
-threads and/or processes, it should attempt to interrupt all
-currently-executing threads and processes.  If the stub is successful
-at interrupting the running program, it should send one of the stop
-reply packets (*note Stop Reply Packets::) to GDB as a result of
-successfully stopping the program in all-stop mode, and a stop reply
-for each stopped thread in non-stop mode.  Interrupts received while the
-program is stopped are discarded.
+Example
+.......
 
-\1f
-File: gdb.info,  Node: Notification Packets,  Next: Remote Non-Stop,  Prev: Interrupts,  Up: Remote Protocol
+Function returning 'void'.
 
-E.9 Notification Packets
-========================
+     -exec-finish
+     ^running
+     (gdb)
+     @hello from foo
+     *stopped,reason="function-finished",frame={func="main",args=[],
+     file="hello.c",fullname="/home/foo/bar/hello.c",line="7"}
+     (gdb)
 
-The GDB remote serial protocol includes "notifications", packets that
-require no acknowledgment.  Both the GDB and the stub may send
-notifications (although the only notifications defined at present are
-sent by the stub).  Notifications carry information without incurring
-the round-trip latency of an acknowledgment, and so are useful for
-low-impact communications where occasional packet loss is not a problem.
-
-   A notification packet has the form `% DATA # CHECKSUM', where DATA
-is the content of the notification, and CHECKSUM is a checksum of DATA,
-computed and formatted as for ordinary GDB packets.  A notification's
-DATA never contains `$', `%' or `#' characters.  Upon receiving a
-notification, the recipient sends no `+' or `-' to acknowledge the
-notification's receipt or to report its corruption.
-
-   Every notification's DATA begins with a name, which contains no
-colon characters, followed by a colon character.
-
-   Recipients should silently ignore corrupted notifications and
-notifications they do not understand.  Recipients should restart
-timeout periods on receipt of a well-formed notification, whether or
-not they understand it.
-
-   Senders should only send the notifications described here when this
-protocol description specifies that they are permitted.  In the future,
-we may extend the protocol to permit existing notifications in new
-contexts; this rule helps older senders avoid confusing newer
-recipients.
-
-   (Older versions of GDB ignore bytes received until they see the `$'
-byte that begins an ordinary packet, so new stubs may transmit
-notifications without fear of confusing older clients.  There are no
-notifications defined for GDB to send at the moment, but we assume that
-most older stubs would ignore them, as well.)
-
-   The following notification packets from the stub to GDB are defined:
-
-`Stop: REPLY'
-     Report an asynchronous stop event in non-stop mode.  The REPLY has
-     the form of a stop reply, as described in *Note Stop Reply
-     Packets::.  Refer to *Note Remote Non-Stop::, for information on
-     how these notifications are acknowledged by GDB.
+   Function returning other than 'void'.  The name of the internal GDB
+variable storing the result is printed, together with the value itself.
 
-\1f
-File: gdb.info,  Node: Remote Non-Stop,  Next: Packet Acknowledgment,  Prev: Notification Packets,  Up: Remote Protocol
-
-E.10 Remote Protocol Support for Non-Stop Mode
-==============================================
-
-GDB's remote protocol supports non-stop debugging of multi-threaded
-programs, as described in *Note Non-Stop Mode::.  If the stub supports
-non-stop mode, it should report that to GDB by including `QNonStop+' in
-its `qSupported' response (*note qSupported::).
-
-   GDB typically sends a `QNonStop' packet only when establishing a new
-connection with the stub.  Entering non-stop mode does not alter the
-state of any currently-running threads, but targets must stop all
-threads in any already-attached processes when entering all-stop mode.
-GDB uses the `?' packet as necessary to probe the target state after a
-mode change.
-
-   In non-stop mode, when an attached process encounters an event that
-would otherwise be reported with a stop reply, it uses the asynchronous
-notification mechanism (*note Notification Packets::) to inform GDB.
-In contrast to all-stop mode, where all threads in all processes are
-stopped when a stop reply is sent, in non-stop mode only the thread
-reporting the stop event is stopped.  That is, when reporting a `S' or
-`T' response to indicate completion of a step operation, hitting a
-breakpoint, or a fault, only the affected thread is stopped; any other
-still-running threads continue to run.  When reporting a `W' or `X'
-response, all running threads belonging to other attached processes
-continue to run.
-
-   Only one stop reply notification at a time may be pending; if
-additional stop events occur before GDB has acknowledged the previous
-notification, they must be queued by the stub for later synchronous
-transmission in response to `vStopped' packets from GDB.  Because the
-notification mechanism is unreliable, the stub is permitted to resend a
-stop reply notification if it believes GDB may not have received it.
-GDB ignores additional stop reply notifications received before it has
-finished processing a previous notification and the stub has completed
-sending any queued stop events.
-
-   Otherwise, GDB must be prepared to receive a stop reply notification
-at any time.  Specifically, they may appear when GDB is not otherwise
-reading input from the stub, or when GDB is expecting to read a normal
-synchronous response or a `+'/`-' acknowledgment to a packet it has
-sent.  Notification packets are distinct from any other communication
-from the stub so there is no ambiguity.
-
-   After receiving a stop reply notification, GDB shall acknowledge it
-by sending a `vStopped' packet (*note vStopped packet::) as a regular,
-synchronous request to the stub.  Such acknowledgment is not required
-to happen immediately, as GDB is permitted to send other, unrelated
-packets to the stub first, which the stub should process normally.
-
-   Upon receiving a `vStopped' packet, if the stub has other queued
-stop events to report to GDB, it shall respond by sending a normal stop
-reply response.  GDB shall then send another `vStopped' packet to
-solicit further responses; again, it is permitted to send other,
-unrelated packets as well which the stub should process normally.
-
-   If the stub receives a `vStopped' packet and there are no additional
-stop events to report, the stub shall return an `OK' response.  At this
-point, if further stop events occur, the stub shall send a new stop
-reply notification, GDB shall accept the notification, and the process
-shall be repeated.
-
-   In non-stop mode, the target shall respond to the `?' packet as
-follows.  First, any incomplete stop reply notification/`vStopped'
-sequence in progress is abandoned.  The target must begin a new
-sequence reporting stop events for all stopped threads, whether or not
-it has previously reported those events to GDB.  The first stop reply
-is sent as a synchronous reply to the `?' packet, and subsequent stop
-replies are sent as responses to `vStopped' packets using the mechanism
-described above.  The target must not send asynchronous stop reply
-notifications until the sequence is complete.  If all threads are
-running when the target receives the `?' packet, or if the target is
-not attached to any process, it shall respond `OK'.
+     -exec-finish
+     ^running
+     (gdb)
+     *stopped,reason="function-finished",frame={addr="0x000107b0",func="foo",
+     args=[{name="a",value="1"],{name="b",value="9"}},
+     file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     gdb-result-var="$1",return-value="0"
+     (gdb)
 
-\1f
-File: gdb.info,  Node: Packet Acknowledgment,  Next: Examples,  Prev: Remote Non-Stop,  Up: Remote Protocol
+The '-exec-interrupt' Command
+-----------------------------
 
-E.11 Packet Acknowledgment
-==========================
+Synopsis
+........
 
-By default, when either the host or the target machine receives a
-packet, the first response expected is an acknowledgment: either `+'
-(to indicate the package was received correctly) or `-' (to request
-retransmission).  This mechanism allows the GDB remote protocol to
-operate over unreliable transport mechanisms, such as a serial line.
-
-   In cases where the transport mechanism is itself reliable (such as a
-pipe or TCP connection), the `+'/`-' acknowledgments are redundant.  It
-may be desirable to disable them in that case to reduce communication
-overhead, or for other reasons.  This can be accomplished by means of
-the `QStartNoAckMode' packet; *note QStartNoAckMode::.
-
-   When in no-acknowledgment mode, neither the stub nor GDB shall send
-or expect `+'/`-' protocol acknowledgments.  The packet and response
-format still includes the normal checksum, as described in *Note
-Overview::, but the checksum may be ignored by the receiver.
-
-   If the stub supports `QStartNoAckMode' and prefers to operate in
-no-acknowledgment mode, it should report that to GDB by including
-`QStartNoAckMode+' in its response to `qSupported'; *note qSupported::.
-If GDB also supports `QStartNoAckMode' and it has not been disabled via
-the `set remote noack-packet off' command (*note Remote
-Configuration::), GDB may then send a `QStartNoAckMode' packet to the
-stub.  Only then may the stub actually turn off packet acknowledgments.
-GDB sends a final `+' acknowledgment of the stub's `OK' response, which
-can be safely ignored by the stub.
-
-   Note that `set remote noack-packet' command only affects negotiation
-between GDB and the stub when subsequent connections are made; it does
-not affect the protocol acknowledgment state for any current connection.
-Since `+'/`-' acknowledgments are enabled by default when a new
-connection is established, there is also no protocol request to
-re-enable the acknowledgments for the current connection, once disabled.
+      -exec-interrupt [--all|--thread-group N]
 
-\1f
-File: gdb.info,  Node: Examples,  Next: File-I/O Remote Protocol Extension,  Prev: Packet Acknowledgment,  Up: Remote Protocol
-
-E.12 Examples
-=============
-
-Example sequence of a target being re-started.  Notice how the restart
-does not get any direct output:
-
-     -> `R00'
-     <- `+'
-     _target restarts_
-     -> `?'
-     <- `+'
-     <- `T001:1234123412341234'
-     -> `+'
-
-   Example sequence of a target being stepped by a single instruction:
-
-     -> `G1445...'
-     <- `+'
-     -> `s'
-     <- `+'
-     _time passes_
-     <- `T001:1234123412341234'
-     -> `+'
-     -> `g'
-     <- `+'
-     <- `1455...'
-     -> `+'
+   Interrupts the background execution of the target.  Note how the
+token associated with the stop message is the one for the execution
+command that has been interrupted.  The token for the interrupt itself
+only appears in the '^done' output.  If the user is trying to interrupt
+a non-running program, an error message will be printed.
 
-\1f
-File: gdb.info,  Node: File-I/O Remote Protocol Extension,  Next: Library List Format,  Prev: Examples,  Up: Remote Protocol
+   Note that when asynchronous execution is enabled, this command is
+asynchronous just like other execution commands.  That is, first the
+'^done' response will be printed, and the target stop will be reported
+after that using the '*stopped' notification.
 
-E.13 File-I/O Remote Protocol Extension
-=======================================
+   In non-stop mode, only the context thread is interrupted by default.
+All threads (in all inferiors) will be interrupted if the '--all' option
+is specified.  If the '--thread-group' option is specified, all threads
+in that group will be interrupted.
 
-* Menu:
+GDB Command
+...........
 
-* File-I/O Overview::
-* Protocol Basics::
-* The F Request Packet::
-* The F Reply Packet::
-* The Ctrl-C Message::
-* Console I/O::
-* List of Supported Calls::
-* Protocol-specific Representation of Datatypes::
-* Constants::
-* File-I/O Examples::
+The corresponding GDB command is 'interrupt'.
 
-\1f
-File: gdb.info,  Node: File-I/O Overview,  Next: Protocol Basics,  Up: File-I/O Remote Protocol Extension
+Example
+.......
 
-E.13.1 File-I/O Overview
-------------------------
+     (gdb)
+     111-exec-continue
+     111^running
 
-The "File I/O remote protocol extension" (short: File-I/O) allows the
-target to use the host's file system and console I/O to perform various
-system calls.  System calls on the target system are translated into a
-remote protocol packet to the host system, which then performs the
-needed actions and returns a response packet to the target system.
-This simulates file system operations even on targets that lack file
-systems.
-
-   The protocol is defined to be independent of both the host and
-target systems.  It uses its own internal representation of datatypes
-and values.  Both GDB and the target's GDB stub are responsible for
-translating the system-dependent value representations into the internal
-protocol representations when data is transmitted.
-
-   The communication is synchronous.  A system call is possible only
-when GDB is waiting for a response from the `C', `c', `S' or `s'
-packets.  While GDB handles the request for a system call, the target
-is stopped to allow deterministic access to the target's memory.
-Therefore File-I/O is not interruptible by target signals.  On the
-other hand, it is possible to interrupt File-I/O by a user interrupt
-(`Ctrl-C') within GDB.
-
-   The target's request to perform a host system call does not finish
-the latest `C', `c', `S' or `s' action.  That means, after finishing
-the system call, the target returns to continuing the previous activity
-(continue, step).  No additional continue or step request from GDB is
-required.
-
-     (gdb) continue
-       <- target requests 'system call X'
-       target is stopped, GDB executes system call
-       -> GDB returns result
-       ... target continues, GDB returns to wait for the target
-       <- target hits breakpoint and sends a Txx packet
-
-   The protocol only supports I/O on the console and to regular files on
-the host file system.  Character or block special devices, pipes, named
-pipes, sockets or any other communication method on the host system are
-not supported by this protocol.
-
-   File I/O is not supported in non-stop mode.
+     (gdb)
+     222-exec-interrupt
+     222^done
+     (gdb)
+     111*stopped,signal-name="SIGINT",signal-meaning="Interrupt",
+     frame={addr="0x00010140",func="foo",args=[],file="try.c",
+     fullname="/home/foo/bar/try.c",line="13"}
+     (gdb)
 
-\1f
-File: gdb.info,  Node: Protocol Basics,  Next: The F Request Packet,  Prev: File-I/O Overview,  Up: File-I/O Remote Protocol Extension
+     (gdb)
+     -exec-interrupt
+     ^error,msg="mi_cmd_exec_interrupt: Inferior not executing."
+     (gdb)
 
-E.13.2 Protocol Basics
-----------------------
+The '-exec-jump' Command
+------------------------
 
-The File-I/O protocol uses the `F' packet as the request as well as
-reply packet.  Since a File-I/O system call can only occur when GDB is
-waiting for a response from the continuing or stepping target, the
-File-I/O request is a reply that GDB has to expect as a result of a
-previous `C', `c', `S' or `s' packet.  This `F' packet contains all
-information needed to allow GDB to call the appropriate host system
-call:
+Synopsis
+........
 
-   * A unique identifier for the requested system call.
+      -exec-jump LOCATION
 
-   * All parameters to the system call.  Pointers are given as addresses
-     in the target memory address space.  Pointers to strings are given
-     as pointer/length pair.  Numerical values are given as they are.
-     Numerical control flags are given in a protocol-specific
-     representation.
+   Resumes execution of the inferior program at the location specified
+by parameter.  *Note Specify Location::, for a description of the
+different forms of LOCATION.
 
+GDB Command
+...........
 
-   At this point, GDB has to perform the following actions.
+The corresponding GDB command is 'jump'.
 
-   * If the parameters include pointer values to data needed as input
-     to a system call, GDB requests this data from the target with a
-     standard `m' packet request.  This additional communication has to
-     be expected by the target implementation and is handled as any
-     other `m' packet.
+Example
+.......
 
-   * GDB translates all value from protocol representation to host
-     representation as needed.  Datatypes are coerced into the host
-     types.
+     -exec-jump foo.c:10
+     *running,thread-id="all"
+     ^running
 
-   * GDB calls the system call.
+The '-exec-next' Command
+------------------------
 
-   * It then coerces datatypes back to protocol representation.
+Synopsis
+........
 
-   * If the system call is expected to return data in buffer space
-     specified by pointer parameters to the call, the data is
-     transmitted to the target using a `M' or `X' packet.  This packet
-     has to be expected by the target implementation and is handled as
-     any other `M' or `X' packet.
+      -exec-next [--reverse]
 
+   Resumes execution of the inferior program, stopping when the
+beginning of the next source line is reached.
 
-   Eventually GDB replies with another `F' packet which contains all
-necessary information for the target to continue.  This at least
-contains
+   If the '--reverse' option is specified, resumes reverse execution of
+the inferior program, stopping at the beginning of the previous source
+line.  If you issue this command on the first line of a function, it
+will take you back to the caller of that function, to the source line
+where the function was called.
 
-   * Return value.
+GDB Command
+...........
 
-   * `errno', if has been changed by the system call.
+The corresponding GDB command is 'next'.
 
-   * "Ctrl-C" flag.
+Example
+.......
 
+     -exec-next
+     ^running
+     (gdb)
+     *stopped,reason="end-stepping-range",line="8",file="hello.c"
+     (gdb)
 
-   After having done the needed type and value coercion, the target
-continues the latest continue or step action.
+The '-exec-next-instruction' Command
+------------------------------------
 
-\1f
-File: gdb.info,  Node: The F Request Packet,  Next: The F Reply Packet,  Prev: Protocol Basics,  Up: File-I/O Remote Protocol Extension
+Synopsis
+........
 
-E.13.3 The `F' Request Packet
------------------------------
+      -exec-next-instruction [--reverse]
 
-The `F' request packet has the following format:
+   Executes one machine instruction.  If the instruction is a function
+call, continues until the function returns.  If the program stops at an
+instruction in the middle of a source line, the address will be printed
+as well.
 
-`FCALL-ID,PARAMETER...'
-     CALL-ID is the identifier to indicate the host system call to be
-     called.  This is just the name of the function.
+   If the '--reverse' option is specified, resumes reverse execution of
+the inferior program, stopping at the previous instruction.  If the
+previously executed instruction was a return from another function, it
+will continue to execute in reverse until the call to that function
+(from the current stack frame) is reached.
 
-     PARAMETER... are the parameters to the system call.  Parameters
-     are hexadecimal integer values, either the actual values in case
-     of scalar datatypes, pointers to target buffer space in case of
-     compound datatypes and unspecified memory areas, or pointer/length
-     pairs in case of string parameters.  These are appended to the
-     CALL-ID as a comma-delimited list.  All values are transmitted in
-     ASCII string representation, pointer/length pairs separated by a
-     slash.
+GDB Command
+...........
 
+The corresponding GDB command is 'nexti'.
 
-\1f
-File: gdb.info,  Node: The F Reply Packet,  Next: The Ctrl-C Message,  Prev: The F Request Packet,  Up: File-I/O Remote Protocol Extension
+Example
+.......
 
-E.13.4 The `F' Reply Packet
----------------------------
+     (gdb)
+     -exec-next-instruction
+     ^running
 
-The `F' reply packet has the following format:
+     (gdb)
+     *stopped,reason="end-stepping-range",
+     addr="0x000100d4",line="5",file="hello.c"
+     (gdb)
 
-`FRETCODE,ERRNO,CTRL-C FLAG;CALL-SPECIFIC ATTACHMENT'
-     RETCODE is the return code of the system call as hexadecimal value.
+The '-exec-return' Command
+--------------------------
 
-     ERRNO is the `errno' set by the call, in protocol-specific
-     representation.  This parameter can be omitted if the call was
-     successful.
+Synopsis
+........
 
-     CTRL-C FLAG is only sent if the user requested a break.  In this
-     case, ERRNO must be sent as well, even if the call was successful.
-     The CTRL-C FLAG itself consists of the character `C':
+      -exec-return
 
-          F0,0,C
+   Makes current function return immediately.  Doesn't execute the
+inferior.  Displays the new current frame.
 
-     or, if the call was interrupted before the host call has been
-     performed:
+GDB Command
+...........
 
-          F-1,4,C
+The corresponding GDB command is 'return'.
+
+Example
+.......
+
+     (gdb)
+     200-break-insert callee4
+     200^done,bkpt={number="1",addr="0x00010734",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",line="8"}
+     (gdb)
+     000-exec-run
+     000^running
+     (gdb)
+     000*stopped,reason="breakpoint-hit",disp="keep",bkptno="1",
+     frame={func="callee4",args=[],
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="8"}
+     (gdb)
+     205-break-delete
+     205^done
+     (gdb)
+     111-exec-return
+     111^done,frame={level="0",func="callee3",
+     args=[{name="strarg",
+     value="0x11940 \"A string argument.\""}],
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="18"}
+     (gdb)
+
+The '-exec-run' Command
+-----------------------
+
+Synopsis
+........
+
+      -exec-run [ --all | --thread-group N ] [ --start ]
+
+   Starts execution of the inferior from the beginning.  The inferior
+executes until either a breakpoint is encountered or the program exits.
+In the latter case the output will include an exit code, if the program
+has exited exceptionally.
+
+   When neither the '--all' nor the '--thread-group' option is
+specified, the current inferior is started.  If the '--thread-group'
+option is specified, it should refer to a thread group of type
+'process', and that thread group will be started.  If the '--all' option
+is specified, then all inferiors will be started.
+
+   Using the '--start' option instructs the debugger to stop the
+execution at the start of the inferior's main subprogram, following the
+same behavior as the 'start' command (*note Starting::).
+
+GDB Command
+...........
 
-     assuming 4 is the protocol-specific representation of `EINTR'.
+The corresponding GDB command is 'run'.
+
+Examples
+........
+
+     (gdb)
+     -break-insert main
+     ^done,bkpt={number="1",addr="0x0001072c",file="recursive2.c",line="4"}
+     (gdb)
+     -exec-run
+     ^running
+     (gdb)
+     *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",
+     frame={func="main",args=[],file="recursive2.c",
+     fullname="/home/foo/bar/recursive2.c",line="4"}
+     (gdb)
+
+Program exited normally:
+
+     (gdb)
+     -exec-run
+     ^running
+     (gdb)
+     x = 55
+     *stopped,reason="exited-normally"
+     (gdb)
+
+Program exited exceptionally:
+
+     (gdb)
+     -exec-run
+     ^running
+     (gdb)
+     x = 55
+     *stopped,reason="exited",exit-code="01"
+     (gdb)
+
+   Another way the program can terminate is if it receives a signal such
+as 'SIGINT'.  In this case, GDB/MI displays this:
+
+     (gdb)
+     *stopped,reason="exited-signalled",signal-name="SIGINT",
+     signal-meaning="Interrupt"
+
+The '-exec-step' Command
+------------------------
 
+Synopsis
+........
 
-\1f
-File: gdb.info,  Node: The Ctrl-C Message,  Next: Console I/O,  Prev: The F Reply Packet,  Up: File-I/O Remote Protocol Extension
+      -exec-step [--reverse]
 
-E.13.5 The `Ctrl-C' Message
----------------------------
+   Resumes execution of the inferior program, stopping when the
+beginning of the next source line is reached, if the next source line is
+not a function call.  If it is, stop at the first instruction of the
+called function.  If the '--reverse' option is specified, resumes
+reverse execution of the inferior program, stopping at the beginning of
+the previously executed source line.
 
-If the `Ctrl-C' flag is set in the GDB reply packet (*note The F Reply
-Packet::), the target should behave as if it had gotten a break
-message.  The meaning for the target is "system call interrupted by
-`SIGINT'".  Consequentially, the target should actually stop (as with a
-break message) and return to GDB with a `T02' packet.
+GDB Command
+...........
 
-   It's important for the target to know in which state the system call
-was interrupted.  There are two possible cases:
+The corresponding GDB command is 'step'.
 
-   * The system call hasn't been performed on the host yet.
+Example
+.......
 
-   * The system call on the host has been finished.
+Stepping into a function:
 
+     -exec-step
+     ^running
+     (gdb)
+     *stopped,reason="end-stepping-range",
+     frame={func="foo",args=[{name="a",value="10"},
+     {name="b",value="0"}],file="recursive2.c",
+     fullname="/home/foo/bar/recursive2.c",line="11"}
+     (gdb)
 
-   These two states can be distinguished by the target by the value of
-the returned `errno'.  If it's the protocol representation of `EINTR',
-the system call hasn't been performed.  This is equivalent to the
-`EINTR' handling on POSIX systems.  In any other case, the target may
-presume that the system call has been finished -- successfully or not
--- and should behave as if the break message arrived right after the
-system call.
+   Regular stepping:
 
-   GDB must behave reliably.  If the system call has not been called
-yet, GDB may send the `F' reply immediately, setting `EINTR' as `errno'
-in the packet.  If the system call on the host has been finished before
-the user requests a break, the full action must be finished by GDB.
-This requires sending `M' or `X' packets as necessary.  The `F' packet
-may only be sent when either nothing has happened or the full action
-has been completed.
+     -exec-step
+     ^running
+     (gdb)
+     *stopped,reason="end-stepping-range",line="14",file="recursive2.c"
+     (gdb)
 
-\1f
-File: gdb.info,  Node: Console I/O,  Next: List of Supported Calls,  Prev: The Ctrl-C Message,  Up: File-I/O Remote Protocol Extension
+The '-exec-step-instruction' Command
+------------------------------------
 
-E.13.6 Console I/O
-------------------
+Synopsis
+........
 
-By default and if not explicitly closed by the target system, the file
-descriptors 0, 1 and 2 are connected to the GDB console.  Output on the
-GDB console is handled as any other file output operation (`write(1,
-...)' or `write(2, ...)').  Console input is handled by GDB so that
-after the target read request from file descriptor 0 all following
-typing is buffered until either one of the following conditions is met:
+      -exec-step-instruction [--reverse]
 
-   * The user types `Ctrl-c'.  The behaviour is as explained above, and
-     the `read' system call is treated as finished.
+   Resumes the inferior which executes one machine instruction.  If the
+'--reverse' option is specified, resumes reverse execution of the
+inferior program, stopping at the previously executed instruction.  The
+output, once GDB has stopped, will vary depending on whether we have
+stopped in the middle of a source line or not.  In the former case, the
+address at which the program stopped will be printed as well.
 
-   * The user presses <RET>.  This is treated as end of input with a
-     trailing newline.
+GDB Command
+...........
 
-   * The user types `Ctrl-d'.  This is treated as end of input.  No
-     trailing character (neither newline nor `Ctrl-D') is appended to
-     the input.
+The corresponding GDB command is 'stepi'.
 
+Example
+.......
 
-   If the user has typed more characters than fit in the buffer given to
-the `read' call, the trailing characters are buffered in GDB until
-either another `read(0, ...)' is requested by the target, or debugging
-is stopped at the user's request.
+     (gdb)
+     -exec-step-instruction
+     ^running
 
-\1f
-File: gdb.info,  Node: List of Supported Calls,  Next: Protocol-specific Representation of Datatypes,  Prev: Console I/O,  Up: File-I/O Remote Protocol Extension
+     (gdb)
+     *stopped,reason="end-stepping-range",
+     frame={func="foo",args=[],file="try.c",
+     fullname="/home/foo/bar/try.c",line="10"}
+     (gdb)
+     -exec-step-instruction
+     ^running
 
-E.13.7 List of Supported Calls
-------------------------------
+     (gdb)
+     *stopped,reason="end-stepping-range",
+     frame={addr="0x000100f4",func="foo",args=[],file="try.c",
+     fullname="/home/foo/bar/try.c",line="10"}
+     (gdb)
 
-* Menu:
+The '-exec-until' Command
+-------------------------
 
-* open::
-* close::
-* read::
-* write::
-* lseek::
-* rename::
-* unlink::
-* stat/fstat::
-* gettimeofday::
-* isatty::
-* system::
+Synopsis
+........
 
-\1f
-File: gdb.info,  Node: open,  Next: close,  Up: List of Supported Calls
+      -exec-until [ LOCATION ]
 
-open
-....
+   Executes the inferior until the LOCATION specified in the argument is
+reached.  If there is no argument, the inferior executes until a source
+line greater than the current one is reached.  The reason for stopping
+in this case will be 'location-reached'.
 
-Synopsis:
-          int open(const char *pathname, int flags);
-          int open(const char *pathname, int flags, mode_t mode);
+GDB Command
+...........
 
-Request:
-     `Fopen,PATHPTR/LEN,FLAGS,MODE'
+The corresponding GDB command is 'until'.
 
-     FLAGS is the bitwise `OR' of the following values:
+Example
+.......
 
-    `O_CREAT'
-          If the file does not exist it will be created.  The host
-          rules apply as far as file ownership and time stamps are
-          concerned.
+     (gdb)
+     -exec-until recursive2.c:6
+     ^running
+     (gdb)
+     x = 55
+     *stopped,reason="location-reached",frame={func="main",args=[],
+     file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="6"}
+     (gdb)
 
-    `O_EXCL'
-          When used with `O_CREAT', if the file already exists it is an
-          error and open() fails.
+\1f
+File: gdb.info,  Node: GDB/MI Stack Manipulation,  Next: GDB/MI Variable Objects,  Prev: GDB/MI Program Execution,  Up: GDB/MI
 
-    `O_TRUNC'
-          If the file already exists and the open mode allows writing
-          (`O_RDWR' or `O_WRONLY' is given) it will be truncated to
-          zero length.
+27.14 GDB/MI Stack Manipulation Commands
+========================================
 
-    `O_APPEND'
-          The file is opened in append mode.
+The '-enable-frame-filters' Command
+-----------------------------------
 
-    `O_RDONLY'
-          The file is opened for reading only.
+     -enable-frame-filters
 
-    `O_WRONLY'
-          The file is opened for writing only.
+   GDB allows Python-based frame filters to affect the output of the MI
+commands relating to stack traces.  As there is no way to implement this
+in a fully backward-compatible way, a front end must request that this
+functionality be enabled.
 
-    `O_RDWR'
-          The file is opened for reading and writing.
+   Once enabled, this feature cannot be disabled.
 
-     Other bits are silently ignored.
+   Note that if Python support has not been compiled into GDB, this
+command will still succeed (and do nothing).
 
-     MODE is the bitwise `OR' of the following values:
+The '-stack-info-frame' Command
+-------------------------------
 
-    `S_IRUSR'
-          User has read permission.
+Synopsis
+........
 
-    `S_IWUSR'
-          User has write permission.
+      -stack-info-frame
 
-    `S_IRGRP'
-          Group has read permission.
+   Get info on the selected frame.
 
-    `S_IWGRP'
-          Group has write permission.
+GDB Command
+...........
 
-    `S_IROTH'
-          Others have read permission.
+The corresponding GDB command is 'info frame' or 'frame' (without
+arguments).
 
-    `S_IWOTH'
-          Others have write permission.
+Example
+.......
 
-     Other bits are silently ignored.
+     (gdb)
+     -stack-info-frame
+     ^done,frame={level="1",addr="0x0001076c",func="callee3",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17"}
+     (gdb)
 
-Return value:
-     `open' returns the new file descriptor or -1 if an error occurred.
+The '-stack-info-depth' Command
+-------------------------------
 
-Errors:
+Synopsis
+........
 
-    `EEXIST'
-          PATHNAME already exists and `O_CREAT' and `O_EXCL' were used.
+      -stack-info-depth [ MAX-DEPTH ]
 
-    `EISDIR'
-          PATHNAME refers to a directory.
+   Return the depth of the stack.  If the integer argument MAX-DEPTH is
+specified, do not count beyond MAX-DEPTH frames.
 
-    `EACCES'
-          The requested access is not allowed.
+GDB Command
+...........
 
-    `ENAMETOOLONG'
-          PATHNAME was too long.
+There's no equivalent GDB command.
+
+Example
+.......
+
+For a stack with frame levels 0 through 11:
+
+     (gdb)
+     -stack-info-depth
+     ^done,depth="12"
+     (gdb)
+     -stack-info-depth 4
+     ^done,depth="4"
+     (gdb)
+     -stack-info-depth 12
+     ^done,depth="12"
+     (gdb)
+     -stack-info-depth 11
+     ^done,depth="11"
+     (gdb)
+     -stack-info-depth 13
+     ^done,depth="12"
+     (gdb)
+
+The '-stack-list-arguments' Command
+-----------------------------------
 
-    `ENOENT'
-          A directory component in PATHNAME does not exist.
+Synopsis
+........
 
-    `ENODEV'
-          PATHNAME refers to a device, pipe, named pipe or socket.
+      -stack-list-arguments [ --no-frame-filters ] [ --skip-unavailable ] PRINT-VALUES
+         [ LOW-FRAME HIGH-FRAME ]
 
-    `EROFS'
-          PATHNAME refers to a file on a read-only filesystem and write
-          access was requested.
+   Display a list of the arguments for the frames between LOW-FRAME and
+HIGH-FRAME (inclusive).  If LOW-FRAME and HIGH-FRAME are not provided,
+list the arguments for the whole call stack.  If the two arguments are
+equal, show the single frame at the corresponding level.  It is an error
+if LOW-FRAME is larger than the actual number of frames.  On the other
+hand, HIGH-FRAME may be larger than the actual number of frames, in
+which case only existing frames will be returned.
 
-    `EFAULT'
-          PATHNAME is an invalid pointer value.
+   If PRINT-VALUES is 0 or '--no-values', print only the names of the
+variables; if it is 1 or '--all-values', print also their values; and if
+it is 2 or '--simple-values', print the name, type and value for simple
+data types, and the name and type for arrays, structures and unions.  If
+the option '--no-frame-filters' is supplied, then Python frame filters
+will not be executed.
 
-    `ENOSPC'
-          No space on device to create the file.
+   If the '--skip-unavailable' option is specified, arguments that are
+not available are not listed.  Partially available arguments are still
+displayed, however.
 
-    `EMFILE'
-          The process already has the maximum number of files open.
+   Use of this command to obtain arguments in a single frame is
+deprecated in favor of the '-stack-list-variables' command.
 
-    `ENFILE'
-          The limit on the total number of files open on the system has
-          been reached.
+GDB Command
+...........
 
-    `EINTR'
-          The call was interrupted by the user.
+GDB does not have an equivalent command.  'gdbtk' has a 'gdb_get_args'
+command which partially overlaps with the functionality of
+'-stack-list-arguments'.
+
+Example
+.......
+
+     (gdb)
+     -stack-list-frames
+     ^done,
+     stack=[
+     frame={level="0",addr="0x00010734",func="callee4",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="8"},
+     frame={level="1",addr="0x0001076c",func="callee3",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="17"},
+     frame={level="2",addr="0x0001078c",func="callee2",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="22"},
+     frame={level="3",addr="0x000107b4",func="callee1",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="27"},
+     frame={level="4",addr="0x000107e0",func="main",
+     file="../../../devo/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/home/foo/bar/devo/gdb/testsuite/gdb.mi/basics.c",line="32"}]
+     (gdb)
+     -stack-list-arguments 0
+     ^done,
+     stack-args=[
+     frame={level="0",args=[]},
+     frame={level="1",args=[name="strarg"]},
+     frame={level="2",args=[name="intarg",name="strarg"]},
+     frame={level="3",args=[name="intarg",name="strarg",name="fltarg"]},
+     frame={level="4",args=[]}]
+     (gdb)
+     -stack-list-arguments 1
+     ^done,
+     stack-args=[
+     frame={level="0",args=[]},
+     frame={level="1",
+      args=[{name="strarg",value="0x11940 \"A string argument.\""}]},
+     frame={level="2",args=[
+     {name="intarg",value="2"},
+     {name="strarg",value="0x11940 \"A string argument.\""}]},
+     {frame={level="3",args=[
+     {name="intarg",value="2"},
+     {name="strarg",value="0x11940 \"A string argument.\""},
+     {name="fltarg",value="3.5"}]},
+     frame={level="4",args=[]}]
+     (gdb)
+     -stack-list-arguments 0 2 2
+     ^done,stack-args=[frame={level="2",args=[name="intarg",name="strarg"]}]
+     (gdb)
+     -stack-list-arguments 1 2 2
+     ^done,stack-args=[frame={level="2",
+     args=[{name="intarg",value="2"},
+     {name="strarg",value="0x11940 \"A string argument.\""}]}]
+     (gdb)
+
+The '-stack-list-frames' Command
+--------------------------------
+
+Synopsis
+........
+
+      -stack-list-frames [ --no-frame-filters LOW-FRAME HIGH-FRAME ]
+
+   List the frames currently on the stack.  For each frame it displays
+the following info:
+
+'LEVEL'
+     The frame number, 0 being the topmost frame, i.e., the innermost
+     function.
+'ADDR'
+     The '$pc' value for that frame.
+'FUNC'
+     Function name.
+'FILE'
+     File name of the source file where the function lives.
+'FULLNAME'
+     The full file name of the source file where the function lives.
+'LINE'
+     Line number corresponding to the '$pc'.
+'FROM'
+     The shared library where this function is defined.  This is only
+     given if the frame's function is not known.
+
+   If invoked without arguments, this command prints a backtrace for the
+whole stack.  If given two integer arguments, it shows the frames whose
+levels are between the two arguments (inclusive).  If the two arguments
+are equal, it shows the single frame at the corresponding level.  It is
+an error if LOW-FRAME is larger than the actual number of frames.  On
+the other hand, HIGH-FRAME may be larger than the actual number of
+frames, in which case only existing frames will be returned.  If the
+option '--no-frame-filters' is supplied, then Python frame filters will
+not be executed.
+
+GDB Command
+...........
 
+The corresponding GDB commands are 'backtrace' and 'where'.
+
+Example
+.......
+
+Full stack backtrace:
+
+     (gdb)
+     -stack-list-frames
+     ^done,stack=
+     [frame={level="0",addr="0x0001076c",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="11"},
+     frame={level="1",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="2",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="3",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="4",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="5",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="6",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="7",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="8",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="9",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="10",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="11",addr="0x00010738",func="main",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="4"}]
+     (gdb)
+
+   Show frames between LOW_FRAME and HIGH_FRAME:
+
+     (gdb)
+     -stack-list-frames 3 5
+     ^done,stack=
+     [frame={level="3",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="4",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"},
+     frame={level="5",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"}]
+     (gdb)
+
+   Show a single frame:
+
+     (gdb)
+     -stack-list-frames 3 3
+     ^done,stack=
+     [frame={level="3",addr="0x000107a4",func="foo",
+       file="recursive2.c",fullname="/home/foo/bar/recursive2.c",line="14"}]
+     (gdb)
+
+The '-stack-list-locals' Command
+--------------------------------
+
+Synopsis
+........
+
+      -stack-list-locals [ --no-frame-filters ] [ --skip-unavailable ] PRINT-VALUES
+
+   Display the local variable names for the selected frame.  If
+PRINT-VALUES is 0 or '--no-values', print only the names of the
+variables; if it is 1 or '--all-values', print also their values; and if
+it is 2 or '--simple-values', print the name, type and value for simple
+data types, and the name and type for arrays, structures and unions.  In
+this last case, a frontend can immediately display the value of simple
+data types and create variable objects for other data types when the
+user wishes to explore their values in more detail.  If the option
+'--no-frame-filters' is supplied, then Python frame filters will not be
+executed.
+
+   If the '--skip-unavailable' option is specified, local variables that
+are not available are not listed.  Partially available local variables
+are still displayed, however.
+
+   This command is deprecated in favor of the '-stack-list-variables'
+command.
+
+GDB Command
+...........
 
-\1f
-File: gdb.info,  Node: close,  Next: read,  Prev: open,  Up: List of Supported Calls
+'info locals' in GDB, 'gdb_get_locals' in 'gdbtk'.
 
-close
-.....
+Example
+.......
 
-Synopsis:
-          int close(int fd);
+     (gdb)
+     -stack-list-locals 0
+     ^done,locals=[name="A",name="B",name="C"]
+     (gdb)
+     -stack-list-locals --all-values
+     ^done,locals=[{name="A",value="1"},{name="B",value="2"},
+       {name="C",value="{1, 2, 3}"}]
+     -stack-list-locals --simple-values
+     ^done,locals=[{name="A",type="int",value="1"},
+       {name="B",type="int",value="2"},{name="C",type="int [3]"}]
+     (gdb)
 
-Request:
-     `Fclose,FD'
+The '-stack-list-variables' Command
+-----------------------------------
 
-Return value:
-     `close' returns zero on success, or -1 if an error occurred.
+Synopsis
+........
 
-Errors:
+      -stack-list-variables [ --no-frame-filters ] [ --skip-unavailable ] PRINT-VALUES
 
-    `EBADF'
-          FD isn't a valid open file descriptor.
+   Display the names of local variables and function arguments for the
+selected frame.  If PRINT-VALUES is 0 or '--no-values', print only the
+names of the variables; if it is 1 or '--all-values', print also their
+values; and if it is 2 or '--simple-values', print the name, type and
+value for simple data types, and the name and type for arrays,
+structures and unions.  If the option '--no-frame-filters' is supplied,
+then Python frame filters will not be executed.
 
-    `EINTR'
-          The call was interrupted by the user.
+   If the '--skip-unavailable' option is specified, local variables and
+arguments that are not available are not listed.  Partially available
+arguments and local variables are still displayed, however.
 
+Example
+.......
 
-\1f
-File: gdb.info,  Node: read,  Next: write,  Prev: close,  Up: List of Supported Calls
+     (gdb)
+     -stack-list-variables --thread 1 --frame 0 --all-values
+     ^done,variables=[{name="x",value="11"},{name="s",value="{a = 1, b = 2}"}]
+     (gdb)
 
-read
-....
+The '-stack-select-frame' Command
+---------------------------------
 
-Synopsis:
-          int read(int fd, void *buf, unsigned int count);
+Synopsis
+........
 
-Request:
-     `Fread,FD,BUFPTR,COUNT'
+      -stack-select-frame FRAMENUM
 
-Return value:
-     On success, the number of bytes read is returned.  Zero indicates
-     end of file.  If count is zero, read returns zero as well.  On
-     error, -1 is returned.
+   Change the selected frame.  Select a different frame FRAMENUM on the
+stack.
 
-Errors:
+   This command in deprecated in favor of passing the '--frame' option
+to every command.
 
-    `EBADF'
-          FD is not a valid file descriptor or is not open for reading.
+GDB Command
+...........
 
-    `EFAULT'
-          BUFPTR is an invalid pointer value.
+The corresponding GDB commands are 'frame', 'up', 'down',
+'select-frame', 'up-silent', and 'down-silent'.
 
-    `EINTR'
-          The call was interrupted by the user.
+Example
+.......
 
+     (gdb)
+     -stack-select-frame 2
+     ^done
+     (gdb)
 
 \1f
-File: gdb.info,  Node: write,  Next: lseek,  Prev: read,  Up: List of Supported Calls
+File: gdb.info,  Node: GDB/MI Variable Objects,  Next: GDB/MI Data Manipulation,  Prev: GDB/MI Stack Manipulation,  Up: GDB/MI
 
-write
-.....
+27.15 GDB/MI Variable Objects
+=============================
 
-Synopsis:
-          int write(int fd, const void *buf, unsigned int count);
+Introduction to Variable Objects
+--------------------------------
+
+Variable objects are "object-oriented" MI interface for examining and
+changing values of expressions.  Unlike some other MI interfaces that
+work with expressions, variable objects are specifically designed for
+simple and efficient presentation in the frontend.  A variable object is
+identified by string name.  When a variable object is created, the
+frontend specifies the expression for that variable object.  The
+expression can be a simple variable, or it can be an arbitrary complex
+expression, and can even involve CPU registers.  After creating a
+variable object, the frontend can invoke other variable object
+operations--for example to obtain or change the value of a variable
+object, or to change display format.
+
+   Variable objects have hierarchical tree structure.  Any variable
+object that corresponds to a composite type, such as structure in C, has
+a number of child variable objects, for example corresponding to each
+element of a structure.  A child variable object can itself have
+children, recursively.  Recursion ends when we reach leaf variable
+objects, which always have built-in types.  Child variable objects are
+created only by explicit request, so if a frontend is not interested in
+the children of a particular variable object, no child will be created.
+
+   For a leaf variable object it is possible to obtain its value as a
+string, or set the value from a string.  String value can be also
+obtained for a non-leaf variable object, but it's generally a string
+that only indicates the type of the object, and does not list its
+contents.  Assignment to a non-leaf variable object is not allowed.
+
+   A frontend does not need to read the values of all variable objects
+each time the program stops.  Instead, MI provides an update command
+that lists all variable objects whose values has changed since the last
+update operation.  This considerably reduces the amount of data that
+must be transferred to the frontend.  As noted above, children variable
+objects are created on demand, and only leaf variable objects have a
+real value.  As result, gdb will read target memory only for leaf
+variables that frontend has created.
+
+   The automatic update is not always desirable.  For example, a
+frontend might want to keep a value of some expression for future
+reference, and never update it.  For another example, fetching memory is
+relatively slow for embedded targets, so a frontend might want to
+disable automatic update for the variables that are either not visible
+on the screen, or "closed".  This is possible using so called "frozen
+variable objects".  Such variable objects are never implicitly updated.
+
+   Variable objects can be either "fixed" or "floating".  For the fixed
+variable object, the expression is parsed when the variable object is
+created, including associating identifiers to specific variables.  The
+meaning of expression never changes.  For a floating variable object the
+values of variables whose names appear in the expressions are
+re-evaluated every time in the context of the current frame.  Consider
+this example:
+
+     void do_work(...)
+     {
+             struct work_state state;
+
+             if (...)
+                do_work(...);
+     }
+
+   If a fixed variable object for the 'state' variable is created in
+this function, and we enter the recursive call, the variable object will
+report the value of 'state' in the top-level 'do_work' invocation.  On
+the other hand, a floating variable object will report the value of
+'state' in the current frame.
+
+   If an expression specified when creating a fixed variable object
+refers to a local variable, the variable object becomes bound to the
+thread and frame in which the variable object is created.  When such
+variable object is updated, GDB makes sure that the thread/frame
+combination the variable object is bound to still exists, and
+re-evaluates the variable object in context of that thread/frame.
+
+   The following is the complete set of GDB/MI operations defined to
+access this functionality:
+
+*Operation*                   *Description*
+                              
+'-enable-pretty-printing'     enable Python-based pretty-printing
+'-var-create'                 create a variable object
+'-var-delete'                 delete the variable object and/or its
+                              children
+'-var-set-format'             set the display format of this variable
+'-var-show-format'            show the display format of this variable
+'-var-info-num-children'      tells how many children this object has
+'-var-list-children'          return a list of the object's children
+'-var-info-type'              show the type of this variable object
+'-var-info-expression'        print parent-relative expression that
+                              this variable object represents
+'-var-info-path-expression'   print full expression that this variable
+                              object represents
+'-var-show-attributes'        is this variable editable?  does it exist
+                              here?
+'-var-evaluate-expression'    get the value of this variable
+'-var-assign'                 set the value of this variable
+'-var-update'                 update the variable and its children
+'-var-set-frozen'             set frozeness attribute
+'-var-set-update-range'       set range of children to display on
+                              update
+
+   In the next subsection we describe each operation in detail and
+suggest how it can be used.
+
+Description And Use of Operations on Variable Objects
+-----------------------------------------------------
+
+The '-enable-pretty-printing' Command
+-------------------------------------
+
+     -enable-pretty-printing
+
+   GDB allows Python-based visualizers to affect the output of the MI
+variable object commands.  However, because there was no way to
+implement this in a fully backward-compatible way, a front end must
+request that this functionality be enabled.
+
+   Once enabled, this feature cannot be disabled.
+
+   Note that if Python support has not been compiled into GDB, this
+command will still succeed (and do nothing).
+
+   This feature is currently (as of GDB 7.0) experimental, and may work
+differently in future versions of GDB.
+
+The '-var-create' Command
+-------------------------
 
-Request:
-     `Fwrite,FD,BUFPTR,COUNT'
+Synopsis
+........
 
-Return value:
-     On success, the number of bytes written are returned.  Zero
-     indicates nothing was written.  On error, -1 is returned.
+      -var-create {NAME | "-"}
+         {FRAME-ADDR | "*" | "@"} EXPRESSION
 
-Errors:
+   This operation creates a variable object, which allows the monitoring
+of a variable, the result of an expression, a memory cell or a CPU
+register.
 
-    `EBADF'
-          FD is not a valid file descriptor or is not open for writing.
+   The NAME parameter is the string by which the object can be
+referenced.  It must be unique.  If '-' is specified, the varobj system
+will generate a string "varNNNNNN" automatically.  It will be unique
+provided that one does not specify NAME of that format.  The command
+fails if a duplicate name is found.
 
-    `EFAULT'
-          BUFPTR is an invalid pointer value.
+   The frame under which the expression should be evaluated can be
+specified by FRAME-ADDR.  A '*' indicates that the current frame should
+be used.  A '@' indicates that a floating variable object must be
+created.
 
-    `EFBIG'
-          An attempt was made to write a file that exceeds the
-          host-specific maximum file size allowed.
+   EXPRESSION is any expression valid on the current language set (must
+not begin with a '*'), or one of the following:
 
-    `ENOSPC'
-          No space on device to write the data.
+   * '*ADDR', where ADDR is the address of a memory cell
 
-    `EINTR'
-          The call was interrupted by the user.
+   * '*ADDR-ADDR' -- a memory address range (TBD)
 
+   * '$REGNAME' -- a CPU register name
 
-\1f
-File: gdb.info,  Node: lseek,  Next: rename,  Prev: write,  Up: List of Supported Calls
+   A varobj's contents may be provided by a Python-based pretty-printer.
+In this case the varobj is known as a "dynamic varobj".  Dynamic varobjs
+have slightly different semantics in some cases.  If the
+'-enable-pretty-printing' command is not sent, then GDB will never
+create a dynamic varobj.  This ensures backward compatibility for
+existing clients.
 
-lseek
-.....
+Result
+......
 
-Synopsis:
-          long lseek (int fd, long offset, int flag);
+This operation returns attributes of the newly-created varobj.  These
+are:
 
-Request:
-     `Flseek,FD,OFFSET,FLAG'
+'name'
+     The name of the varobj.
 
-     FLAG is one of:
+'numchild'
+     The number of children of the varobj.  This number is not
+     necessarily reliable for a dynamic varobj.  Instead, you must
+     examine the 'has_more' attribute.
 
-    `SEEK_SET'
-          The offset is set to OFFSET bytes.
+'value'
+     The varobj's scalar value.  For a varobj whose type is some sort of
+     aggregate (e.g., a 'struct'), or for a dynamic varobj, this value
+     will not be interesting.
 
-    `SEEK_CUR'
-          The offset is set to its current location plus OFFSET bytes.
+'type'
+     The varobj's type.  This is a string representation of the type, as
+     would be printed by the GDB CLI. If 'print object' (*note set print
+     object: Print Settings.) is set to 'on', the _actual_ (derived)
+     type of the object is shown rather than the _declared_ one.
 
-    `SEEK_END'
-          The offset is set to the size of the file plus OFFSET bytes.
+'thread-id'
+     If a variable object is bound to a specific thread, then this is
+     the thread's identifier.
 
-Return value:
-     On success, the resulting unsigned offset in bytes from the
-     beginning of the file is returned.  Otherwise, a value of -1 is
-     returned.
+'has_more'
+     For a dynamic varobj, this indicates whether there appear to be any
+     children available.  For a non-dynamic varobj, this will be 0.
 
-Errors:
+'dynamic'
+     This attribute will be present and have the value '1' if the varobj
+     is a dynamic varobj.  If the varobj is not a dynamic varobj, then
+     this attribute will not be present.
 
-    `EBADF'
-          FD is not a valid open file descriptor.
+'displayhint'
+     A dynamic varobj can supply a display hint to the front end.  The
+     value comes directly from the Python pretty-printer object's
+     'display_hint' method.  *Note Pretty Printing API::.
 
-    `ESPIPE'
-          FD is associated with the GDB console.
+   Typical output will look like this:
 
-    `EINVAL'
-          FLAG is not a proper value.
+      name="NAME",numchild="N",type="TYPE",thread-id="M",
+       has_more="HAS_MORE"
 
-    `EINTR'
-          The call was interrupted by the user.
+The '-var-delete' Command
+-------------------------
 
+Synopsis
+........
 
-\1f
-File: gdb.info,  Node: rename,  Next: unlink,  Prev: lseek,  Up: List of Supported Calls
+      -var-delete [ -c ] NAME
 
-rename
-......
+   Deletes a previously created variable object and all of its children.
+With the '-c' option, just deletes the children.
 
-Synopsis:
-          int rename(const char *oldpath, const char *newpath);
+   Returns an error if the object NAME is not found.
 
-Request:
-     `Frename,OLDPATHPTR/LEN,NEWPATHPTR/LEN'
+The '-var-set-format' Command
+-----------------------------
 
-Return value:
-     On success, zero is returned.  On error, -1 is returned.
+Synopsis
+........
 
-Errors:
+      -var-set-format NAME FORMAT-SPEC
 
-    `EISDIR'
-          NEWPATH is an existing directory, but OLDPATH is not a
-          directory.
+   Sets the output format for the value of the object NAME to be
+FORMAT-SPEC.
 
-    `EEXIST'
-          NEWPATH is a non-empty directory.
+   The syntax for the FORMAT-SPEC is as follows:
 
-    `EBUSY'
-          OLDPATH or NEWPATH is a directory that is in use by some
-          process.
+      FORMAT-SPEC ==>
+      {binary | decimal | hexadecimal | octal | natural}
 
-    `EINVAL'
-          An attempt was made to make a directory a subdirectory of
-          itself.
+   The natural format is the default format choosen automatically based
+on the variable type (like decimal for an 'int', hex for pointers,
+etc.).
 
-    `ENOTDIR'
-          A  component used as a directory in OLDPATH or new path is
-          not a directory.  Or OLDPATH is a directory and NEWPATH
-          exists but is not a directory.
+   For a variable with children, the format is set only on the variable
+itself, and the children are not affected.
 
-    `EFAULT'
-          OLDPATHPTR or NEWPATHPTR are invalid pointer values.
+The '-var-show-format' Command
+------------------------------
 
-    `EACCES'
-          No access to the file or the path of the file.
+Synopsis
+........
 
-    `ENAMETOOLONG'
-          OLDPATH or NEWPATH was too long.
+      -var-show-format NAME
 
-    `ENOENT'
-          A directory component in OLDPATH or NEWPATH does not exist.
+   Returns the format used to display the value of the object NAME.
 
-    `EROFS'
-          The file is on a read-only filesystem.
+      FORMAT ==>
+      FORMAT-SPEC
 
-    `ENOSPC'
-          The device containing the file has no room for the new
-          directory entry.
+The '-var-info-num-children' Command
+------------------------------------
 
-    `EINTR'
-          The call was interrupted by the user.
+Synopsis
+........
 
+      -var-info-num-children NAME
 
-\1f
-File: gdb.info,  Node: unlink,  Next: stat/fstat,  Prev: rename,  Up: List of Supported Calls
+   Returns the number of children of a variable object NAME:
 
-unlink
-......
+      numchild=N
 
-Synopsis:
-          int unlink(const char *pathname);
+   Note that this number is not completely reliable for a dynamic
+varobj.  It will return the current number of children, but more
+children may be available.
 
-Request:
-     `Funlink,PATHNAMEPTR/LEN'
+The '-var-list-children' Command
+--------------------------------
 
-Return value:
-     On success, zero is returned.  On error, -1 is returned.
+Synopsis
+........
 
-Errors:
+      -var-list-children [PRINT-VALUES] NAME [FROM TO]
 
-    `EACCES'
-          No access to the file or the path of the file.
+   Return a list of the children of the specified variable object and
+create variable objects for them, if they do not already exist.  With a
+single argument or if PRINT-VALUES has a value of 0 or '--no-values',
+print only the names of the variables; if PRINT-VALUES is 1 or
+'--all-values', also print their values; and if it is 2 or
+'--simple-values' print the name and value for simple data types and
+just the name for arrays, structures and unions.
 
-    `EPERM'
-          The system does not allow unlinking of directories.
+   FROM and TO, if specified, indicate the range of children to report.
+If FROM or TO is less than zero, the range is reset and all children
+will be reported.  Otherwise, children starting at FROM (zero-based) and
+up to and excluding TO will be reported.
 
-    `EBUSY'
-          The file PATHNAME cannot be unlinked because it's being used
-          by another process.
+   If a child range is requested, it will only affect the current call
+to '-var-list-children', but not future calls to '-var-update'.  For
+this, you must instead use '-var-set-update-range'.  The intent of this
+approach is to enable a front end to implement any update approach it
+likes; for example, scrolling a view may cause the front end to request
+more children with '-var-list-children', and then the front end could
+call '-var-set-update-range' with a different range to ensure that
+future updates are restricted to just the visible items.
 
-    `EFAULT'
-          PATHNAMEPTR is an invalid pointer value.
+   For each child the following results are returned:
 
-    `ENAMETOOLONG'
-          PATHNAME was too long.
+NAME
+     Name of the variable object created for this child.
 
-    `ENOENT'
-          A directory component in PATHNAME does not exist.
+EXP
+     The expression to be shown to the user by the front end to
+     designate this child.  For example this may be the name of a
+     structure member.
 
-    `ENOTDIR'
-          A component of the path is not a directory.
+     For a dynamic varobj, this value cannot be used to form an
+     expression.  There is no way to do this at all with a dynamic
+     varobj.
 
-    `EROFS'
-          The file is on a read-only filesystem.
+     For C/C++ structures there are several pseudo children returned to
+     designate access qualifiers.  For these pseudo children EXP is
+     'public', 'private', or 'protected'.  In this case the type and
+     value are not present.
 
-    `EINTR'
-          The call was interrupted by the user.
+     A dynamic varobj will not report the access qualifying
+     pseudo-children, regardless of the language.  This information is
+     not available at all with a dynamic varobj.
 
+NUMCHILD
+     Number of children this child has.  For a dynamic varobj, this will
+     be 0.
 
-\1f
-File: gdb.info,  Node: stat/fstat,  Next: gettimeofday,  Prev: unlink,  Up: List of Supported Calls
+TYPE
+     The type of the child.  If 'print object' (*note set print object:
+     Print Settings.) is set to 'on', the _actual_ (derived) type of the
+     object is shown rather than the _declared_ one.
 
-stat/fstat
-..........
+VALUE
+     If values were requested, this is the value.
 
-Synopsis:
-          int stat(const char *pathname, struct stat *buf);
-          int fstat(int fd, struct stat *buf);
+THREAD-ID
+     If this variable object is associated with a thread, this is the
+     thread id.  Otherwise this result is not present.
 
-Request:
-     `Fstat,PATHNAMEPTR/LEN,BUFPTR'
-     `Ffstat,FD,BUFPTR'
+FROZEN
+     If the variable object is frozen, this variable will be present
+     with a value of 1.
 
-Return value:
-     On success, zero is returned.  On error, -1 is returned.
+DISPLAYHINT
+     A dynamic varobj can supply a display hint to the front end.  The
+     value comes directly from the Python pretty-printer object's
+     'display_hint' method.  *Note Pretty Printing API::.
 
-Errors:
+DYNAMIC
+     This attribute will be present and have the value '1' if the varobj
+     is a dynamic varobj.  If the varobj is not a dynamic varobj, then
+     this attribute will not be present.
 
-    `EBADF'
-          FD is not a valid open file.
+   The result may have its own attributes:
 
-    `ENOENT'
-          A directory component in PATHNAME does not exist or the path
-          is an empty string.
+'displayhint'
+     A dynamic varobj can supply a display hint to the front end.  The
+     value comes directly from the Python pretty-printer object's
+     'display_hint' method.  *Note Pretty Printing API::.
 
-    `ENOTDIR'
-          A component of the path is not a directory.
+'has_more'
+     This is an integer attribute which is nonzero if there are children
+     remaining after the end of the selected range.
 
-    `EFAULT'
-          PATHNAMEPTR is an invalid pointer value.
+Example
+.......
 
-    `EACCES'
-          No access to the file or the path of the file.
+     (gdb)
+      -var-list-children n
+      ^done,numchild=N,children=[child={name=NAME,exp=EXP,
+      numchild=N,type=TYPE},(repeats N times)]
+     (gdb)
+      -var-list-children --all-values n
+      ^done,numchild=N,children=[child={name=NAME,exp=EXP,
+      numchild=N,value=VALUE,type=TYPE},(repeats N times)]
 
-    `ENAMETOOLONG'
-          PATHNAME was too long.
+The '-var-info-type' Command
+----------------------------
 
-    `EINTR'
-          The call was interrupted by the user.
+Synopsis
+........
 
+      -var-info-type NAME
 
-\1f
-File: gdb.info,  Node: gettimeofday,  Next: isatty,  Prev: stat/fstat,  Up: List of Supported Calls
+   Returns the type of the specified variable NAME.  The type is
+returned as a string in the same format as it is output by the GDB CLI:
 
-gettimeofday
-............
+      type=TYPENAME
 
-Synopsis:
-          int gettimeofday(struct timeval *tv, void *tz);
+The '-var-info-expression' Command
+----------------------------------
 
-Request:
-     `Fgettimeofday,TVPTR,TZPTR'
+Synopsis
+........
 
-Return value:
-     On success, 0 is returned, -1 otherwise.
+      -var-info-expression NAME
 
-Errors:
+   Returns a string that is suitable for presenting this variable object
+in user interface.  The string is generally not valid expression in the
+current language, and cannot be evaluated.
 
-    `EINVAL'
-          TZ is a non-NULL pointer.
+   For example, if 'a' is an array, and variable object 'A' was created
+for 'a', then we'll get this output:
 
-    `EFAULT'
-          TVPTR and/or TZPTR is an invalid pointer value.
+     (gdb) -var-info-expression A.1
+     ^done,lang="C",exp="1"
 
+Here, the value of 'lang' is the language name, which can be found in
+*note Supported Languages::.
 
-\1f
-File: gdb.info,  Node: isatty,  Next: system,  Prev: gettimeofday,  Up: List of Supported Calls
+   Note that the output of the '-var-list-children' command also
+includes those expressions, so the '-var-info-expression' command is of
+limited use.
 
-isatty
-......
+The '-var-info-path-expression' Command
+---------------------------------------
 
-Synopsis:
-          int isatty(int fd);
+Synopsis
+........
 
-Request:
-     `Fisatty,FD'
+      -var-info-path-expression NAME
 
-Return value:
-     Returns 1 if FD refers to the GDB console, 0 otherwise.
+   Returns an expression that can be evaluated in the current context
+and will yield the same value that a variable object has.  Compare this
+with the '-var-info-expression' command, which result can be used only
+for UI presentation.  Typical use of the '-var-info-path-expression'
+command is creating a watchpoint from a variable object.
 
-Errors:
+   This command is currently not valid for children of a dynamic varobj,
+and will give an error when invoked on one.
 
-    `EINTR'
-          The call was interrupted by the user.
+   For example, suppose 'C' is a C++ class, derived from class 'Base',
+and that the 'Base' class has a member called 'm_size'.  Assume a
+variable 'c' is has the type of 'C' and a variable object 'C' was
+created for variable 'c'.  Then, we'll get this output:
+     (gdb) -var-info-path-expression C.Base.public.m_size
+     ^done,path_expr=((Base)c).m_size)
 
+The '-var-show-attributes' Command
+----------------------------------
 
-   Note that the `isatty' call is treated as a special case: it returns
-1 to the target if the file descriptor is attached to the GDB console,
-0 otherwise.  Implementing through system calls would require
-implementing `ioctl' and would be more complex than needed.
+Synopsis
+........
 
-\1f
-File: gdb.info,  Node: system,  Prev: isatty,  Up: List of Supported Calls
+      -var-show-attributes NAME
 
-system
-......
+   List attributes of the specified variable object NAME:
 
-Synopsis:
-          int system(const char *command);
+      status=ATTR [ ( ,ATTR )* ]
 
-Request:
-     `Fsystem,COMMANDPTR/LEN'
+where ATTR is '{ { editable | noneditable } | TBD }'.
 
-Return value:
-     If LEN is zero, the return value indicates whether a shell is
-     available.  A zero return value indicates a shell is not available.
-     For non-zero LEN, the value returned is -1 on error and the return
-     status of the command otherwise.  Only the exit status of the
-     command is returned, which is extracted from the host's `system'
-     return value by calling `WEXITSTATUS(retval)'.  In case `/bin/sh'
-     could not be executed, 127 is returned.
+The '-var-evaluate-expression' Command
+--------------------------------------
 
-Errors:
+Synopsis
+........
 
-    `EINTR'
-          The call was interrupted by the user.
+      -var-evaluate-expression [-f FORMAT-SPEC] NAME
 
+   Evaluates the expression that is represented by the specified
+variable object and returns its value as a string.  The format of the
+string can be specified with the '-f' option.  The possible values of
+this option are the same as for '-var-set-format' (*note
+-var-set-format::).  If the '-f' option is not specified, the current
+display format will be used.  The current display format can be changed
+using the '-var-set-format' command.
 
-   GDB takes over the full task of calling the necessary host calls to
-perform the `system' call.  The return value of `system' on the host is
-simplified before it's returned to the target.  Any termination signal
-information from the child process is discarded, and the return value
-consists entirely of the exit status of the called command.
+      value=VALUE
 
-   Due to security concerns, the `system' call is by default refused by
-GDB.  The user has to allow this call explicitly with the `set remote
-system-call-allowed 1' command.
+   Note that one must invoke '-var-list-children' for a variable before
+the value of a child variable can be evaluated.
 
-`set remote system-call-allowed'
-     Control whether to allow the `system' calls in the File I/O
-     protocol for the remote target.  The default is zero (disabled).
+The '-var-assign' Command
+-------------------------
 
-`show remote system-call-allowed'
-     Show whether the `system' calls are allowed in the File I/O
-     protocol.
+Synopsis
+........
 
-\1f
-File: gdb.info,  Node: Protocol-specific Representation of Datatypes,  Next: Constants,  Prev: List of Supported Calls,  Up: File-I/O Remote Protocol Extension
+      -var-assign NAME EXPRESSION
 
-E.13.8 Protocol-specific Representation of Datatypes
-----------------------------------------------------
+   Assigns the value of EXPRESSION to the variable object specified by
+NAME.  The object must be 'editable'.  If the variable's value is
+altered by the assign, the variable will show up in any subsequent
+'-var-update' list.
 
-* Menu:
+Example
+.......
 
-* Integral Datatypes::
-* Pointer Values::
-* Memory Transfer::
-* struct stat::
-* struct timeval::
+     (gdb)
+     -var-assign var1 3
+     ^done,value="3"
+     (gdb)
+     -var-update *
+     ^done,changelist=[{name="var1",in_scope="true",type_changed="false"}]
+     (gdb)
 
-\1f
-File: gdb.info,  Node: Integral Datatypes,  Next: Pointer Values,  Up: Protocol-specific Representation of Datatypes
+The '-var-update' Command
+-------------------------
 
-Integral Datatypes
-..................
+Synopsis
+........
+
+      -var-update [PRINT-VALUES] {NAME | "*"}
+
+   Reevaluate the expressions corresponding to the variable object NAME
+and all its direct and indirect children, and return the list of
+variable objects whose values have changed; NAME must be a root variable
+object.  Here, "changed" means that the result of
+'-var-evaluate-expression' before and after the '-var-update' is
+different.  If '*' is used as the variable object names, all existing
+variable objects are updated, except for frozen ones (*note
+-var-set-frozen::).  The option PRINT-VALUES determines whether both
+names and values, or just names are printed.  The possible values of
+this option are the same as for '-var-list-children' (*note
+-var-list-children::).  It is recommended to use the '--all-values'
+option, to reduce the number of MI commands needed on each program stop.
+
+   With the '*' parameter, if a variable object is bound to a currently
+running thread, it will not be updated, without any diagnostic.
+
+   If '-var-set-update-range' was previously used on a varobj, then only
+the selected range of children will be reported.
+
+   '-var-update' reports all the changed varobjs in a tuple named
+'changelist'.
+
+   Each item in the change list is itself a tuple holding:
+
+'name'
+     The name of the varobj.
+
+'value'
+     If values were requested for this update, then this field will be
+     present and will hold the value of the varobj.
+
+'in_scope'
+     This field is a string which may take one of three values:
+
+     '"true"'
+          The variable object's current value is valid.
+
+     '"false"'
+          The variable object does not currently hold a valid value but
+          it may hold one in the future if its associated expression
+          comes back into scope.
+
+     '"invalid"'
+          The variable object no longer holds a valid value.  This can
+          occur when the executable file being debugged has changed,
+          either through recompilation or by using the GDB 'file'
+          command.  The front end should normally choose to delete these
+          variable objects.
+
+     In the future new values may be added to this list so the front
+     should be prepared for this possibility.  *Note GDB/MI Development
+     and Front Ends: GDB/MI Development and Front Ends.
+
+'type_changed'
+     This is only present if the varobj is still valid.  If the type
+     changed, then this will be the string 'true'; otherwise it will be
+     'false'.
+
+     When a varobj's type changes, its children are also likely to have
+     become incorrect.  Therefore, the varobj's children are
+     automatically deleted when this attribute is 'true'.  Also, the
+     varobj's update range, when set using the '-var-set-update-range'
+     command, is unset.
+
+'new_type'
+     If the varobj's type changed, then this field will be present and
+     will hold the new type.
+
+'new_num_children'
+     For a dynamic varobj, if the number of children changed, or if the
+     type changed, this will be the new number of children.
+
+     The 'numchild' field in other varobj responses is generally not
+     valid for a dynamic varobj - it will show the number of children
+     that GDB knows about, but because dynamic varobjs lazily
+     instantiate their children, this will not reflect the number of
+     children which may be available.
+
+     The 'new_num_children' attribute only reports changes to the number
+     of children known by GDB.  This is the only way to detect whether
+     an update has removed children (which necessarily can only happen
+     at the end of the update range).
+
+'displayhint'
+     The display hint, if any.
+
+'has_more'
+     This is an integer value, which will be 1 if there are more
+     children available outside the varobj's update range.
+
+'dynamic'
+     This attribute will be present and have the value '1' if the varobj
+     is a dynamic varobj.  If the varobj is not a dynamic varobj, then
+     this attribute will not be present.
+
+'new_children'
+     If new children were added to a dynamic varobj within the selected
+     update range (as set by '-var-set-update-range'), then they will be
+     listed in this attribute.
+
+Example
+.......
+
+     (gdb)
+     -var-assign var1 3
+     ^done,value="3"
+     (gdb)
+     -var-update --all-values var1
+     ^done,changelist=[{name="var1",value="3",in_scope="true",
+     type_changed="false"}]
+     (gdb)
+
+The '-var-set-frozen' Command
+-----------------------------
 
-The integral datatypes used in the system calls are `int', `unsigned
-int', `long', `unsigned long', `mode_t', and `time_t'.
+Synopsis
+........
 
-   `int', `unsigned int', `mode_t' and `time_t' are implemented as 32
-bit values in this protocol.
+      -var-set-frozen NAME FLAG
 
-   `long' and `unsigned long' are implemented as 64 bit types.
+   Set the frozenness flag on the variable object NAME.  The FLAG
+parameter should be either '1' to make the variable frozen or '0' to
+make it unfrozen.  If a variable object is frozen, then neither itself,
+nor any of its children, are implicitly updated by '-var-update' of a
+parent variable or by '-var-update *'.  Only '-var-update' of the
+variable itself will update its value and values of its children.  After
+a variable object is unfrozen, it is implicitly updated by all
+subsequent '-var-update' operations.  Unfreezing a variable does not
+update it, only subsequent '-var-update' does.
 
-   *Note Limits::, for corresponding MIN and MAX values (similar to
-those in `limits.h') to allow range checking on host and target.
+Example
+.......
 
-   `time_t' datatypes are defined as seconds since the Epoch.
+     (gdb)
+     -var-set-frozen V 1
+     ^done
+     (gdb)
 
-   All integral datatypes transferred as part of a memory read or write
-of a structured datatype e.g. a `struct stat' have to be given in big
-endian byte order.
+The '-var-set-update-range' command
+-----------------------------------
 
-\1f
-File: gdb.info,  Node: Pointer Values,  Next: Memory Transfer,  Prev: Integral Datatypes,  Up: Protocol-specific Representation of Datatypes
+Synopsis
+........
 
-Pointer Values
-..............
+      -var-set-update-range NAME FROM TO
 
-Pointers to target data are transmitted as they are.  An exception is
-made for pointers to buffers for which the length isn't transmitted as
-part of the function call, namely strings.  Strings are transmitted as
-a pointer/length pair, both as hex values, e.g.
+   Set the range of children to be returned by future invocations of
+'-var-update'.
 
-     `1aaf/12'
+   FROM and TO indicate the range of children to report.  If FROM or TO
+is less than zero, the range is reset and all children will be reported.
+Otherwise, children starting at FROM (zero-based) and up to and
+excluding TO will be reported.
 
-which is a pointer to data of length 18 bytes at position 0x1aaf.  The
-length is defined as the full string length in bytes, including the
-trailing null byte.  For example, the string `"hello world"' at address
-0x123456 is transmitted as
+Example
+.......
 
-     `123456/d'
+     (gdb)
+     -var-set-update-range V 1 2
+     ^done
 
-\1f
-File: gdb.info,  Node: Memory Transfer,  Next: struct stat,  Prev: Pointer Values,  Up: Protocol-specific Representation of Datatypes
+The '-var-set-visualizer' command
+---------------------------------
 
-Memory Transfer
-...............
+Synopsis
+........
 
-Structured data which is transferred using a memory read or write (for
-example, a `struct stat') is expected to be in a protocol-specific
-format with all scalar multibyte datatypes being big endian.
-Translation to this representation needs to be done both by the target
-before the `F' packet is sent, and by GDB before it transfers memory to
-the target.  Transferred pointers to structured data should point to
-the already-coerced data at any time.
+      -var-set-visualizer NAME VISUALIZER
 
-\1f
-File: gdb.info,  Node: struct stat,  Next: struct timeval,  Prev: Memory Transfer,  Up: Protocol-specific Representation of Datatypes
+   Set a visualizer for the variable object NAME.
 
-struct stat
-...........
+   VISUALIZER is the visualizer to use.  The special value 'None' means
+to disable any visualizer in use.
 
-The buffer of type `struct stat' used by the target and GDB is defined
-as follows:
-
-     struct stat {
-         unsigned int  st_dev;      /* device */
-         unsigned int  st_ino;      /* inode */
-         mode_t        st_mode;     /* protection */
-         unsigned int  st_nlink;    /* number of hard links */
-         unsigned int  st_uid;      /* user ID of owner */
-         unsigned int  st_gid;      /* group ID of owner */
-         unsigned int  st_rdev;     /* device type (if inode device) */
-         unsigned long st_size;     /* total size, in bytes */
-         unsigned long st_blksize;  /* blocksize for filesystem I/O */
-         unsigned long st_blocks;   /* number of blocks allocated */
-         time_t        st_atime;    /* time of last access */
-         time_t        st_mtime;    /* time of last modification */
-         time_t        st_ctime;    /* time of last change */
-     };
+   If not 'None', VISUALIZER must be a Python expression.  This
+expression must evaluate to a callable object which accepts a single
+argument.  GDB will call this object with the value of the varobj NAME
+as an argument (this is done so that the same Python pretty-printing
+code can be used for both the CLI and MI). When called, this object must
+return an object which conforms to the pretty-printing interface (*note
+Pretty Printing API::).
 
-   The integral datatypes conform to the definitions given in the
-appropriate section (see *Note Integral Datatypes::, for details) so
-this structure is of size 64 bytes.
+   The pre-defined function 'gdb.default_visualizer' may be used to
+select a visualizer by following the built-in process (*note Selecting
+Pretty-Printers::).  This is done automatically when a varobj is
+created, and so ordinarily is not needed.
 
-   The values of several fields have a restricted meaning and/or range
-of values.
+   This feature is only available if Python support is enabled.  The MI
+command '-list-features' (*note GDB/MI Support Commands::) can be used
+to check this.
 
-`st_dev'
-     A value of 0 represents a file, 1 the console.
+Example
+.......
 
-`st_ino'
-     No valid meaning for the target.  Transmitted unchanged.
+Resetting the visualizer:
 
-`st_mode'
-     Valid mode bits are described in *Note Constants::.  Any other
-     bits have currently no meaning for the target.
+     (gdb)
+     -var-set-visualizer V None
+     ^done
 
-`st_uid'
-`st_gid'
-`st_rdev'
-     No valid meaning for the target.  Transmitted unchanged.
+   Reselecting the default (type-based) visualizer:
 
-`st_atime'
-`st_mtime'
-`st_ctime'
-     These values have a host and file system dependent accuracy.
-     Especially on Windows hosts, the file system may not support exact
-     timing values.
+     (gdb)
+     -var-set-visualizer V gdb.default_visualizer
+     ^done
 
-   The target gets a `struct stat' of the above representation and is
-responsible for coercing it to the target representation before
-continuing.
+   Suppose 'SomeClass' is a visualizer class.  A lambda expression can
+be used to instantiate this class for a varobj:
 
-   Note that due to size differences between the host, target, and
-protocol representations of `struct stat' members, these members could
-eventually get truncated on the target.
+     (gdb)
+     -var-set-visualizer V "lambda val: SomeClass()"
+     ^done
 
 \1f
-File: gdb.info,  Node: struct timeval,  Prev: struct stat,  Up: Protocol-specific Representation of Datatypes
+File: gdb.info,  Node: GDB/MI Data Manipulation,  Next: GDB/MI Tracepoint Commands,  Prev: GDB/MI Variable Objects,  Up: GDB/MI
+
+27.16 GDB/MI Data Manipulation
+==============================
+
+This section describes the GDB/MI commands that manipulate data: examine
+memory and registers, evaluate expressions, etc.
+
+The '-data-disassemble' Command
+-------------------------------
+
+Synopsis
+........
+
+      -data-disassemble
+         [ -s START-ADDR -e END-ADDR ]
+       | [ -f FILENAME -l LINENUM [ -n LINES ] ]
+       -- MODE
+
+Where:
+
+'START-ADDR'
+     is the beginning address (or '$pc')
+'END-ADDR'
+     is the end address
+'FILENAME'
+     is the name of the file to disassemble
+'LINENUM'
+     is the line number to disassemble around
+'LINES'
+     is the number of disassembly lines to be produced.  If it is -1,
+     the whole function will be disassembled, in case no END-ADDR is
+     specified.  If END-ADDR is specified as a non-zero value, and LINES
+     is lower than the number of disassembly lines between START-ADDR
+     and END-ADDR, only LINES lines are displayed; if LINES is higher
+     than the number of lines between START-ADDR and END-ADDR, only the
+     lines up to END-ADDR are displayed.
+'MODE'
+     is either 0 (meaning only disassembly), 1 (meaning mixed source and
+     disassembly), 2 (meaning disassembly with raw opcodes), or 3
+     (meaning mixed source and disassembly with raw opcodes).
+
+Result
+......
 
-struct timeval
-..............
+The result of the '-data-disassemble' command will be a list named
+'asm_insns', the contents of this list depend on the MODE used with the
+'-data-disassemble' command.
 
-The buffer of type `struct timeval' used by the File-I/O protocol is
-defined as follows:
+   For modes 0 and 2 the 'asm_insns' list contains tuples with the
+following fields:
 
-     struct timeval {
-         time_t tv_sec;  /* second */
-         long   tv_usec; /* microsecond */
-     };
+'address'
+     The address at which this instruction was disassembled.
 
-   The integral datatypes conform to the definitions given in the
-appropriate section (see *Note Integral Datatypes::, for details) so
-this structure is of size 8 bytes.
+'func-name'
+     The name of the function this instruction is within.
 
-\1f
-File: gdb.info,  Node: Constants,  Next: File-I/O Examples,  Prev: Protocol-specific Representation of Datatypes,  Up: File-I/O Remote Protocol Extension
+'offset'
+     The decimal offset in bytes from the start of 'func-name'.
 
-E.13.9 Constants
-----------------
+'inst'
+     The text disassembly for this 'address'.
 
-The following values are used for the constants inside of the protocol.
-GDB and target are responsible for translating these values before and
-after the call as needed.
+'opcodes'
+     This field is only present for mode 2.  This contains the raw
+     opcode bytes for the 'inst' field.
 
-* Menu:
+   For modes 1 and 3 the 'asm_insns' list contains tuples named
+'src_and_asm_line', each of which has the following fields:
 
-* Open Flags::
-* mode_t Values::
-* Errno Values::
-* Lseek Flags::
-* Limits::
+'line'
+     The line number within 'file'.
 
-\1f
-File: gdb.info,  Node: Open Flags,  Next: mode_t Values,  Up: Constants
+'file'
+     The file name from the compilation unit.  This might be an absolute
+     file name or a relative file name depending on the compile command
+     used.
 
-Open Flags
-..........
+'fullname'
+     Absolute file name of 'file'.  It is converted to a canonical form
+     using the source file search path (*note Specifying Source
+     Directories: Source Path.) and after resolving all the symbolic
+     links.
 
-All values are given in hexadecimal representation.
+     If the source file is not found this field will contain the path as
+     present in the debug information.
 
-       O_RDONLY        0x0
-       O_WRONLY        0x1
-       O_RDWR          0x2
-       O_APPEND        0x8
-       O_CREAT       0x200
-       O_TRUNC       0x400
-       O_EXCL        0x800
+'line_asm_insn'
+     This is a list of tuples containing the disassembly for 'line' in
+     'file'.  The fields of each tuple are the same as for
+     '-data-disassemble' in MODE 0 and 2, so 'address', 'func-name',
+     'offset', 'inst', and optionally 'opcodes'.
 
-\1f
-File: gdb.info,  Node: mode_t Values,  Next: Errno Values,  Prev: Open Flags,  Up: Constants
+   Note that whatever included in the 'inst' field, is not manipulated
+directly by GDB/MI, i.e., it is not possible to adjust its format.
 
-mode_t Values
-.............
+GDB Command
+...........
 
-All values are given in octal representation.
+The corresponding GDB command is 'disassemble'.
+
+Example
+.......
+
+Disassemble from the current value of '$pc' to '$pc + 20':
+
+     (gdb)
+     -data-disassemble -s $pc -e "$pc + 20" -- 0
+     ^done,
+     asm_insns=[
+     {address="0x000107c0",func-name="main",offset="4",
+     inst="mov  2, %o0"},
+     {address="0x000107c4",func-name="main",offset="8",
+     inst="sethi  %hi(0x11800), %o2"},
+     {address="0x000107c8",func-name="main",offset="12",
+     inst="or  %o2, 0x140, %o1\t! 0x11940 <_lib_version+8>"},
+     {address="0x000107cc",func-name="main",offset="16",
+     inst="sethi  %hi(0x11800), %o2"},
+     {address="0x000107d0",func-name="main",offset="20",
+     inst="or  %o2, 0x168, %o4\t! 0x11968 <_lib_version+48>"}]
+     (gdb)
+
+   Disassemble the whole 'main' function.  Line 32 is part of 'main'.
+
+     -data-disassemble -f basics.c -l 32 -- 0
+     ^done,asm_insns=[
+     {address="0x000107bc",func-name="main",offset="0",
+     inst="save  %sp, -112, %sp"},
+     {address="0x000107c0",func-name="main",offset="4",
+     inst="mov   2, %o0"},
+     {address="0x000107c4",func-name="main",offset="8",
+     inst="sethi %hi(0x11800), %o2"},
+     [...]
+     {address="0x0001081c",func-name="main",offset="96",inst="ret "},
+     {address="0x00010820",func-name="main",offset="100",inst="restore "}]
+     (gdb)
+
+   Disassemble 3 instructions from the start of 'main':
+
+     (gdb)
+     -data-disassemble -f basics.c -l 32 -n 3 -- 0
+     ^done,asm_insns=[
+     {address="0x000107bc",func-name="main",offset="0",
+     inst="save  %sp, -112, %sp"},
+     {address="0x000107c0",func-name="main",offset="4",
+     inst="mov  2, %o0"},
+     {address="0x000107c4",func-name="main",offset="8",
+     inst="sethi  %hi(0x11800), %o2"}]
+     (gdb)
+
+   Disassemble 3 instructions from the start of 'main' in mixed mode:
+
+     (gdb)
+     -data-disassemble -f basics.c -l 32 -n 3 -- 1
+     ^done,asm_insns=[
+     src_and_asm_line={line="31",
+     file="../../../src/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/absolute/path/to/src/gdb/testsuite/gdb.mi/basics.c",
+     line_asm_insn=[{address="0x000107bc",
+     func-name="main",offset="0",inst="save  %sp, -112, %sp"}]},
+     src_and_asm_line={line="32",
+     file="../../../src/gdb/testsuite/gdb.mi/basics.c",
+     fullname="/absolute/path/to/src/gdb/testsuite/gdb.mi/basics.c",
+     line_asm_insn=[{address="0x000107c0",
+     func-name="main",offset="4",inst="mov  2, %o0"},
+     {address="0x000107c4",func-name="main",offset="8",
+     inst="sethi  %hi(0x11800), %o2"}]}]
+     (gdb)
+
+The '-data-evaluate-expression' Command
+---------------------------------------
 
-       S_IFREG       0100000
-       S_IFDIR        040000
-       S_IRUSR          0400
-       S_IWUSR          0200
-       S_IXUSR          0100
-       S_IRGRP           040
-       S_IWGRP           020
-       S_IXGRP           010
-       S_IROTH            04
-       S_IWOTH            02
-       S_IXOTH            01
+Synopsis
+........
 
-\1f
-File: gdb.info,  Node: Errno Values,  Next: Lseek Flags,  Prev: mode_t Values,  Up: Constants
-
-Errno Values
-............
-
-All values are given in decimal representation.
-
-       EPERM           1
-       ENOENT          2
-       EINTR           4
-       EBADF           9
-       EACCES         13
-       EFAULT         14
-       EBUSY          16
-       EEXIST         17
-       ENODEV         19
-       ENOTDIR        20
-       EISDIR         21
-       EINVAL         22
-       ENFILE         23
-       EMFILE         24
-       EFBIG          27
-       ENOSPC         28
-       ESPIPE         29
-       EROFS          30
-       ENAMETOOLONG   91
-       EUNKNOWN       9999
-
-   `EUNKNOWN' is used as a fallback error value if a host system returns
- any error value not in the list of supported error numbers.
+      -data-evaluate-expression EXPR
 
-\1f
-File: gdb.info,  Node: Lseek Flags,  Next: Limits,  Prev: Errno Values,  Up: Constants
+   Evaluate EXPR as an expression.  The expression could contain an
+inferior function call.  The function call will execute synchronously.
+If the expression contains spaces, it must be enclosed in double quotes.
 
-Lseek Flags
+GDB Command
 ...........
 
-       SEEK_SET      0
-       SEEK_CUR      1
-       SEEK_END      2
+The corresponding GDB commands are 'print', 'output', and 'call'.  In
+'gdbtk' only, there's a corresponding 'gdb_eval' command.
 
-\1f
-File: gdb.info,  Node: Limits,  Prev: Lseek Flags,  Up: Constants
+Example
+.......
 
-Limits
-......
+In the following example, the numbers that precede the commands are the
+"tokens" described in *note GDB/MI Command Syntax: GDB/MI Command
+Syntax.  Notice how GDB/MI returns the same tokens in its output.
 
-All values are given in decimal representation.
+     211-data-evaluate-expression A
+     211^done,value="1"
+     (gdb)
+     311-data-evaluate-expression &A
+     311^done,value="0xefffeb7c"
+     (gdb)
+     411-data-evaluate-expression A+3
+     411^done,value="4"
+     (gdb)
+     511-data-evaluate-expression "A + 3"
+     511^done,value="4"
+     (gdb)
 
-       INT_MIN       -2147483648
-       INT_MAX        2147483647
-       UINT_MAX       4294967295
-       LONG_MIN      -9223372036854775808
-       LONG_MAX       9223372036854775807
-       ULONG_MAX      18446744073709551615
+The '-data-list-changed-registers' Command
+------------------------------------------
 
-\1f
-File: gdb.info,  Node: File-I/O Examples,  Prev: Constants,  Up: File-I/O Remote Protocol Extension
+Synopsis
+........
 
-E.13.10 File-I/O Examples
--------------------------
+      -data-list-changed-registers
 
-Example sequence of a write call, file descriptor 3, buffer is at target
-address 0x1234, 6 bytes should be written:
+   Display a list of the registers that have changed.
 
-     <- `Fwrite,3,1234,6'
-     _request memory read from target_
-     -> `m1234,6'
-     <- XXXXXX
-     _return "6 bytes written"_
-     -> `F6'
+GDB Command
+...........
 
-   Example sequence of a read call, file descriptor 3, buffer is at
-target address 0x1234, 6 bytes should be read:
+GDB doesn't have a direct analog for this command; 'gdbtk' has the
+corresponding command 'gdb_changed_register_list'.
 
-     <- `Fread,3,1234,6'
-     _request memory write to target_
-     -> `X1234,6:XXXXXX'
-     _return "6 bytes read"_
-     -> `F6'
+Example
+.......
 
-   Example sequence of a read call, call fails on the host due to
-invalid file descriptor (`EBADF'):
+On a PPC MBX board:
 
-     <- `Fread,3,1234,6'
-     -> `F-1,9'
+     (gdb)
+     -exec-continue
+     ^running
 
-   Example sequence of a read call, user presses `Ctrl-c' before
-syscall on host is called:
+     (gdb)
+     *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",frame={
+     func="main",args=[],file="try.c",fullname="/home/foo/bar/try.c",
+     line="5"}
+     (gdb)
+     -data-list-changed-registers
+     ^done,changed-registers=["0","1","2","4","5","6","7","8","9",
+     "10","11","13","14","15","16","17","18","19","20","21","22","23",
+     "24","25","26","27","28","30","31","64","65","66","67","69"]
+     (gdb)
 
-     <- `Fread,3,1234,6'
-     -> `F-1,4,C'
-     <- `T02'
+The '-data-list-register-names' Command
+---------------------------------------
 
-   Example sequence of a read call, user presses `Ctrl-c' after syscall
-on host is called:
+Synopsis
+........
 
-     <- `Fread,3,1234,6'
-     -> `X1234,6:XXXXXX'
-     <- `T02'
+      -data-list-register-names [ ( REGNO )+ ]
 
-\1f
-File: gdb.info,  Node: Library List Format,  Next: Library List Format for SVR4 Targets,  Prev: File-I/O Remote Protocol Extension,  Up: Remote Protocol
+   Show a list of register names for the current target.  If no
+arguments are given, it shows a list of the names of all the registers.
+If integer numbers are given as arguments, it will print a list of the
+names of the registers corresponding to the arguments.  To ensure
+consistency between a register name and its number, the output list may
+include empty register names.
 
-E.14 Library List Format
-========================
+GDB Command
+...........
 
-On some platforms, a dynamic loader (e.g. `ld.so') runs in the same
-process as your application to manage libraries.  In this case, GDB can
-use the loader's symbol table and normal memory operations to maintain
-a list of shared libraries.  On other platforms, the operating system
-manages loaded libraries.  GDB can not retrieve the list of currently
-loaded libraries through memory operations, so it uses the
-`qXfer:libraries:read' packet (*note qXfer library list read::)
-instead.  The remote stub queries the target's operating system and
-reports which libraries are loaded.
-
-   The `qXfer:libraries:read' packet returns an XML document which
-lists loaded libraries and their offsets.  Each library has an
-associated name and one or more segment or section base addresses,
-which report where the library was loaded in memory.
-
-   For the common case of libraries that are fully linked binaries, the
-library should have a list of segments.  If the target supports dynamic
-linking of a relocatable object file, its library XML element should
-instead include a list of allocated sections.  The segment or section
-bases are start addresses, not relocation offsets; they do not depend
-on the library's link-time base addresses.
-
-   GDB must be linked with the Expat library to support XML library
-lists.  *Note Expat::.
-
-   A simple memory map, with one loaded library relocated by a single
-offset, looks like this:
-
-     <library-list>
-       <library name="/lib/libc.so.6">
-         <segment address="0x10000000"/>
-       </library>
-     </library-list>
-
-   Another simple memory map, with one loaded library with three
-allocated sections (.text, .data, .bss), looks like this:
-
-     <library-list>
-       <library name="sharedlib.o">
-         <section address="0x10000000"/>
-         <section address="0x20000000"/>
-         <section address="0x30000000"/>
-       </library>
-     </library-list>
-
-   The format of a library list is described by this DTD:
-
-     <!-- library-list: Root element with versioning -->
-     <!ELEMENT library-list  (library)*>
-     <!ATTLIST library-list  version CDATA   #FIXED  "1.0">
-     <!ELEMENT library       (segment*, section*)>
-     <!ATTLIST library       name    CDATA   #REQUIRED>
-     <!ELEMENT segment       EMPTY>
-     <!ATTLIST segment       address CDATA   #REQUIRED>
-     <!ELEMENT section       EMPTY>
-     <!ATTLIST section       address CDATA   #REQUIRED>
-
-   In addition, segments and section descriptors cannot be mixed within
-a single library element, and you must supply at least one segment or
-section for each library.
+GDB does not have a command which corresponds to
+'-data-list-register-names'.  In 'gdbtk' there is a corresponding
+command 'gdb_regnames'.
+
+Example
+.......
+
+For the PPC MBX board:
+     (gdb)
+     -data-list-register-names
+     ^done,register-names=["r0","r1","r2","r3","r4","r5","r6","r7",
+     "r8","r9","r10","r11","r12","r13","r14","r15","r16","r17","r18",
+     "r19","r20","r21","r22","r23","r24","r25","r26","r27","r28","r29",
+     "r30","r31","f0","f1","f2","f3","f4","f5","f6","f7","f8","f9",
+     "f10","f11","f12","f13","f14","f15","f16","f17","f18","f19","f20",
+     "f21","f22","f23","f24","f25","f26","f27","f28","f29","f30","f31",
+     "", "pc","ps","cr","lr","ctr","xer"]
+     (gdb)
+     -data-list-register-names 1 2 3
+     ^done,register-names=["r1","r2","r3"]
+     (gdb)
+
+The '-data-list-register-values' Command
+----------------------------------------
+
+Synopsis
+........
+
+      -data-list-register-values
+         [ --skip-unavailable ] FMT [ ( REGNO )*]
+
+   Display the registers' contents.  The format according to which the
+registers' contents are to be returned is given by FMT, followed by an
+optional list of numbers specifying the registers to display.  A missing
+list of numbers indicates that the contents of all the registers must be
+returned.  The '--skip-unavailable' option indicates that only the
+available registers are to be returned.
+
+   Allowed formats for FMT are:
+
+'x'
+     Hexadecimal
+'o'
+     Octal
+'t'
+     Binary
+'d'
+     Decimal
+'r'
+     Raw
+'N'
+     Natural
+
+GDB Command
+...........
 
-\1f
-File: gdb.info,  Node: Library List Format for SVR4 Targets,  Next: Memory Map Format,  Prev: Library List Format,  Up: Remote Protocol
+The corresponding GDB commands are 'info reg', 'info all-reg', and (in
+'gdbtk') 'gdb_fetch_registers'.
+
+Example
+.......
+
+For a PPC MBX board (note: line breaks are for readability only, they
+don't appear in the actual output):
+
+     (gdb)
+     -data-list-register-values r 64 65
+     ^done,register-values=[{number="64",value="0xfe00a300"},
+     {number="65",value="0x00029002"}]
+     (gdb)
+     -data-list-register-values x
+     ^done,register-values=[{number="0",value="0xfe0043c8"},
+     {number="1",value="0x3fff88"},{number="2",value="0xfffffffe"},
+     {number="3",value="0x0"},{number="4",value="0xa"},
+     {number="5",value="0x3fff68"},{number="6",value="0x3fff58"},
+     {number="7",value="0xfe011e98"},{number="8",value="0x2"},
+     {number="9",value="0xfa202820"},{number="10",value="0xfa202808"},
+     {number="11",value="0x1"},{number="12",value="0x0"},
+     {number="13",value="0x4544"},{number="14",value="0xffdfffff"},
+     {number="15",value="0xffffffff"},{number="16",value="0xfffffeff"},
+     {number="17",value="0xefffffed"},{number="18",value="0xfffffffe"},
+     {number="19",value="0xffffffff"},{number="20",value="0xffffffff"},
+     {number="21",value="0xffffffff"},{number="22",value="0xfffffff7"},
+     {number="23",value="0xffffffff"},{number="24",value="0xffffffff"},
+     {number="25",value="0xffffffff"},{number="26",value="0xfffffffb"},
+     {number="27",value="0xffffffff"},{number="28",value="0xf7bfffff"},
+     {number="29",value="0x0"},{number="30",value="0xfe010000"},
+     {number="31",value="0x0"},{number="32",value="0x0"},
+     {number="33",value="0x0"},{number="34",value="0x0"},
+     {number="35",value="0x0"},{number="36",value="0x0"},
+     {number="37",value="0x0"},{number="38",value="0x0"},
+     {number="39",value="0x0"},{number="40",value="0x0"},
+     {number="41",value="0x0"},{number="42",value="0x0"},
+     {number="43",value="0x0"},{number="44",value="0x0"},
+     {number="45",value="0x0"},{number="46",value="0x0"},
+     {number="47",value="0x0"},{number="48",value="0x0"},
+     {number="49",value="0x0"},{number="50",value="0x0"},
+     {number="51",value="0x0"},{number="52",value="0x0"},
+     {number="53",value="0x0"},{number="54",value="0x0"},
+     {number="55",value="0x0"},{number="56",value="0x0"},
+     {number="57",value="0x0"},{number="58",value="0x0"},
+     {number="59",value="0x0"},{number="60",value="0x0"},
+     {number="61",value="0x0"},{number="62",value="0x0"},
+     {number="63",value="0x0"},{number="64",value="0xfe00a300"},
+     {number="65",value="0x29002"},{number="66",value="0x202f04b5"},
+     {number="67",value="0xfe0043b0"},{number="68",value="0xfe00b3e4"},
+     {number="69",value="0x20002b03"}]
+     (gdb)
+
+The '-data-read-memory' Command
+-------------------------------
+
+This command is deprecated, use '-data-read-memory-bytes' instead.
+
+Synopsis
+........
+
+      -data-read-memory [ -o BYTE-OFFSET ]
+        ADDRESS WORD-FORMAT WORD-SIZE
+        NR-ROWS NR-COLS [ ASCHAR ]
+
+where:
+
+'ADDRESS'
+     An expression specifying the address of the first memory word to be
+     read.  Complex expressions containing embedded white space should
+     be quoted using the C convention.
+
+'WORD-FORMAT'
+     The format to be used to print the memory words.  The notation is
+     the same as for GDB's 'print' command (*note Output Formats: Output
+     Formats.).
+
+'WORD-SIZE'
+     The size of each memory word in bytes.
+
+'NR-ROWS'
+     The number of rows in the output table.
+
+'NR-COLS'
+     The number of columns in the output table.
+
+'ASCHAR'
+     If present, indicates that each row should include an ASCII dump.
+     The value of ASCHAR is used as a padding character when a byte is
+     not a member of the printable ASCII character set (printable ASCII
+     characters are those whose code is between 32 and 126,
+     inclusively).
+
+'BYTE-OFFSET'
+     An offset to add to the ADDRESS before fetching memory.
+
+   This command displays memory contents as a table of NR-ROWS by
+NR-COLS words, each word being WORD-SIZE bytes.  In total, 'NR-ROWS *
+NR-COLS * WORD-SIZE' bytes are read (returned as 'total-bytes').  Should
+less than the requested number of bytes be returned by the target, the
+missing words are identified using 'N/A'.  The number of bytes read from
+the target is returned in 'nr-bytes' and the starting address used to
+read memory in 'addr'.
+
+   The address of the next/previous row or page is available in
+'next-row' and 'prev-row', 'next-page' and 'prev-page'.
+
+GDB Command
+...........
 
-E.15 Library List Format for SVR4 Targets
-=========================================
+The corresponding GDB command is 'x'.  'gdbtk' has 'gdb_get_mem' memory
+read command.
+
+Example
+.......
+
+Read six bytes of memory starting at 'bytes+6' but then offset by '-6'
+bytes.  Format as three rows of two columns.  One byte per word.
+Display each word in hex.
+
+     (gdb)
+     9-data-read-memory -o -6 -- bytes+6 x 1 3 2
+     9^done,addr="0x00001390",nr-bytes="6",total-bytes="6",
+     next-row="0x00001396",prev-row="0x0000138e",next-page="0x00001396",
+     prev-page="0x0000138a",memory=[
+     {addr="0x00001390",data=["0x00","0x01"]},
+     {addr="0x00001392",data=["0x02","0x03"]},
+     {addr="0x00001394",data=["0x04","0x05"]}]
+     (gdb)
+
+   Read two bytes of memory starting at address 'shorts + 64' and
+display as a single word formatted in decimal.
+
+     (gdb)
+     5-data-read-memory shorts+64 d 2 1 1
+     5^done,addr="0x00001510",nr-bytes="2",total-bytes="2",
+     next-row="0x00001512",prev-row="0x0000150e",
+     next-page="0x00001512",prev-page="0x0000150e",memory=[
+     {addr="0x00001510",data=["128"]}]
+     (gdb)
+
+   Read thirty two bytes of memory starting at 'bytes+16' and format as
+eight rows of four columns.  Include a string encoding with 'x' used as
+the non-printable character.
+
+     (gdb)
+     4-data-read-memory bytes+16 x 1 8 4 x
+     4^done,addr="0x000013a0",nr-bytes="32",total-bytes="32",
+     next-row="0x000013c0",prev-row="0x0000139c",
+     next-page="0x000013c0",prev-page="0x00001380",memory=[
+     {addr="0x000013a0",data=["0x10","0x11","0x12","0x13"],ascii="xxxx"},
+     {addr="0x000013a4",data=["0x14","0x15","0x16","0x17"],ascii="xxxx"},
+     {addr="0x000013a8",data=["0x18","0x19","0x1a","0x1b"],ascii="xxxx"},
+     {addr="0x000013ac",data=["0x1c","0x1d","0x1e","0x1f"],ascii="xxxx"},
+     {addr="0x000013b0",data=["0x20","0x21","0x22","0x23"],ascii=" !\"#"},
+     {addr="0x000013b4",data=["0x24","0x25","0x26","0x27"],ascii="$%&'"},
+     {addr="0x000013b8",data=["0x28","0x29","0x2a","0x2b"],ascii="()*+"},
+     {addr="0x000013bc",data=["0x2c","0x2d","0x2e","0x2f"],ascii=",-./"}]
+     (gdb)
+
+The '-data-read-memory-bytes' Command
+-------------------------------------
+
+Synopsis
+........
+
+      -data-read-memory-bytes [ -o BYTE-OFFSET ]
+        ADDRESS COUNT
+
+where:
+
+'ADDRESS'
+     An expression specifying the address of the first memory word to be
+     read.  Complex expressions containing embedded white space should
+     be quoted using the C convention.
+
+'COUNT'
+     The number of bytes to read.  This should be an integer literal.
+
+'BYTE-OFFSET'
+     The offsets in bytes relative to ADDRESS at which to start reading.
+     This should be an integer literal.  This option is provided so that
+     a frontend is not required to first evaluate address and then
+     perform address arithmetics itself.
+
+   This command attempts to read all accessible memory regions in the
+specified range.  First, all regions marked as unreadable in the memory
+map (if one is defined) will be skipped.  *Note Memory Region
+Attributes::.  Second, GDB will attempt to read the remaining regions.
+For each one, if reading full region results in an errors, GDB will try
+to read a subset of the region.
+
+   In general, every single byte in the region may be readable or not,
+and the only way to read every readable byte is to try a read at every
+address, which is not practical.  Therefore, GDB will attempt to read
+all accessible bytes at either beginning or the end of the region, using
+a binary division scheme.  This heuristic works well for reading accross
+a memory map boundary.  Note that if a region has a readable range that
+is neither at the beginning or the end, GDB will not read it.
+
+   The result record (*note GDB/MI Result Records::) that is output of
+the command includes a field named 'memory' whose content is a list of
+tuples.  Each tuple represent a successfully read memory block and has
+the following fields:
+
+'begin'
+     The start address of the memory block, as hexadecimal literal.
+
+'end'
+     The end address of the memory block, as hexadecimal literal.
+
+'offset'
+     The offset of the memory block, as hexadecimal literal, relative to
+     the start address passed to '-data-read-memory-bytes'.
+
+'contents'
+     The contents of the memory block, in hex.
+
+GDB Command
+...........
 
-On SVR4 platforms GDB can use the symbol table of a dynamic loader
-(e.g. `ld.so') and normal memory operations to maintain a list of
-shared libraries.  Still a special library list provided by this packet
-is more efficient for the GDB remote protocol.
+The corresponding GDB command is 'x'.
 
-   The `qXfer:libraries-svr4:read' packet returns an XML document which
-lists loaded libraries and their SVR4 linker parameters.  For each
-library on SVR4 target, the following parameters are reported:
+Example
+.......
 
-   - `name', the absolute file name from the `l_name' field of `struct
-     link_map'.
+     (gdb)
+     -data-read-memory-bytes &a 10
+     ^done,memory=[{begin="0xbffff154",offset="0x00000000",
+                   end="0xbffff15e",
+                   contents="01000000020000000300"}]
+     (gdb)
 
-   - `lm' with address of `struct link_map' used for TLS (Thread Local
-     Storage) access.
+The '-data-write-memory-bytes' Command
+--------------------------------------
 
-   - `l_addr', the displacement as read from the field `l_addr' of
-     `struct link_map'.  For prelinked libraries this is not an absolute
-     memory address.  It is a displacement of absolute memory address
-     against address the file was prelinked to during the library load.
+Synopsis
+........
 
-   - `l_ld', which is memory address of the `PT_DYNAMIC' segment
+      -data-write-memory-bytes ADDRESS CONTENTS
+      -data-write-memory-bytes ADDRESS CONTENTS [COUNT]
 
-   Additionally the single `main-lm' attribute specifies address of
-`struct link_map' used for the main executable.  This parameter is used
-for TLS access and its presence is optional.
+where:
 
-   GDB must be linked with the Expat library to support XML SVR4
-library lists.  *Note Expat::.
+'ADDRESS'
+     An expression specifying the address of the first memory word to be
+     read.  Complex expressions containing embedded white space should
+     be quoted using the C convention.
 
-   A simple memory map, with two loaded libraries (which do not use
-prelink), looks like this:
+'CONTENTS'
+     The hex-encoded bytes to write.
 
-     <library-list-svr4 version="1.0" main-lm="0xe4f8f8">
-       <library name="/lib/ld-linux.so.2" lm="0xe4f51c" l_addr="0xe2d000"
-                l_ld="0xe4eefc"/>
-       <library name="/lib/libc.so.6" lm="0xe4fbe8" l_addr="0x154000"
-                l_ld="0x152350"/>
-     </library-list-svr>
+'COUNT'
+     Optional argument indicating the number of bytes to be written.  If
+     COUNT is greater than CONTENTS' length, GDB will repeatedly write
+     CONTENTS until it fills COUNT bytes.
 
-   The format of an SVR4 library list is described by this DTD:
+GDB Command
+...........
 
-     <!-- library-list-svr4: Root element with versioning -->
-     <!ELEMENT library-list-svr4  (library)*>
-     <!ATTLIST library-list-svr4  version CDATA   #FIXED  "1.0">
-     <!ATTLIST library-list-svr4  main-lm CDATA   #IMPLIED>
-     <!ELEMENT library            EMPTY>
-     <!ATTLIST library            name    CDATA   #REQUIRED>
-     <!ATTLIST library            lm      CDATA   #REQUIRED>
-     <!ATTLIST library            l_addr  CDATA   #REQUIRED>
-     <!ATTLIST library            l_ld    CDATA   #REQUIRED>
+There's no corresponding GDB command.
 
-\1f
-File: gdb.info,  Node: Memory Map Format,  Next: Thread List Format,  Prev: Library List Format for SVR4 Targets,  Up: Remote Protocol
+Example
+.......
 
-E.16 Memory Map Format
-======================
+     (gdb)
+     -data-write-memory-bytes &a "aabbccdd"
+     ^done
+     (gdb)
 
-To be able to write into flash memory, GDB needs to obtain a memory map
-from the target.  This section describes the format of the memory map.
+     (gdb)
+     -data-write-memory-bytes &a "aabbccdd" 16e
+     ^done
+     (gdb)
 
-   The memory map is obtained using the `qXfer:memory-map:read' (*note
-qXfer memory map read::) packet and is an XML document that lists
-memory regions.
+\1f
+File: gdb.info,  Node: GDB/MI Tracepoint Commands,  Next: GDB/MI Symbol Query,  Prev: GDB/MI Data Manipulation,  Up: GDB/MI
 
-   GDB must be linked with the Expat library to support XML memory
-maps.  *Note Expat::.
+27.17 GDB/MI Tracepoint Commands
+================================
 
-   The top-level structure of the document is shown below:
+The commands defined in this section implement MI support for
+tracepoints.  For detailed introduction, see *note Tracepoints::.
 
-     <?xml version="1.0"?>
-     <!DOCTYPE memory-map
-               PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN"
-                      "http://sourceware.org/gdb/gdb-memory-map.dtd">
-     <memory-map>
-         region...
-     </memory-map>
+The '-trace-find' Command
+-------------------------
 
-   Each region can be either:
+Synopsis
+........
 
-   * A region of RAM starting at ADDR and extending for LENGTH bytes
-     from there:
+      -trace-find MODE [PARAMETERS...]
 
-          <memory type="ram" start="ADDR" length="LENGTH"/>
+   Find a trace frame using criteria defined by MODE and PARAMETERS.
+The following table lists permissible modes and their parameters.  For
+details of operation, see *note tfind::.
 
-   * A region of read-only memory:
+'none'
+     No parameters are required.  Stops examining trace frames.
 
-          <memory type="rom" start="ADDR" length="LENGTH"/>
+'frame-number'
+     An integer is required as parameter.  Selects tracepoint frame with
+     that index.
 
-   * A region of flash memory, with erasure blocks BLOCKSIZE bytes in
-     length:
+'tracepoint-number'
+     An integer is required as parameter.  Finds next trace frame that
+     corresponds to tracepoint with the specified number.
 
-          <memory type="flash" start="ADDR" length="LENGTH">
-            <property name="blocksize">BLOCKSIZE</property>
-          </memory>
+'pc'
+     An address is required as parameter.  Finds next trace frame that
+     corresponds to any tracepoint at the specified address.
 
+'pc-inside-range'
+     Two addresses are required as parameters.  Finds next trace frame
+     that corresponds to a tracepoint at an address inside the specified
+     range.  Both bounds are considered to be inside the range.
 
-   Regions must not overlap.  GDB assumes that areas of memory not
-covered by the memory map are RAM, and uses the ordinary `M' and `X'
-packets to write to addresses in such ranges.
+'pc-outside-range'
+     Two addresses are required as parameters.  Finds next trace frame
+     that corresponds to a tracepoint at an address outside the
+     specified range.  Both bounds are considered to be inside the
+     range.
 
-   The formal DTD for memory map format is given below:
+'line'
+     Line specification is required as parameter.  *Note Specify
+     Location::.  Finds next trace frame that corresponds to a
+     tracepoint at the specified location.
 
-     <!-- ................................................... -->
-     <!-- Memory Map XML DTD ................................ -->
-     <!-- File: memory-map.dtd .............................. -->
-     <!-- .................................... .............. -->
-     <!-- memory-map.dtd -->
-     <!-- memory-map: Root element with versioning -->
-     <!ELEMENT memory-map (memory | property)>
-     <!ATTLIST memory-map    version CDATA   #FIXED  "1.0.0">
-     <!ELEMENT memory (property)>
-     <!-- memory: Specifies a memory region,
-                  and its type, or device. -->
-     <!ATTLIST memory        type    CDATA   #REQUIRED
-                             start   CDATA   #REQUIRED
-                             length  CDATA   #REQUIRED
-                             device  CDATA   #IMPLIED>
-     <!-- property: Generic attribute tag -->
-     <!ELEMENT property (#PCDATA | property)*>
-     <!ATTLIST property      name    CDATA   #REQUIRED>
+   If 'none' was passed as MODE, the response does not have fields.
+Otherwise, the response may have the following fields:
 
-\1f
-File: gdb.info,  Node: Thread List Format,  Next: Traceframe Info Format,  Prev: Memory Map Format,  Up: Remote Protocol
+'found'
+     This field has either '0' or '1' as the value, depending on whether
+     a matching tracepoint was found.
 
-E.17 Thread List Format
-=======================
+'traceframe'
+     The index of the found traceframe.  This field is present iff the
+     'found' field has value of '1'.
 
-To efficiently update the list of threads and their attributes, GDB
-issues the `qXfer:threads:read' packet (*note qXfer threads read::) and
-obtains the XML document with the following structure:
+'tracepoint'
+     The index of the found tracepoint.  This field is present iff the
+     'found' field has value of '1'.
 
-     <?xml version="1.0"?>
-     <threads>
-         <thread id="id" core="0">
-         ... description ...
-         </thread>
-     </threads>
+'frame'
+     The information about the frame corresponding to the found trace
+     frame.  This field is present only if a trace frame was found.
+     *Note GDB/MI Frame Information::, for description of this field.
 
-   Each `thread' element must have the `id' attribute that identifies
-the thread (*note thread-id syntax::).  The `core' attribute, if
-present, specifies which processor core the thread was last executing
-on.  The content of the of `thread' element is interpreted as
-human-readable auxilliary information.
+GDB Command
+...........
 
-\1f
-File: gdb.info,  Node: Traceframe Info Format,  Prev: Thread List Format,  Up: Remote Protocol
+The corresponding GDB command is 'tfind'.
 
-E.18 Traceframe Info Format
-===========================
+-trace-define-variable
+----------------------
 
-To be able to know which objects in the inferior can be examined when
-inspecting a tracepoint hit, GDB needs to obtain the list of memory
-ranges, registers and trace state variables that have been collected in
-a traceframe.
+Synopsis
+........
 
-   This list is obtained using the `qXfer:traceframe-info:read' (*note
-qXfer traceframe info read::) packet and is an XML document.
+      -trace-define-variable NAME [ VALUE ]
 
-   GDB must be linked with the Expat library to support XML traceframe
-info discovery.  *Note Expat::.
+   Create trace variable NAME if it does not exist.  If VALUE is
+specified, sets the initial value of the specified trace variable to
+that value.  Note that the NAME should start with the '$' character.
 
-   The top-level structure of the document is shown below:
+GDB Command
+...........
 
-     <?xml version="1.0"?>
-     <!DOCTYPE traceframe-info
-               PUBLIC "+//IDN gnu.org//DTD GDB Memory Map V1.0//EN"
-                      "http://sourceware.org/gdb/gdb-traceframe-info.dtd">
-     <traceframe-info>
-        block...
-     </traceframe-info>
+The corresponding GDB command is 'tvariable'.
 
-   Each traceframe block can be either:
+The '-trace-frame-collected' Command
+------------------------------------
 
-   * A region of collected memory starting at ADDR and extending for
-     LENGTH bytes from there:
+Synopsis
+........
+
+      -trace-frame-collected
+         [--var-print-values VAR_PVAL]
+         [--comp-print-values COMP_PVAL]
+         [--registers-format REGFORMAT]
+         [--memory-contents]
+
+   This command returns the set of collected objects, register names,
+trace state variable names, memory ranges and computed expressions that
+have been collected at a particular trace frame.  The optional
+parameters to the command affect the output format in different ways.
+See the output description table below for more details.
+
+   The reported names can be used in the normal manner to create varobjs
+and inspect the objects themselves.  The items returned by this command
+are categorized so that it is clear which is a variable, which is a
+register, which is a trace state variable, which is a memory range and
+which is a computed expression.
+
+   For instance, if the actions were
+     collect myVar, myArray[myIndex], myObj.field, myPtr->field, myCount + 2
+     collect *(int*)0xaf02bef0@40
+
+the object collected in its entirety would be 'myVar'.  The object
+'myArray' would be partially collected, because only the element at
+index 'myIndex' would be collected.  The remaining objects would be
+computed expressions.
+
+   An example output would be:
+
+     (gdb)
+     -trace-frame-collected
+     ^done,
+       explicit-variables=[{name="myVar",value="1"}],
+       computed-expressions=[{name="myArray[myIndex]",value="0"},
+                             {name="myObj.field",value="0"},
+                             {name="myPtr->field",value="1"},
+                             {name="myCount + 2",value="3"},
+                             {name="$tvar1 + 1",value="43970027"}],
+       registers=[{number="0",value="0x7fe2c6e79ec8"},
+                  {number="1",value="0x0"},
+                  {number="2",value="0x4"},
+                  ...
+                  {number="125",value="0x0"}],
+       tvars=[{name="$tvar1",current="43970026"}],
+       memory=[{address="0x0000000000602264",length="4"},
+               {address="0x0000000000615bc0",length="4"}]
+     (gdb)
+
+   Where:
+
+'explicit-variables'
+     The set of objects that have been collected in their entirety (as
+     opposed to collecting just a few elements of an array or a few
+     struct members).  For each object, its name and value are printed.
+     The '--var-print-values' option affects how or whether the value
+     field is output.  If VAR_PVAL is 0, then print only the names; if
+     it is 1, print also their values; and if it is 2, print the name,
+     type and value for simple data types, and the name and type for
+     arrays, structures and unions.
+
+'computed-expressions'
+     The set of computed expressions that have been collected at the
+     current trace frame.  The '--comp-print-values' option affects this
+     set like the '--var-print-values' option affects the
+     'explicit-variables' set.  See above.
+
+'registers'
+     The registers that have been collected at the current trace frame.
+     For each register collected, the name and current value are
+     returned.  The value is formatted according to the
+     '--registers-format' option.  See the '-data-list-register-values'
+     command for a list of the allowed formats.  The default is 'x'.
+
+'tvars'
+     The trace state variables that have been collected at the current
+     trace frame.  For each trace state variable collected, the name and
+     current value are returned.
+
+'memory'
+     The set of memory ranges that have been collected at the current
+     trace frame.  Its content is a list of tuples.  Each tuple
+     represents a collected memory range and has the following fields:
+
+     'address'
+          The start address of the memory range, as hexadecimal literal.
+
+     'length'
+          The length of the memory range, as decimal literal.
+
+     'contents'
+          The contents of the memory block, in hex.  This field is only
+          present if the '--memory-contents' option is specified.
+
+GDB Command
+...........
 
-          <memory start="ADDR" length="LENGTH"/>
+There is no corresponding GDB command.
 
+Example
+.......
 
-   The formal DTD for the traceframe info format is given below:
+-trace-list-variables
+---------------------
 
-     <!ELEMENT traceframe-info  (memory)* >
-     <!ATTLIST traceframe-info  version CDATA   #FIXED  "1.0">
+Synopsis
+........
 
-     <!ELEMENT memory        EMPTY>
-     <!ATTLIST memory        start   CDATA   #REQUIRED
-                             length  CDATA   #REQUIRED>
+      -trace-list-variables
 
-\1f
-File: gdb.info,  Node: Agent Expressions,  Next: Target Descriptions,  Prev: Remote Protocol,  Up: Top
+   Return a table of all defined trace variables.  Each element of the
+table has the following fields:
 
-Appendix F The GDB Agent Expression Mechanism
-*********************************************
+'name'
+     The name of the trace variable.  This field is always present.
 
-In some applications, it is not feasible for the debugger to interrupt
-the program's execution long enough for the developer to learn anything
-helpful about its behavior.  If the program's correctness depends on its
-real-time behavior, delays introduced by a debugger might cause the
-program to fail, even when the code itself is correct.  It is useful to
-be able to observe the program's behavior without interrupting it.
+'initial'
+     The initial value.  This is a 64-bit signed integer.  This field is
+     always present.
 
-   Using GDB's `trace' and `collect' commands, the user can specify
-locations in the program, and arbitrary expressions to evaluate when
-those locations are reached.  Later, using the `tfind' command, she can
-examine the values those expressions had when the program hit the trace
-points.  The expressions may also denote objects in memory --
-structures or arrays, for example -- whose values GDB should record;
-while visiting a particular tracepoint, the user may inspect those
-objects as if they were in memory at that moment.  However, because GDB
-records these values without interacting with the user, it can do so
-quickly and unobtrusively, hopefully not disturbing the program's
-behavior.
-
-   When GDB is debugging a remote target, the GDB "agent" code running
-on the target computes the values of the expressions itself.  To avoid
-having a full symbolic expression evaluator on the agent, GDB translates
-expressions in the source language into a simpler bytecode language, and
-then sends the bytecode to the agent; the agent then executes the
-bytecode, and records the values for GDB to retrieve later.
-
-   The bytecode language is simple; there are forty-odd opcodes, the
-bulk of which are the usual vocabulary of C operands (addition,
-subtraction, shifts, and so on) and various sizes of literals and
-memory reference operations.  The bytecode interpreter operates
-strictly on machine-level values -- various sizes of integers and
-floating point numbers -- and requires no information about types or
-symbols; thus, the interpreter's internal data structures are simple,
-and each bytecode requires only a few native machine instructions to
-implement it.  The interpreter is small, and strict limits on the
-memory and time required to evaluate an expression are easy to
-determine, making it suitable for use by the debugging agent in
-real-time applications.
+'current'
+     The value the trace variable has at the moment.  This is a 64-bit
+     signed integer.  This field is absent iff current value is not
+     defined, for example if the trace was never run, or is presently
+     running.
 
-* Menu:
+GDB Command
+...........
 
-* General Bytecode Design::     Overview of the interpreter.
-* Bytecode Descriptions::       What each one does.
-* Using Agent Expressions::     How agent expressions fit into the big picture.
-* Varying Target Capabilities:: How to discover what the target can do.
-* Rationale::                   Why we did it this way.
+The corresponding GDB command is 'tvariables'.
 
-\1f
-File: gdb.info,  Node: General Bytecode Design,  Next: Bytecode Descriptions,  Up: Agent Expressions
+Example
+.......
 
-F.1 General Bytecode Design
-===========================
+     (gdb)
+     -trace-list-variables
+     ^done,trace-variables={nr_rows="1",nr_cols="3",
+     hdr=[{width="15",alignment="-1",col_name="name",colhdr="Name"},
+          {width="11",alignment="-1",col_name="initial",colhdr="Initial"},
+          {width="11",alignment="-1",col_name="current",colhdr="Current"}],
+     body=[variable={name="$trace_timestamp",initial="0"}
+           variable={name="$foo",initial="10",current="15"}]}
+     (gdb)
 
-The agent represents bytecode expressions as an array of bytes.  Each
-instruction is one byte long (thus the term "bytecode").  Some
-instructions are followed by operand bytes; for example, the `goto'
-instruction is followed by a destination for the jump.
-
-   The bytecode interpreter is a stack-based machine; most instructions
-pop their operands off the stack, perform some operation, and push the
-result back on the stack for the next instruction to consume.  Each
-element of the stack may contain either a integer or a floating point
-value; these values are as many bits wide as the largest integer that
-can be directly manipulated in the source language.  Stack elements
-carry no record of their type; bytecode could push a value as an
-integer, then pop it as a floating point value.  However, GDB will not
-generate code which does this.  In C, one might define the type of a
-stack element as follows:
-     union agent_val {
-       LONGEST l;
-       DOUBLEST d;
-     };
-   where `LONGEST' and `DOUBLEST' are `typedef' names for the largest
-integer and floating point types on the machine.
-
-   By the time the bytecode interpreter reaches the end of the
-expression, the value of the expression should be the only value left
-on the stack.  For tracing applications, `trace' bytecodes in the
-expression will have recorded the necessary data, and the value on the
-stack may be discarded.  For other applications, like conditional
-breakpoints, the value may be useful.
-
-   Separate from the stack, the interpreter has two registers:
-`pc'
-     The address of the next bytecode to execute.
-
-`start'
-     The address of the start of the bytecode expression, necessary for
-     interpreting the `goto' and `if_goto' instructions.
-
-   Neither of these registers is directly visible to the bytecode
-language itself, but they are useful for defining the meanings of the
-bytecode operations.
-
-   There are no instructions to perform side effects on the running
-program, or call the program's functions; we assume that these
-expressions are only used for unobtrusive debugging, not for patching
-the running code.
-
-   Most bytecode instructions do not distinguish between the various
-sizes of values, and operate on full-width values; the upper bits of the
-values are simply ignored, since they do not usually make a difference
-to the value computed.  The exceptions to this rule are:
-memory reference instructions (`ref'N)
-     There are distinct instructions to fetch different word sizes from
-     memory.  Once on the stack, however, the values are treated as
-     full-size integers.  They may need to be sign-extended; the `ext'
-     instruction exists for this purpose.
-
-the sign-extension instruction (`ext' N)
-     These clearly need to know which portion of their operand is to be
-     extended to occupy the full length of the word.
-
-
-   If the interpreter is unable to evaluate an expression completely for
-some reason (a memory location is inaccessible, or a divisor is zero,
-for example), we say that interpretation "terminates with an error".
-This means that the problem is reported back to the interpreter's caller
-in some helpful way.  In general, code using agent expressions should
-assume that they may attempt to divide by zero, fetch arbitrary memory
-locations, and misbehave in other ways.
-
-   Even complicated C expressions compile to a few bytecode
-instructions; for example, the expression `x + y * z' would typically
-produce code like the following, assuming that `x' and `y' live in
-registers, and `z' is a global variable holding a 32-bit `int':
-     reg 1
-     reg 2
-     const32 address of z
-     ref32
-     ext 32
-     mul
-     add
-     end
-
-   In detail, these mean:
-`reg 1'
-     Push the value of register 1 (presumably holding `x') onto the
-     stack.
-
-`reg 2'
-     Push the value of register 2 (holding `y').
-
-`const32 address of z'
-     Push the address of `z' onto the stack.
-
-`ref32'
-     Fetch a 32-bit word from the address at the top of the stack;
-     replace the address on the stack with the value.  Thus, we replace
-     the address of `z' with `z''s value.
-
-`ext 32'
-     Sign-extend the value on the top of the stack from 32 bits to full
-     length.  This is necessary because `z' is a signed integer.
-
-`mul'
-     Pop the top two numbers on the stack, multiply them, and push their
-     product.  Now the top of the stack contains the value of the
-     expression `y * z'.
-
-`add'
-     Pop the top two numbers, add them, and push the sum.  Now the top
-     of the stack contains the value of `x + y * z'.
-
-`end'
-     Stop executing; the value left on the stack top is the value to be
-     recorded.
+-trace-save
+-----------
+
+Synopsis
+........
+
+      -trace-save [-r ] FILENAME
+
+   Saves the collected trace data to FILENAME.  Without the '-r' option,
+the data is downloaded from the target and saved in a local file.  With
+the '-r' option the target is asked to perform the save.
+
+GDB Command
+...........
+
+The corresponding GDB command is 'tsave'.
+
+-trace-start
+------------
+
+Synopsis
+........
+
+      -trace-start
+
+   Starts a tracing experiments.  The result of this command does not
+have any fields.
+
+GDB Command
+...........
+
+The corresponding GDB command is 'tstart'.
+
+-trace-status
+-------------
+
+Synopsis
+........
+
+      -trace-status
+
+   Obtains the status of a tracing experiment.  The result may include
+the following fields:
+
+'supported'
+     May have a value of either '0', when no tracing operations are
+     supported, '1', when all tracing operations are supported, or
+     'file' when examining trace file.  In the latter case, examining of
+     trace frame is possible but new tracing experiement cannot be
+     started.  This field is always present.
+
+'running'
+     May have a value of either '0' or '1' depending on whether tracing
+     experiement is in progress on target.  This field is present if
+     'supported' field is not '0'.
+
+'stop-reason'
+     Report the reason why the tracing was stopped last time.  This
+     field may be absent iff tracing was never stopped on target yet.
+     The value of 'request' means the tracing was stopped as result of
+     the '-trace-stop' command.  The value of 'overflow' means the
+     tracing buffer is full.  The value of 'disconnection' means tracing
+     was automatically stopped when GDB has disconnected.  The value of
+     'passcount' means tracing was stopped when a tracepoint was passed
+     a maximal number of times for that tracepoint.  This field is
+     present if 'supported' field is not '0'.
+
+'stopping-tracepoint'
+     The number of tracepoint whose passcount as exceeded.  This field
+     is present iff the 'stop-reason' field has the value of
+     'passcount'.
+
+'frames'
+'frames-created'
+     The 'frames' field is a count of the total number of trace frames
+     in the trace buffer, while 'frames-created' is the total created
+     during the run, including ones that were discarded, such as when a
+     circular trace buffer filled up.  Both fields are optional.
+
+'buffer-size'
+'buffer-free'
+     These fields tell the current size of the tracing buffer and the
+     remaining space.  These fields are optional.
+
+'circular'
+     The value of the circular trace buffer flag.  '1' means that the
+     trace buffer is circular and old trace frames will be discarded if
+     necessary to make room, '0' means that the trace buffer is linear
+     and may fill up.
+
+'disconnected'
+     The value of the disconnected tracing flag.  '1' means that tracing
+     will continue after GDB disconnects, '0' means that the trace run
+     will stop.
+
+'trace-file'
+     The filename of the trace file being examined.  This field is
+     optional, and only present when examining a trace file.
+
+GDB Command
+...........
+
+The corresponding GDB command is 'tstatus'.
+
+-trace-stop
+-----------
+
+Synopsis
+........
+
+      -trace-stop
+
+   Stops a tracing experiment.  The result of this command has the same
+fields as '-trace-status', except that the 'supported' and 'running'
+fields are not output.
 
+GDB Command
+...........
+
+The corresponding GDB command is 'tstop'.
 
 \1f
-File: gdb.info,  Node: Bytecode Descriptions,  Next: Using Agent Expressions,  Prev: General Bytecode Design,  Up: Agent Expressions
+File: gdb.info,  Node: GDB/MI Symbol Query,  Next: GDB/MI File Commands,  Prev: GDB/MI Tracepoint Commands,  Up: GDB/MI
 
-F.2 Bytecode Descriptions
-=========================
+27.18 GDB/MI Symbol Query Commands
+==================================
+
+The '-symbol-list-lines' Command
+--------------------------------
 
-Each bytecode description has the following form:
+Synopsis
+........
 
-`add' (0x02): A B => A+B
-     Pop the top two stack items, A and B, as integers; push their sum,
-     as an integer.
+      -symbol-list-lines FILENAME
 
+   Print the list of lines that contain code and their associated
+program addresses for the given source filename.  The entries are sorted
+in ascending PC order.
 
-   In this example, `add' is the name of the bytecode, and `(0x02)' is
-the one-byte value used to encode the bytecode, in hexadecimal.  The
-phrase "A B => A+B" shows the stack before and after the bytecode
-executes.  Beforehand, the stack must contain at least two values, A
-and B; since the top of the stack is to the right, B is on the top of
-the stack, and A is underneath it.  After execution, the bytecode will
-have popped A and B from the stack, and replaced them with a single
-value, A+B.  There may be other values on the stack below those shown,
-but the bytecode affects only those shown.
-
-   Here is another example:
-
-`const8' (0x22) N: => N
-     Push the 8-bit integer constant N on the stack, without sign
-     extension.
-
-
-   In this example, the bytecode `const8' takes an operand N directly
-from the bytecode stream; the operand follows the `const8' bytecode
-itself.  We write any such operands immediately after the name of the
-bytecode, before the colon, and describe the exact encoding of the
-operand in the bytecode stream in the body of the bytecode description.
-
-   For the `const8' bytecode, there are no stack items given before the
-=>; this simply means that the bytecode consumes no values from the
-stack.  If a bytecode consumes no values, or produces no values, the
-list on either side of the => may be empty.
-
-   If a value is written as A, B, or N, then the bytecode treats it as
-an integer.  If a value is written is ADDR, then the bytecode treats it
-as an address.
-
-   We do not fully describe the floating point operations here; although
-this design can be extended in a clean way to handle floating point
-values, they are not of immediate interest to the customer, so we avoid
-describing them, to save time.
-
-`float' (0x01): =>
-     Prefix for floating-point bytecodes.  Not implemented yet.
-
-`add' (0x02): A B => A+B
-     Pop two integers from the stack, and push their sum, as an integer.
-
-`sub' (0x03): A B => A-B
-     Pop two integers from the stack, subtract the top value from the
-     next-to-top value, and push the difference.
-
-`mul' (0x04): A B => A*B
-     Pop two integers from the stack, multiply them, and push the
-     product on the stack.  Note that, when one multiplies two N-bit
-     numbers yielding another N-bit number, it is irrelevant whether the
-     numbers are signed or not; the results are the same.
-
-`div_signed' (0x05): A B => A/B
-     Pop two signed integers from the stack; divide the next-to-top
-     value by the top value, and push the quotient.  If the divisor is
-     zero, terminate with an error.
-
-`div_unsigned' (0x06): A B => A/B
-     Pop two unsigned integers from the stack; divide the next-to-top
-     value by the top value, and push the quotient.  If the divisor is
-     zero, terminate with an error.
-
-`rem_signed' (0x07): A B => A MODULO B
-     Pop two signed integers from the stack; divide the next-to-top
-     value by the top value, and push the remainder.  If the divisor is
-     zero, terminate with an error.
-
-`rem_unsigned' (0x08): A B => A MODULO B
-     Pop two unsigned integers from the stack; divide the next-to-top
-     value by the top value, and push the remainder.  If the divisor is
-     zero, terminate with an error.
-
-`lsh' (0x09): A B => A<<B
-     Pop two integers from the stack; let A be the next-to-top value,
-     and B be the top value.  Shift A left by B bits, and push the
-     result.
-
-`rsh_signed' (0x0a): A B => `(signed)'A>>B
-     Pop two integers from the stack; let A be the next-to-top value,
-     and B be the top value.  Shift A right by B bits, inserting copies
-     of the top bit at the high end, and push the result.
-
-`rsh_unsigned' (0x0b): A B => A>>B
-     Pop two integers from the stack; let A be the next-to-top value,
-     and B be the top value.  Shift A right by B bits, inserting zero
-     bits at the high end, and push the result.
-
-`log_not' (0x0e): A => !A
-     Pop an integer from the stack; if it is zero, push the value one;
-     otherwise, push the value zero.
-
-`bit_and' (0x0f): A B => A&B
-     Pop two integers from the stack, and push their bitwise `and'.
-
-`bit_or' (0x10): A B => A|B
-     Pop two integers from the stack, and push their bitwise `or'.
-
-`bit_xor' (0x11): A B => A^B
-     Pop two integers from the stack, and push their bitwise
-     exclusive-`or'.
-
-`bit_not' (0x12): A => ~A
-     Pop an integer from the stack, and push its bitwise complement.
-
-`equal' (0x13): A B => A=B
-     Pop two integers from the stack; if they are equal, push the value
-     one; otherwise, push the value zero.
-
-`less_signed' (0x14): A B => A<B
-     Pop two signed integers from the stack; if the next-to-top value
-     is less than the top value, push the value one; otherwise, push
-     the value zero.
-
-`less_unsigned' (0x15): A B => A<B
-     Pop two unsigned integers from the stack; if the next-to-top value
-     is less than the top value, push the value one; otherwise, push
-     the value zero.
-
-`ext' (0x16) N: A => A, sign-extended from N bits
-     Pop an unsigned value from the stack; treating it as an N-bit
-     twos-complement value, extend it to full length.  This means that
-     all bits to the left of bit N-1 (where the least significant bit
-     is bit 0) are set to the value of bit N-1.  Note that N may be
-     larger than or equal to the width of the stack elements of the
-     bytecode engine; in this case, the bytecode should have no effect.
-
-     The number of source bits to preserve, N, is encoded as a single
-     byte unsigned integer following the `ext' bytecode.
-
-`zero_ext' (0x2a) N: A => A, zero-extended from N bits
-     Pop an unsigned value from the stack; zero all but the bottom N
-     bits.  This means that all bits to the left of bit N-1 (where the
-     least significant bit is bit 0) are set to the value of bit N-1.
-
-     The number of source bits to preserve, N, is encoded as a single
-     byte unsigned integer following the `zero_ext' bytecode.
-
-`ref8' (0x17): ADDR => A
-`ref16' (0x18): ADDR => A
-`ref32' (0x19): ADDR => A
-`ref64' (0x1a): ADDR => A
-     Pop an address ADDR from the stack.  For bytecode `ref'N, fetch an
-     N-bit value from ADDR, using the natural target endianness.  Push
-     the fetched value as an unsigned integer.
-
-     Note that ADDR may not be aligned in any particular way; the
-     `refN' bytecodes should operate correctly for any address.
-
-     If attempting to access memory at ADDR would cause a processor
-     exception of some sort, terminate with an error.
-
-`ref_float' (0x1b): ADDR => D
-`ref_double' (0x1c): ADDR => D
-`ref_long_double' (0x1d): ADDR => D
-`l_to_d' (0x1e): A => D
-`d_to_l' (0x1f): D => A
-     Not implemented yet.
-
-`dup' (0x28): A => A A
-     Push another copy of the stack's top element.
-
-`swap' (0x2b): A B => B A
-     Exchange the top two items on the stack.
-
-`pop' (0x29): A =>
-     Discard the top value on the stack.
-
-`pick' (0x32) N: A ... B => A ... B A
-     Duplicate an item from the stack and push it on the top of the
-     stack.  N, a single byte, indicates the stack item to copy.  If N
-     is zero, this is the same as `dup'; if N is one, it copies the
-     item under the top item, etc.  If N exceeds the number of items on
-     the stack, terminate with an error.
-
-`rot' (0x33): A B C => C B A
-     Rotate the top three items on the stack.
-
-`if_goto' (0x20) OFFSET: A =>
-     Pop an integer off the stack; if it is non-zero, branch to the
-     given offset in the bytecode string.  Otherwise, continue to the
-     next instruction in the bytecode stream.  In other words, if A is
-     non-zero, set the `pc' register to `start' + OFFSET.  Thus, an
-     offset of zero denotes the beginning of the expression.
-
-     The OFFSET is stored as a sixteen-bit unsigned value, stored
-     immediately following the `if_goto' bytecode.  It is always stored
-     most significant byte first, regardless of the target's normal
-     endianness.  The offset is not guaranteed to fall at any particular
-     alignment within the bytecode stream; thus, on machines where
-     fetching a 16-bit on an unaligned address raises an exception, you
-     should fetch the offset one byte at a time.
-
-`goto' (0x21) OFFSET: =>
-     Branch unconditionally to OFFSET; in other words, set the `pc'
-     register to `start' + OFFSET.
-
-     The offset is stored in the same way as for the `if_goto' bytecode.
-
-`const8' (0x22) N: => N
-`const16' (0x23) N: => N
-`const32' (0x24) N: => N
-`const64' (0x25) N: => N
-     Push the integer constant N on the stack, without sign extension.
-     To produce a small negative value, push a small twos-complement
-     value, and then sign-extend it using the `ext' bytecode.
-
-     The constant N is stored in the appropriate number of bytes
-     following the `const'B bytecode.  The constant N is always stored
-     most significant byte first, regardless of the target's normal
-     endianness.  The constant is not guaranteed to fall at any
-     particular alignment within the bytecode stream; thus, on machines
-     where fetching a 16-bit on an unaligned address raises an
-     exception, you should fetch N one byte at a time.
-
-`reg' (0x26) N: => A
-     Push the value of register number N, without sign extension.  The
-     registers are numbered following GDB's conventions.
-
-     The register number N is encoded as a 16-bit unsigned integer
-     immediately following the `reg' bytecode.  It is always stored most
-     significant byte first, regardless of the target's normal
-     endianness.  The register number is not guaranteed to fall at any
-     particular alignment within the bytecode stream; thus, on machines
-     where fetching a 16-bit on an unaligned address raises an
-     exception, you should fetch the register number one byte at a time.
-
-`getv' (0x2c) N: => V
-     Push the value of trace state variable number N, without sign
-     extension.
-
-     The variable number N is encoded as a 16-bit unsigned integer
-     immediately following the `getv' bytecode.  It is always stored
-     most significant byte first, regardless of the target's normal
-     endianness.  The variable number is not guaranteed to fall at any
-     particular alignment within the bytecode stream; thus, on machines
-     where fetching a 16-bit on an unaligned address raises an
-     exception, you should fetch the register number one byte at a time.
-
-`setv' (0x2d) N: => V
-     Set trace state variable number N to the value found on the top of
-     the stack.  The stack is unchanged, so that the value is readily
-     available if the assignment is part of a larger expression.  The
-     handling of N is as described for `getv'.
-
-`trace' (0x0c): ADDR SIZE =>
-     Record the contents of the SIZE bytes at ADDR in a trace buffer,
-     for later retrieval by GDB.
-
-`trace_quick' (0x0d) SIZE: ADDR => ADDR
-     Record the contents of the SIZE bytes at ADDR in a trace buffer,
-     for later retrieval by GDB.  SIZE is a single byte unsigned
-     integer following the `trace' opcode.
-
-     This bytecode is equivalent to the sequence `dup const8 SIZE
-     trace', but we provide it anyway to save space in bytecode strings.
-
-`trace16' (0x30) SIZE: ADDR => ADDR
-     Identical to trace_quick, except that SIZE is a 16-bit big-endian
-     unsigned integer, not a single byte.  This should probably have
-     been named `trace_quick16', for consistency.
-
-`tracev' (0x2e) N: => A
-     Record the value of trace state variable number N in the trace
-     buffer.  The handling of N is as described for `getv'.
-
-`tracenz' (0x2f)  ADDR SIZE =>
-     Record the bytes at ADDR in a trace buffer, for later retrieval by
-     GDB.  Stop at either the first zero byte, or when SIZE bytes have
-     been recorded, whichever occurs first.
-
-`printf' (0x34)  NUMARGS STRING =>
-     Do a formatted print, in the style of the C function `printf').
-     The value of NUMARGS is the number of arguments to expect on the
-     stack, while STRING is the format string, prefixed with a two-byte
-     length.  The last byte of the string must be zero, and is included
-     in the length.  The format string includes escaped sequences just
-     as it appears in C source, so for instance the format string
-     `"\t%d\n"' is six characters long, and the output will consist of
-     a tab character, a decimal number, and a newline.  At the top of
-     the stack, above the values to be printed, this bytecode will pop a
-     "function" and "channel".  If the function is nonzero, then the
-     target may treat it as a function and call it, passing the channel
-     as a first argument, as with the C function `fprintf'.  If the
-     function is zero, then the target may simply call a standard
-     formatted print function of its choice.  In all, this bytecode
-     pops 2 + NUMARGS stack elements, and pushes nothing.
-
-`end' (0x27): =>
-     Stop executing bytecode; the result should be the top element of
-     the stack.  If the purpose of the expression was to compute an
-     lvalue or a range of memory, then the next-to-top of the stack is
-     the lvalue's address, and the top of the stack is the lvalue's
-     size, in bytes.
+GDB Command
+...........
+
+There is no corresponding GDB command.
 
+Example
+.......
+
+     (gdb)
+     -symbol-list-lines basics.c
+     ^done,lines=[{pc="0x08048554",line="7"},{pc="0x0804855a",line="8"}]
+     (gdb)
 
 \1f
-File: gdb.info,  Node: Using Agent Expressions,  Next: Varying Target Capabilities,  Prev: Bytecode Descriptions,  Up: Agent Expressions
+File: gdb.info,  Node: GDB/MI File Commands,  Next: GDB/MI Target Manipulation,  Prev: GDB/MI Symbol Query,  Up: GDB/MI
 
-F.3 Using Agent Expressions
-===========================
+27.19 GDB/MI File Commands
+==========================
+
+This section describes the GDB/MI commands to specify executable file
+names and to read in and obtain symbol table information.
+
+The '-file-exec-and-symbols' Command
+------------------------------------
 
-Agent expressions can be used in several different ways by GDB, and the
-debugger can generate different bytecode sequences as appropriate.
+Synopsis
+........
 
-   One possibility is to do expression evaluation on the target rather
-than the host, such as for the conditional of a conditional tracepoint.
-In such a case, GDB compiles the source expression into a bytecode
-sequence that simply gets values from registers or memory, does
-arithmetic, and returns a result.
+      -file-exec-and-symbols FILE
 
-   Another way to use agent expressions is for tracepoint data
-collection.  GDB generates a different bytecode sequence for
-collection; in addition to bytecodes that do the calculation, GDB adds
-`trace' bytecodes to save the pieces of memory that were used.
+   Specify the executable file to be debugged.  This file is the one
+from which the symbol table is also read.  If no file is specified, the
+command clears the executable and symbol information.  If breakpoints
+are set when using this command with no arguments, GDB will produce
+error messages.  Otherwise, no output is produced, except a completion
+notification.
 
-   * The user selects trace points in the program's code at which GDB
-     should collect data.
+GDB Command
+...........
 
-   * The user specifies expressions to evaluate at each trace point.
-     These expressions may denote objects in memory, in which case
-     those objects' contents are recorded as the program runs, or
-     computed values, in which case the values themselves are recorded.
+The corresponding GDB command is 'file'.
 
-   * GDB transmits the tracepoints and their associated expressions to
-     the GDB agent, running on the debugging target.
+Example
+.......
 
-   * The agent arranges to be notified when a trace point is hit.
+     (gdb)
+     -file-exec-and-symbols /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
+     ^done
+     (gdb)
 
-   * When execution on the target reaches a trace point, the agent
-     evaluates the expressions associated with that trace point, and
-     records the resulting values and memory ranges.
+The '-file-exec-file' Command
+-----------------------------
 
-   * Later, when the user selects a given trace event and inspects the
-     objects and expression values recorded, GDB talks to the agent to
-     retrieve recorded data as necessary to meet the user's requests.
-     If the user asks to see an object whose contents have not been
-     recorded, GDB reports an error.
+Synopsis
+........
 
+      -file-exec-file FILE
 
-\1f
-File: gdb.info,  Node: Varying Target Capabilities,  Next: Rationale,  Prev: Using Agent Expressions,  Up: Agent Expressions
+   Specify the executable file to be debugged.  Unlike
+'-file-exec-and-symbols', the symbol table is _not_ read from this file.
+If used without argument, GDB clears the information about the
+executable file.  No output is produced, except a completion
+notification.
 
-F.4 Varying Target Capabilities
-===============================
+GDB Command
+...........
 
-Some targets don't support floating-point, and some would rather not
-have to deal with `long long' operations.  Also, different targets will
-have different stack sizes, and different bytecode buffer lengths.
+The corresponding GDB command is 'exec-file'.
 
-   Thus, GDB needs a way to ask the target about itself.  We haven't
-worked out the details yet, but in general, GDB should be able to send
-the target a packet asking it to describe itself.  The reply should be a
-packet whose length is explicit, so we can add new information to the
-packet in future revisions of the agent, without confusing old versions
-of GDB, and it should contain a version number.  It should contain at
-least the following information:
+Example
+.......
 
-   * whether floating point is supported
+     (gdb)
+     -file-exec-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
+     ^done
+     (gdb)
 
-   * whether `long long' is supported
+The '-file-list-exec-source-file' Command
+-----------------------------------------
 
-   * maximum acceptable size of bytecode stack
+Synopsis
+........
 
-   * maximum acceptable length of bytecode expressions
+      -file-list-exec-source-file
 
-   * which registers are actually available for collection
+   List the line number, the current source file, and the absolute path
+to the current source file for the current executable.  The macro
+information field has a value of '1' or '0' depending on whether or not
+the file includes preprocessor macro information.
 
-   * whether the target supports disabled tracepoints
+GDB Command
+...........
 
+The GDB equivalent is 'info source'
 
-\1f
-File: gdb.info,  Node: Rationale,  Prev: Varying Target Capabilities,  Up: Agent Expressions
-
-F.5 Rationale
-=============
-
-Some of the design decisions apparent above are arguable.
-
-What about stack overflow/underflow?
-     GDB should be able to query the target to discover its stack size.
-     Given that information, GDB can determine at translation time
-     whether a given expression will overflow the stack.  But this spec
-     isn't about what kinds of error-checking GDB ought to do.
-
-Why are you doing everything in LONGEST?
-     Speed isn't important, but agent code size is; using LONGEST
-     brings in a bunch of support code to do things like division, etc.
-     So this is a serious concern.
-
-     First, note that you don't need different bytecodes for different
-     operand sizes.  You can generate code without _knowing_ how big the
-     stack elements actually are on the target.  If the target only
-     supports 32-bit ints, and you don't send any 64-bit bytecodes,
-     everything just works.  The observation here is that the MIPS and
-     the Alpha have only fixed-size registers, and you can still get
-     C's semantics even though most instructions only operate on
-     full-sized words.  You just need to make sure everything is
-     properly sign-extended at the right times.  So there is no need
-     for 32- and 64-bit variants of the bytecodes.  Just implement
-     everything using the largest size you support.
-
-     GDB should certainly check to see what sizes the target supports,
-     so the user can get an error earlier, rather than later.  But this
-     information is not necessary for correctness.
-
-Why don't you have `>' or `<=' operators?
-     I want to keep the interpreter small, and we don't need them.  We
-     can combine the `less_' opcodes with `log_not', and swap the order
-     of the operands, yielding all four asymmetrical comparison
-     operators.  For example, `(x <= y)' is `! (x > y)', which is `! (y
-     < x)'.
-
-Why do you have `log_not'?
-Why do you have `ext'?
-Why do you have `zero_ext'?
-     These are all easily synthesized from other instructions, but I
-     expect them to be used frequently, and they're simple, so I
-     include them to keep bytecode strings short.
-
-     `log_not' is equivalent to `const8 0 equal'; it's used in half the
-     relational operators.
-
-     `ext N' is equivalent to `const8 S-N lsh const8 S-N rsh_signed',
-     where S is the size of the stack elements; it follows `refM' and
-     REG bytecodes when the value should be signed.  See the next
-     bulleted item.
-
-     `zero_ext N' is equivalent to `constM MASK log_and'; it's used
-     whenever we push the value of a register, because we can't assume
-     the upper bits of the register aren't garbage.
-
-Why not have sign-extending variants of the `ref' operators?
-     Because that would double the number of `ref' operators, and we
-     need the `ext' bytecode anyway for accessing bitfields.
-
-Why not have constant-address variants of the `ref' operators?
-     Because that would double the number of `ref' operators again, and
-     `const32 ADDRESS ref32' is only one byte longer.
-
-Why do the `refN' operators have to support unaligned fetches?
-     GDB will generate bytecode that fetches multi-byte values at
-     unaligned addresses whenever the executable's debugging
-     information tells it to.  Furthermore, GDB does not know the value
-     the pointer will have when GDB generates the bytecode, so it
-     cannot determine whether a particular fetch will be aligned or not.
-
-     In particular, structure bitfields may be several bytes long, but
-     follow no alignment rules; members of packed structures are not
-     necessarily aligned either.
-
-     In general, there are many cases where unaligned references occur
-     in correct C code, either at the programmer's explicit request, or
-     at the compiler's discretion.  Thus, it is simpler to make the GDB
-     agent bytecodes work correctly in all circumstances than to make
-     GDB guess in each case whether the compiler did the usual thing.
-
-Why are there no side-effecting operators?
-     Because our current client doesn't want them?  That's a cheap
-     answer.  I think the real answer is that I'm afraid of
-     implementing function calls.  We should re-visit this issue after
-     the present contract is delivered.
-
-Why aren't the `goto' ops PC-relative?
-     The interpreter has the base address around anyway for PC bounds
-     checking, and it seemed simpler.
-
-Why is there only one offset size for the `goto' ops?
-     Offsets are currently sixteen bits.  I'm not happy with this
-     situation either:
-
-     Suppose we have multiple branch ops with different offset sizes.
-     As I generate code left-to-right, all my jumps are forward jumps
-     (there are no loops in expressions), so I never know the target
-     when I emit the jump opcode.  Thus, I have to either always assume
-     the largest offset size, or do jump relaxation on the code after I
-     generate it, which seems like a big waste of time.
-
-     I can imagine a reasonable expression being longer than 256 bytes.
-     I can't imagine one being longer than 64k.  Thus, we need 16-bit
-     offsets.  This kind of reasoning is so bogus, but relaxation is
-     pathetic.
-
-     The other approach would be to generate code right-to-left.  Then
-     I'd always know my offset size.  That might be fun.
-
-Where is the function call bytecode?
-     When we add side-effects, we should add this.
-
-Why does the `reg' bytecode take a 16-bit register number?
-     Intel's IA-64 architecture has 128 general-purpose registers, and
-     128 floating-point registers, and I'm sure it has some random
-     control registers.
-
-Why do we need `trace' and `trace_quick'?
-     Because GDB needs to record all the memory contents and registers
-     an expression touches.  If the user wants to evaluate an expression
-     `x->y->z', the agent must record the values of `x' and `x->y' as
-     well as the value of `x->y->z'.
-
-Don't the `trace' bytecodes make the interpreter less general?
-     They do mean that the interpreter contains special-purpose code,
-     but that doesn't mean the interpreter can only be used for that
-     purpose.  If an expression doesn't use the `trace' bytecodes, they
-     don't get in its way.
-
-Why doesn't `trace_quick' consume its arguments the way everything else does?
-     In general, you do want your operators to consume their arguments;
-     it's consistent, and generally reduces the amount of stack
-     rearrangement necessary.  However, `trace_quick' is a kludge to
-     save space; it only exists so we needn't write `dup const8 SIZE
-     trace' before every memory reference.  Therefore, it's okay for it
-     not to consume its arguments; it's meant for a specific context in
-     which we know exactly what it should do with the stack.  If we're
-     going to have a kludge, it should be an effective kludge.
-
-Why does `trace16' exist?
-     That opcode was added by the customer that contracted Cygnus for
-     the data tracing work.  I personally think it is unnecessary;
-     objects that large will be quite rare, so it is okay to use `dup
-     const16 SIZE trace' in those cases.
-
-     Whatever we decide to do with `trace16', we should at least leave
-     opcode 0x30 reserved, to remain compatible with the customer who
-     added it.
+Example
+.......
 
+     (gdb)
+     123-file-list-exec-source-file
+     123^done,line="1",file="foo.c",fullname="/home/bar/foo.c,macro-info="1"
+     (gdb)
 
-\1f
-File: gdb.info,  Node: Target Descriptions,  Next: Operating System Information,  Prev: Agent Expressions,  Up: Top
+The '-file-list-exec-source-files' Command
+------------------------------------------
 
-Appendix G Target Descriptions
-******************************
+Synopsis
+........
 
-One of the challenges of using GDB to debug embedded systems is that
-there are so many minor variants of each processor architecture in use.
-It is common practice for vendors to start with a standard processor
-core -- ARM, PowerPC, or MIPS, for example -- and then make changes to
-adapt it to a particular market niche.  Some architectures have
-hundreds of variants, available from dozens of vendors.  This leads to
-a number of problems:
+      -file-list-exec-source-files
 
-   * With so many different customized processors, it is difficult for
-     the GDB maintainers to keep up with the changes.
+   List the source files for the current executable.
 
-   * Since individual variants may have short lifetimes or limited
-     audiences, it may not be worthwhile to carry information about
-     every variant in the GDB source tree.
+   It will always output both the filename and fullname (absolute file
+name) of a source file.
 
-   * When GDB does support the architecture of the embedded system at
-     hand, the task of finding the correct architecture name to give the
-     `set architecture' command can be error-prone.
+GDB Command
+...........
 
-   To address these problems, the GDB remote protocol allows a target
-system to not only identify itself to GDB, but to actually describe its
-own features.  This lets GDB support processor variants it has never
-seen before -- to the extent that the descriptions are accurate, and
-that GDB understands them.
+The GDB equivalent is 'info sources'.  'gdbtk' has an analogous command
+'gdb_listfiles'.
 
-   GDB must be linked with the Expat library to support XML target
-descriptions.  *Note Expat::.
+Example
+.......
 
-* Menu:
+     (gdb)
+     -file-list-exec-source-files
+     ^done,files=[
+     {file=foo.c,fullname=/home/foo.c},
+     {file=/home/bar.c,fullname=/home/bar.c},
+     {file=gdb_could_not_find_fullpath.c}]
+     (gdb)
 
-* Retrieving Descriptions::         How descriptions are fetched from a target.
-* Target Description Format::       The contents of a target description.
-* Predefined Target Types::         Standard types available for target
-                                    descriptions.
-* Standard Target Features::        Features GDB knows about.
+The '-file-symbol-file' Command
+-------------------------------
 
-\1f
-File: gdb.info,  Node: Retrieving Descriptions,  Next: Target Description Format,  Up: Target Descriptions
+Synopsis
+........
 
-G.1 Retrieving Descriptions
-===========================
+      -file-symbol-file FILE
 
-Target descriptions can be read from the target automatically, or
-specified by the user manually.  The default behavior is to read the
-description from the target.  GDB retrieves it via the remote protocol
-using `qXfer' requests (*note qXfer: General Query Packets.).  The
-ANNEX in the `qXfer' packet will be `target.xml'.  The contents of the
-`target.xml' annex are an XML document, of the form described in *Note
-Target Description Format::.
+   Read symbol table info from the specified FILE argument.  When used
+without arguments, clears GDB's symbol table info.  No output is
+produced, except for a completion notification.
 
-   Alternatively, you can specify a file to read for the target
-description.  If a file is set, the target will not be queried.  The
-commands to specify a file are:
+GDB Command
+...........
 
-`set tdesc filename PATH'
-     Read the target description from PATH.
+The corresponding GDB command is 'symbol-file'.
 
-`unset tdesc filename'
-     Do not read the XML target description from a file.  GDB will use
-     the description supplied by the current target.
+Example
+.......
 
-`show tdesc filename'
-     Show the filename to read for a target description, if any.
+     (gdb)
+     -file-symbol-file /kwikemart/marge/ezannoni/TRUNK/mbx/hello.mbx
+     ^done
+     (gdb)
 
 \1f
-File: gdb.info,  Node: Target Description Format,  Next: Predefined Target Types,  Prev: Retrieving Descriptions,  Up: Target Descriptions
+File: gdb.info,  Node: GDB/MI Target Manipulation,  Next: GDB/MI File Transfer Commands,  Prev: GDB/MI File Commands,  Up: GDB/MI
 
-G.2 Target Description Format
-=============================
+27.20 GDB/MI Target Manipulation Commands
+=========================================
 
-A target description annex is an XML (http://www.w3.org/XML/) document
-which complies with the Document Type Definition provided in the GDB
-sources in `gdb/features/gdb-target.dtd'.  This means you can use
-generally available tools like `xmllint' to check that your feature
-descriptions are well-formed and valid.  However, to help people
-unfamiliar with XML write descriptions for their targets, we also
-describe the grammar here.
-
-   Target descriptions can identify the architecture of the remote
-target and (for some architectures) provide information about custom
-register sets.  They can also identify the OS ABI of the remote target.
-GDB can use this information to autoconfigure for your target, or to
-warn you if you connect to an unsupported target.
-
-   Here is a simple target description:
-
-     <target version="1.0">
-       <architecture>i386:x86-64</architecture>
-     </target>
-
-This minimal description only says that the target uses the x86-64
-architecture.
-
-   A target description has the following overall form, with [ ] marking
-optional elements and ... marking repeatable elements.  The elements
-are explained further below.
-
-     <?xml version="1.0"?>
-     <!DOCTYPE target SYSTEM "gdb-target.dtd">
-     <target version="1.0">
-       [ARCHITECTURE]
-       [OSABI]
-       [COMPATIBLE]
-       [FEATURE...]
-     </target>
-
-The description is generally insensitive to whitespace and line breaks,
-under the usual common-sense rules.  The XML version declaration and
-document type declaration can generally be omitted (GDB does not
-require them), but specifying them may be useful for XML validation
-tools.  The `version' attribute for `<target>' may also be omitted, but
-we recommend including it; if future versions of GDB use an incompatible
-revision of `gdb-target.dtd', they will detect and report the version
-mismatch.
-
-G.2.1 Inclusion
----------------
-
-It can sometimes be valuable to split a target description up into
-several different annexes, either for organizational purposes, or to
-share files between different possible target descriptions.  You can
-divide a description into multiple files by replacing any element of
-the target description with an inclusion directive of the form:
-
-     <xi:include href="DOCUMENT"/>
-
-When GDB encounters an element of this form, it will retrieve the named
-XML DOCUMENT, and replace the inclusion directive with the contents of
-that document.  If the current description was read using `qXfer', then
-so will be the included document; DOCUMENT will be interpreted as the
-name of an annex.  If the current description was read from a file, GDB
-will look for DOCUMENT as a file in the same directory where it found
-the original description.
-
-G.2.2 Architecture
-------------------
-
-An `<architecture>' element has this form:
-
-       <architecture>ARCH</architecture>
-
-   ARCH is one of the architectures from the set accepted by `set
-architecture' (*note Specifying a Debugging Target: Targets.).
-
-G.2.3 OS ABI
-------------
+The '-target-attach' Command
+----------------------------
 
-This optional field was introduced in GDB version 7.0.  Previous
-versions of GDB ignore it.
+Synopsis
+........
 
-   An `<osabi>' element has this form:
+      -target-attach PID | GID | FILE
 
-       <osabi>ABI-NAME</osabi>
+   Attach to a process PID or a file FILE outside of GDB, or a thread
+group GID.  If attaching to a thread group, the id previously returned
+by '-list-thread-groups --available' must be used.
 
-   ABI-NAME is an OS ABI name from the same selection accepted by
-`set osabi' (*note Configuring the Current ABI: ABI.).
+GDB Command
+...........
 
-G.2.4 Compatible Architecture
------------------------------
+The corresponding GDB command is 'attach'.
 
-This optional field was introduced in GDB version 7.0.  Previous
-versions of GDB ignore it.
+Example
+.......
 
-   A `<compatible>' element has this form:
+     (gdb)
+     -target-attach 34
+     =thread-created,id="1"
+     *stopped,thread-id="1",frame={addr="0xb7f7e410",func="bar",args=[]}
+     ^done
+     (gdb)
 
-       <compatible>ARCH</compatible>
+The '-target-detach' Command
+----------------------------
 
-   ARCH is one of the architectures from the set accepted by `set
-architecture' (*note Specifying a Debugging Target: Targets.).
+Synopsis
+........
 
-   A `<compatible>' element is used to specify that the target is able
-to run binaries in some other than the main target architecture given
-by the `<architecture>' element.  For example, on the Cell Broadband
-Engine, the main architecture is `powerpc:common' or
-`powerpc:common64', but the system is able to run binaries in the `spu'
-architecture as well.  The way to describe this capability with
-`<compatible>' is as follows:
+      -target-detach [ PID | GID ]
 
-       <architecture>powerpc:common</architecture>
-       <compatible>spu</compatible>
+   Detach from the remote target which normally resumes its execution.
+If either PID or GID is specified, detaches from either the specified
+process, or specified thread group.  There's no output.
 
-G.2.5 Features
---------------
+GDB Command
+...........
 
-Each `<feature>' describes some logical portion of the target system.
-Features are currently used to describe available CPU registers and the
-types of their contents.  A `<feature>' element has this form:
+The corresponding GDB command is 'detach'.
 
-     <feature name="NAME">
-       [TYPE...]
-       REG...
-     </feature>
+Example
+.......
 
-Each feature's name should be unique within the description.  The name
-of a feature does not matter unless GDB has some special knowledge of
-the contents of that feature; if it does, the feature should have its
-standard name.  *Note Standard Target Features::.
+     (gdb)
+     -target-detach
+     ^done
+     (gdb)
 
-G.2.6 Types
------------
+The '-target-disconnect' Command
+--------------------------------
 
-Any register's value is a collection of bits which GDB must interpret.
-The default interpretation is a two's complement integer, but other
-types can be requested by name in the register description.  Some
-predefined types are provided by GDB (*note Predefined Target Types::),
-and the description can define additional composite types.
-
-   Each type element must have an `id' attribute, which gives a unique
-(within the containing `<feature>') name to the type.  Types must be
-defined before they are used.
-
-   Some targets offer vector registers, which can be treated as arrays
-of scalar elements.  These types are written as `<vector>' elements,
-specifying the array element type, TYPE, and the number of elements,
-COUNT:
-
-     <vector id="ID" type="TYPE" count="COUNT"/>
-
-   If a register's value is usefully viewed in multiple ways, define it
-with a union type containing the useful representations.  The `<union>'
-element contains one or more `<field>' elements, each of which has a
-NAME and a TYPE:
-
-     <union id="ID">
-       <field name="NAME" type="TYPE"/>
-       ...
-     </union>
-
-   If a register's value is composed from several separate values,
-define it with a structure type.  There are two forms of the `<struct>'
-element; a `<struct>' element must either contain only bitfields or
-contain no bitfields.  If the structure contains only bitfields, its
-total size in bytes must be specified, each bitfield must have an
-explicit start and end, and bitfields are automatically assigned an
-integer type.  The field's START should be less than or equal to its
-END, and zero represents the least significant bit.
-
-     <struct id="ID" size="SIZE">
-       <field name="NAME" start="START" end="END"/>
-       ...
-     </struct>
-
-   If the structure contains no bitfields, then each field has an
-explicit type, and no implicit padding is added.
-
-     <struct id="ID">
-       <field name="NAME" type="TYPE"/>
-       ...
-     </struct>
-
-   If a register's value is a series of single-bit flags, define it with
-a flags type.  The `<flags>' element has an explicit SIZE and contains
-one or more `<field>' elements.  Each field has a NAME, a START, and an
-END.  Only single-bit flags are supported.
-
-     <flags id="ID" size="SIZE">
-       <field name="NAME" start="START" end="END"/>
-       ...
-     </flags>
-
-G.2.7 Registers
----------------
-
-Each register is represented as an element with this form:
-
-     <reg name="NAME"
-          bitsize="SIZE"
-          [regnum="NUM"]
-          [save-restore="SAVE-RESTORE"]
-          [type="TYPE"]
-          [group="GROUP"]/>
-
-The components are as follows:
+Synopsis
+........
 
-NAME
-     The register's name; it must be unique within the target
-     description.
-
-BITSIZE
-     The register's size, in bits.
-
-REGNUM
-     The register's number.  If omitted, a register's number is one
-     greater than that of the previous register (either in the current
-     feature or in a preceding feature); the first register in the
-     target description defaults to zero.  This register number is used
-     to read or write the register; e.g. it is used in the remote `p'
-     and `P' packets, and registers appear in the `g' and `G' packets
-     in order of increasing register number.
-
-SAVE-RESTORE
-     Whether the register should be preserved across inferior function
-     calls; this must be either `yes' or `no'.  The default is `yes',
-     which is appropriate for most registers except for some system
-     control registers; this is not related to the target's ABI.
+      -target-disconnect
 
-TYPE
-     The type of the register.  TYPE may be a predefined type, a type
-     defined in the current feature, or one of the special types `int'
-     and `float'.  `int' is an integer type of the correct size for
-     BITSIZE, and `float' is a floating point type (in the
-     architecture's normal floating point format) of the correct size
-     for BITSIZE.  The default is `int'.
+   Disconnect from the remote target.  There's no output and the target
+is generally not resumed.
 
-GROUP
-     The register group to which this register belongs.  GROUP must be
-     either `general', `float', or `vector'.  If no GROUP is specified,
-     GDB will not display the register in `info registers'.
+GDB Command
+...........
 
+The corresponding GDB command is 'disconnect'.
 
-\1f
-File: gdb.info,  Node: Predefined Target Types,  Next: Standard Target Features,  Prev: Target Description Format,  Up: Target Descriptions
+Example
+.......
 
-G.3 Predefined Target Types
-===========================
+     (gdb)
+     -target-disconnect
+     ^done
+     (gdb)
 
-Type definitions in the self-description can build up composite types
-from basic building blocks, but can not define fundamental types.
-Instead, standard identifiers are provided by GDB for the fundamental
-types.  The currently supported types are:
+The '-target-download' Command
+------------------------------
 
-`int8'
-`int16'
-`int32'
-`int64'
-`int128'
-     Signed integer types holding the specified number of bits.
+Synopsis
+........
 
-`uint8'
-`uint16'
-`uint32'
-`uint64'
-`uint128'
-     Unsigned integer types holding the specified number of bits.
+      -target-download
 
-`code_ptr'
-`data_ptr'
-     Pointers to unspecified code and data.  The program counter and
-     any dedicated return address register may be marked as code
-     pointers; printing a code pointer converts it into a symbolic
-     address.  The stack pointer and any dedicated address registers
-     may be marked as data pointers.
+   Loads the executable onto the remote target.  It prints out an update
+message every half second, which includes the fields:
 
-`ieee_single'
-     Single precision IEEE floating point.
+'section'
+     The name of the section.
+'section-sent'
+     The size of what has been sent so far for that section.
+'section-size'
+     The size of the section.
+'total-sent'
+     The total size of what was sent so far (the current and the
+     previous sections).
+'total-size'
+     The size of the overall executable to download.
 
-`ieee_double'
-     Double precision IEEE floating point.
+Each message is sent as status record (*note GDB/MI Output Syntax:
+GDB/MI Output Syntax.).
 
-`arm_fpa_ext'
-     The 12-byte extended precision format used by ARM FPA registers.
+   In addition, it prints the name and size of the sections, as they are
+downloaded.  These messages include the following fields:
 
-`i387_ext'
-     The 10-byte extended precision format used by x87 registers.
+'section'
+     The name of the section.
+'section-size'
+     The size of the section.
+'total-size'
+     The size of the overall executable to download.
 
-`i386_eflags'
-     32bit EFLAGS register used by x86.
+At the end, a summary is printed.
 
-`i386_mxcsr'
-     32bit MXCSR register used by x86.
+GDB Command
+...........
 
+The corresponding GDB command is 'load'.
+
+Example
+.......
+
+Note: each status message appears on a single line.  Here the messages
+have been broken down so that they can fit onto a page.
+
+     (gdb)
+     -target-download
+     +download,{section=".text",section-size="6668",total-size="9880"}
+     +download,{section=".text",section-sent="512",section-size="6668",
+     total-sent="512",total-size="9880"}
+     +download,{section=".text",section-sent="1024",section-size="6668",
+     total-sent="1024",total-size="9880"}
+     +download,{section=".text",section-sent="1536",section-size="6668",
+     total-sent="1536",total-size="9880"}
+     +download,{section=".text",section-sent="2048",section-size="6668",
+     total-sent="2048",total-size="9880"}
+     +download,{section=".text",section-sent="2560",section-size="6668",
+     total-sent="2560",total-size="9880"}
+     +download,{section=".text",section-sent="3072",section-size="6668",
+     total-sent="3072",total-size="9880"}
+     +download,{section=".text",section-sent="3584",section-size="6668",
+     total-sent="3584",total-size="9880"}
+     +download,{section=".text",section-sent="4096",section-size="6668",
+     total-sent="4096",total-size="9880"}
+     +download,{section=".text",section-sent="4608",section-size="6668",
+     total-sent="4608",total-size="9880"}
+     +download,{section=".text",section-sent="5120",section-size="6668",
+     total-sent="5120",total-size="9880"}
+     +download,{section=".text",section-sent="5632",section-size="6668",
+     total-sent="5632",total-size="9880"}
+     +download,{section=".text",section-sent="6144",section-size="6668",
+     total-sent="6144",total-size="9880"}
+     +download,{section=".text",section-sent="6656",section-size="6668",
+     total-sent="6656",total-size="9880"}
+     +download,{section=".init",section-size="28",total-size="9880"}
+     +download,{section=".fini",section-size="28",total-size="9880"}
+     +download,{section=".data",section-size="3156",total-size="9880"}
+     +download,{section=".data",section-sent="512",section-size="3156",
+     total-sent="7236",total-size="9880"}
+     +download,{section=".data",section-sent="1024",section-size="3156",
+     total-sent="7748",total-size="9880"}
+     +download,{section=".data",section-sent="1536",section-size="3156",
+     total-sent="8260",total-size="9880"}
+     +download,{section=".data",section-sent="2048",section-size="3156",
+     total-sent="8772",total-size="9880"}
+     +download,{section=".data",section-sent="2560",section-size="3156",
+     total-sent="9284",total-size="9880"}
+     +download,{section=".data",section-sent="3072",section-size="3156",
+     total-sent="9796",total-size="9880"}
+     ^done,address="0x10004",load-size="9880",transfer-rate="6586",
+     write-rate="429"
+     (gdb)
+
+GDB Command
+...........
 
-\1f
-File: gdb.info,  Node: Standard Target Features,  Prev: Predefined Target Types,  Up: Target Descriptions
+No equivalent.
 
-G.4 Standard Target Features
-============================
+Example
+.......
 
-A target description must contain either no registers or all the
-target's registers.  If the description contains no registers, then GDB
-will assume a default register layout, selected based on the
-architecture.  If the description contains any registers, the default
-layout will not be used; the standard registers must be described in
-the target description, in such a way that GDB can recognize them.
-
-   This is accomplished by giving specific names to feature elements
-which contain standard registers.  GDB will look for features with
-those names and verify that they contain the expected registers; if any
-known feature is missing required registers, or if any required feature
-is missing, GDB will reject the target description.  You can add
-additional registers to any of the standard features -- GDB will
-display them just as if they were added to an unrecognized feature.
-
-   This section lists the known features and their expected contents.
-Sample XML documents for these features are included in the GDB source
-tree, in the directory `gdb/features'.
-
-   Names recognized by GDB should include the name of the company or
-organization which selected the name, and the overall architecture to
-which the feature applies; so e.g. the feature containing ARM core
-registers is named `org.gnu.gdb.arm.core'.
-
-   The names of registers are not case sensitive for the purpose of
-recognizing standard features, but GDB will only display registers
-using the capitalization used in the description.
+N.A.
 
-* Menu:
+The '-target-select' Command
+----------------------------
 
-* ARM Features::
-* i386 Features::
-* MIPS Features::
-* M68K Features::
-* PowerPC Features::
-* TIC6x Features::
+Synopsis
+........
 
-\1f
-File: gdb.info,  Node: ARM Features,  Next: i386 Features,  Up: Standard Target Features
+      -target-select TYPE PARAMETERS ...
+
+   Connect GDB to the remote target.  This command takes two args:
 
-G.4.1 ARM Features
-------------------
+'TYPE'
+     The type of target, for instance 'remote', etc.
+'PARAMETERS'
+     Device names, host names and the like.  *Note Commands for Managing
+     Targets: Target Commands, for more details.
 
-The `org.gnu.gdb.arm.core' feature is required for non-M-profile ARM
-targets.  It should contain registers `r0' through `r13', `sp', `lr',
-`pc', and `cpsr'.
+   The output is a connection notification, followed by the address at
+which the target program is, in the following form:
 
-   For M-profile targets (e.g. Cortex-M3), the `org.gnu.gdb.arm.core'
-feature is replaced by `org.gnu.gdb.arm.m-profile'.  It should contain
-registers `r0' through `r13', `sp', `lr', `pc', and `xpsr'.
+     ^connected,addr="ADDRESS",func="FUNCTION NAME",
+       args=[ARG LIST]
 
-   The `org.gnu.gdb.arm.fpa' feature is optional.  If present, it
-should contain registers `f0' through `f7' and `fps'.
+GDB Command
+...........
 
-   The `org.gnu.gdb.xscale.iwmmxt' feature is optional.  If present, it
-should contain at least registers `wR0' through `wR15' and `wCGR0'
-through `wCGR3'.  The `wCID', `wCon', `wCSSF', and `wCASF' registers
-are optional.
+The corresponding GDB command is 'target'.
 
-   The `org.gnu.gdb.arm.vfp' feature is optional.  If present, it
-should contain at least registers `d0' through `d15'.  If they are
-present, `d16' through `d31' should also be included.  GDB will
-synthesize the single-precision registers from halves of the
-double-precision registers.
+Example
+.......
 
-   The `org.gnu.gdb.arm.neon' feature is optional.  It does not need to
-contain registers; it instructs GDB to display the VFP double-precision
-registers as vectors and to synthesize the quad-precision registers
-from pairs of double-precision registers.  If this feature is present,
-`org.gnu.gdb.arm.vfp' must also be present and include 32
-double-precision registers.
+     (gdb)
+     -target-select remote /dev/ttya
+     ^connected,addr="0xfe00a300",func="??",args=[]
+     (gdb)
 
 \1f
-File: gdb.info,  Node: i386 Features,  Next: MIPS Features,  Prev: ARM Features,  Up: Standard Target Features
+File: gdb.info,  Node: GDB/MI File Transfer Commands,  Next: GDB/MI Ada Exceptions Commands,  Prev: GDB/MI Target Manipulation,  Up: GDB/MI
+
+27.21 GDB/MI File Transfer Commands
+===================================
+
+The '-target-file-put' Command
+------------------------------
+
+Synopsis
+........
+
+      -target-file-put HOSTFILE TARGETFILE
 
-G.4.2 i386 Features
--------------------
+   Copy file HOSTFILE from the host system (the machine running GDB) to
+TARGETFILE on the target system.
 
-The `org.gnu.gdb.i386.core' feature is required for i386/amd64 targets.
-It should describe the following registers:
+GDB Command
+...........
+
+The corresponding GDB command is 'remote put'.
+
+Example
+.......
+
+     (gdb)
+     -target-file-put localfile remotefile
+     ^done
+     (gdb)
 
-   - `eax' through `edi' plus `eip' for i386
+The '-target-file-get' Command
+------------------------------
+
+Synopsis
+........
 
-   - `rax' through `r15' plus `rip' for amd64
+      -target-file-get TARGETFILE HOSTFILE
 
-   - `eflags', `cs', `ss', `ds', `es', `fs', `gs'
+   Copy file TARGETFILE from the target system to HOSTFILE on the host
+system.
+
+GDB Command
+...........
 
-   - `st0' through `st7'
+The corresponding GDB command is 'remote get'.
 
-   - `fctrl', `fstat', `ftag', `fiseg', `fioff', `foseg', `fooff' and
-     `fop'
+Example
+.......
 
-   The register sets may be different, depending on the target.
+     (gdb)
+     -target-file-get remotefile localfile
+     ^done
+     (gdb)
 
-   The `org.gnu.gdb.i386.sse' feature is optional.  It should describe
-registers:
+The '-target-file-delete' Command
+---------------------------------
 
-   - `xmm0' through `xmm7' for i386
+Synopsis
+........
 
-   - `xmm0' through `xmm15' for amd64
+      -target-file-delete TARGETFILE
 
-   - `mxcsr'
+   Delete TARGETFILE from the target system.
 
-   The `org.gnu.gdb.i386.avx' feature is optional and requires the
-`org.gnu.gdb.i386.sse' feature.  It should describe the upper 128 bits
-of YMM registers:
+GDB Command
+...........
 
-   - `ymm0h' through `ymm7h' for i386
+The corresponding GDB command is 'remote delete'.
 
-   - `ymm0h' through `ymm15h' for amd64
+Example
+.......
 
-   The `org.gnu.gdb.i386.linux' feature is optional.  It should
-describe a single register, `orig_eax'.
+     (gdb)
+     -target-file-delete remotefile
+     ^done
+     (gdb)
 
 \1f
-File: gdb.info,  Node: MIPS Features,  Next: M68K Features,  Prev: i386 Features,  Up: Standard Target Features
+File: gdb.info,  Node: GDB/MI Ada Exceptions Commands,  Next: GDB/MI Support Commands,  Prev: GDB/MI File Transfer Commands,  Up: GDB/MI
+
+27.22 Ada Exceptions GDB/MI Commands
+====================================
+
+The '-info-ada-exceptions' Command
+----------------------------------
+
+Synopsis
+........
+
+      -info-ada-exceptions [ REGEXP]
+
+   List all Ada exceptions defined within the program being debugged.
+With a regular expression REGEXP, only those exceptions whose names
+match REGEXP are listed.
+
+GDB Command
+...........
 
-G.4.3 MIPS Features
--------------------
+The corresponding GDB command is 'info exceptions'.
 
-The `org.gnu.gdb.mips.cpu' feature is required for MIPS targets.  It
-should contain registers `r0' through `r31', `lo', `hi', and `pc'.
-They may be 32-bit or 64-bit depending on the target.
+Result
+......
+
+The result is a table of Ada exceptions.  The following columns are
+defined for each exception:
+
+'name'
+     The name of the exception.
+
+'address'
+     The address of the exception.
 
-   The `org.gnu.gdb.mips.cp0' feature is also required.  It should
-contain at least the `status', `badvaddr', and `cause' registers.  They
-may be 32-bit or 64-bit depending on the target.
+Example
+.......
 
-   The `org.gnu.gdb.mips.fpu' feature is currently required, though it
-may be optional in a future version of GDB.  It should contain
-registers `f0' through `f31', `fcsr', and `fir'.  They may be 32-bit or
-64-bit depending on the target.
+     -info-ada-exceptions aint
+     ^done,ada-exceptions={nr_rows="2",nr_cols="2",
+     hdr=[{width="1",alignment="-1",col_name="name",colhdr="Name"},
+     {width="1",alignment="-1",col_name="address",colhdr="Address"}],
+     body=[{name="constraint_error",address="0x0000000000613da0"},
+     {name="const.aint_global_e",address="0x0000000000613b00"}]}
 
-   The `org.gnu.gdb.mips.dsp' feature is optional.  It should contain
-registers `hi1' through `hi3', `lo1' through `lo3', and `dspctl'.  The
-`dspctl' register should be 32-bit and the rest may be 32-bit or 64-bit
-depending on the target.
+Catching Ada Exceptions
+-----------------------
 
-   The `org.gnu.gdb.mips.linux' feature is optional.  It should contain
-a single register, `restart', which is used by the Linux kernel to
-control restartable syscalls.
+The commands describing how to ask GDB to stop when a program raises an
+exception are described at *note Ada Exception GDB/MI Catchpoint
+Commands::.
 
 \1f
-File: gdb.info,  Node: M68K Features,  Next: PowerPC Features,  Prev: MIPS Features,  Up: Standard Target Features
+File: gdb.info,  Node: GDB/MI Support Commands,  Next: GDB/MI Miscellaneous Commands,  Prev: GDB/MI Ada Exceptions Commands,  Up: GDB/MI
+
+27.23 GDB/MI Support Commands
+=============================
+
+Since new commands and features get regularly added to GDB/MI, some
+commands are available to help front-ends query the debugger about
+support for these capabilities.  Similarly, it is also possible to query
+GDB about target support of certain features.
+
+The '-info-gdb-mi-command' Command
+----------------------------------
 
-G.4.4 M68K Features
--------------------
+Synopsis
+........
 
-``org.gnu.gdb.m68k.core''
-``org.gnu.gdb.coldfire.core''
-``org.gnu.gdb.fido.core''
-     One of those features must be always present.  The feature that is
-     present determines which flavor of m68k is used.  The feature that
-     is present should contain registers `d0' through `d7', `a0'
-     through `a5', `fp', `sp', `ps' and `pc'.
+      -info-gdb-mi-command CMD_NAME
 
-``org.gnu.gdb.coldfire.fp''
-     This feature is optional.  If present, it should contain registers
-     `fp0' through `fp7', `fpcontrol', `fpstatus' and `fpiaddr'.
+   Query support for the GDB/MI command named CMD_NAME.
+
+   Note that the dash ('-') starting all GDB/MI commands is technically
+not part of the command name (*note GDB/MI Input Syntax::), and thus
+should be omitted in CMD_NAME.  However, for ease of use, this command
+also accepts the form with the leading dash.
+
+GDB Command
+...........
+
+There is no corresponding GDB command.
+
+Result
+......
+
+The result is a tuple.  There is currently only one field:
+
+'exists'
+     This field is equal to '"true"' if the GDB/MI command exists,
+     '"false"' otherwise.
+
+Example
+.......
+
+Here is an example where the GDB/MI command does not exist:
+
+     -info-gdb-mi-command unsupported-command
+     ^done,command={exists="false"}
+
+And here is an example where the GDB/MI command is known to the
+debugger:
+
+     -info-gdb-mi-command symbol-list-lines
+     ^done,command={exists="true"}
+
+The '-list-features' Command
+----------------------------
+
+Returns a list of particular features of the MI protocol that this
+version of gdb implements.  A feature can be a command, or a new field
+in an output of some command, or even an important bugfix.  While a
+frontend can sometimes detect presence of a feature at runtime, it is
+easier to perform detection at debugger startup.
+
+   The command returns a list of strings, with each string naming an
+available feature.  Each returned string is just a name, it does not
+have any internal structure.  The list of possible feature names is
+given below.
+
+   Example output:
+
+     (gdb) -list-features
+     ^done,result=["feature1","feature2"]
+
+   The current list of features is:
+
+'frozen-varobjs'
+     Indicates support for the '-var-set-frozen' command, as well as
+     possible presense of the 'frozen' field in the output of
+     '-varobj-create'.
+'pending-breakpoints'
+     Indicates support for the '-f' option to the '-break-insert'
+     command.
+'python'
+     Indicates Python scripting support, Python-based pretty-printing
+     commands, and possible presence of the 'display_hint' field in the
+     output of '-var-list-children'
+'thread-info'
+     Indicates support for the '-thread-info' command.
+'data-read-memory-bytes'
+     Indicates support for the '-data-read-memory-bytes' and the
+     '-data-write-memory-bytes' commands.
+'breakpoint-notifications'
+     Indicates that changes to breakpoints and breakpoints created via
+     the CLI will be announced via async records.
+'ada-task-info'
+     Indicates support for the '-ada-task-info' command.
+'language-option'
+     Indicates that all GDB/MI commands accept the '--language' option
+     (*note Context management::).
+'info-gdb-mi-command'
+     Indicates support for the '-info-gdb-mi-command' command.
+'undefined-command-error-code'
+     Indicates support for the "undefined-command" error code in error
+     result records, produced when trying to execute an undefined GDB/MI
+     command (*note GDB/MI Result Records::).
+'exec-run-start-option'
+     Indicates that the '-exec-run' command supports the '--start'
+     option (*note GDB/MI Program Execution::).
+
+The '-list-target-features' Command
+-----------------------------------
+
+Returns a list of particular features that are supported by the target.
+Those features affect the permitted MI commands, but unlike the features
+reported by the '-list-features' command, the features depend on which
+target GDB is using at the moment.  Whenever a target can change, due to
+commands such as '-target-select', '-target-attach' or '-exec-run', the
+list of target features may change, and the frontend should obtain it
+again.  Example output:
+
+     (gdb) -list-target-features
+     ^done,result=["async"]
+
+   The current list of features is:
+
+'async'
+     Indicates that the target is capable of asynchronous command
+     execution, which means that GDB will accept further commands while
+     the target is running.
+
+'reverse'
+     Indicates that the target is capable of reverse execution.  *Note
+     Reverse Execution::, for more information.
 
 \1f
-File: gdb.info,  Node: PowerPC Features,  Next: TIC6x Features,  Prev: M68K Features,  Up: Standard Target Features
+File: gdb.info,  Node: GDB/MI Miscellaneous Commands,  Prev: GDB/MI Support Commands,  Up: GDB/MI
+
+27.24 Miscellaneous GDB/MI Commands
+===================================
+
+The '-gdb-exit' Command
+-----------------------
+
+Synopsis
+........
 
-G.4.5 PowerPC Features
+      -gdb-exit
+
+   Exit GDB immediately.
+
+GDB Command
+...........
+
+Approximately corresponds to 'quit'.
+
+Example
+.......
+
+     (gdb)
+     -gdb-exit
+     ^exit
+
+The '-gdb-set' Command
 ----------------------
 
-The `org.gnu.gdb.power.core' feature is required for PowerPC targets.
-It should contain registers `r0' through `r31', `pc', `msr', `cr',
-`lr', `ctr', and `xer'.  They may be 32-bit or 64-bit depending on the
+Synopsis
+........
+
+      -gdb-set
+
+   Set an internal GDB variable.
+
+GDB Command
+...........
+
+The corresponding GDB command is 'set'.
+
+Example
+.......
+
+     (gdb)
+     -gdb-set $foo=3
+     ^done
+     (gdb)
+
+The '-gdb-show' Command
+-----------------------
+
+Synopsis
+........
+
+      -gdb-show
+
+   Show the current value of a GDB variable.
+
+GDB Command
+...........
+
+The corresponding GDB command is 'show'.
+
+Example
+.......
+
+     (gdb)
+     -gdb-show annotate
+     ^done,value="0"
+     (gdb)
+
+The '-gdb-version' Command
+--------------------------
+
+Synopsis
+........
+
+      -gdb-version
+
+   Show version information for GDB.  Used mostly in testing.
+
+GDB Command
+...........
+
+The GDB equivalent is 'show version'.  GDB by default shows this
+information when you start an interactive session.
+
+Example
+.......
+
+     (gdb)
+     -gdb-version
+     ~GNU gdb 5.2.1
+     ~Copyright 2000 Free Software Foundation, Inc.
+     ~GDB is free software, covered by the GNU General Public License, and
+     ~you are welcome to change it and/or distribute copies of it under
+     ~ certain conditions.
+     ~Type "show copying" to see the conditions.
+     ~There is absolutely no warranty for GDB.  Type "show warranty" for
+     ~ details.
+     ~This GDB was configured as
+      "--host=sparc-sun-solaris2.5.1 --target=ppc-eabi".
+     ^done
+     (gdb)
+
+The '-list-thread-groups' Command
+---------------------------------
+
+Synopsis
+--------
+
+     -list-thread-groups [ --available ] [ --recurse 1 ] [ GROUP ... ]
+
+   Lists thread groups (*note Thread groups::).  When a single thread
+group is passed as the argument, lists the children of that group.  When
+several thread group are passed, lists information about those thread
+groups.  Without any parameters, lists information about all top-level
+thread groups.
+
+   Normally, thread groups that are being debugged are reported.  With
+the '--available' option, GDB reports thread groups available on the
 target.
 
-   The `org.gnu.gdb.power.fpu' feature is optional.  It should contain
-registers `f0' through `f31' and `fpscr'.
+   The output of this command may have either a 'threads' result or a
+'groups' result.  The 'thread' result has a list of tuples as value,
+with each tuple describing a thread (*note GDB/MI Thread Information::).
+The 'groups' result has a list of tuples as value, each tuple describing
+a thread group.  If top-level groups are requested (that is, no
+parameter is passed), or when several groups are passed, the output
+always has a 'groups' result.  The format of the 'group' result is
+described below.
+
+   To reduce the number of roundtrips it's possible to list thread
+groups together with their children, by passing the '--recurse' option
+and the recursion depth.  Presently, only recursion depth of 1 is
+permitted.  If this option is present, then every reported thread group
+will also include its children, either as 'group' or 'threads' field.
+
+   In general, any combination of option and parameters is permitted,
+with the following caveats:
+
+   * When a single thread group is passed, the output will typically be
+     the 'threads' result.  Because threads may not contain anything,
+     the 'recurse' option will be ignored.
+
+   * When the '--available' option is passed, limited information may be
+     available.  In particular, the list of threads of a process might
+     be inaccessible.  Further, specifying specific thread groups might
+     not give any performance advantage over listing all thread groups.
+     The frontend should assume that '-list-thread-groups --available'
+     is always an expensive operation and cache the results.
+
+   The 'groups' result is a list of tuples, where each tuple may have
+the following fields:
+
+'id'
+     Identifier of the thread group.  This field is always present.  The
+     identifier is an opaque string; frontends should not try to convert
+     it to an integer, even though it might look like one.
+
+'type'
+     The type of the thread group.  At present, only 'process' is a
+     valid type.
+
+'pid'
+     The target-specific process identifier.  This field is only present
+     for thread groups of type 'process' and only if the process exists.
+
+'exit-code'
+     The exit code of this group's last exited thread, formatted in
+     octal.  This field is only present for thread groups of type
+     'process' and only if the process is not running.
+
+'num_children'
+     The number of children this thread group has.  This field may be
+     absent for an available thread group.
+
+'threads'
+     This field has a list of tuples as value, each tuple describing a
+     thread.  It may be present if the '--recurse' option is specified,
+     and it's actually possible to obtain the threads.
+
+'cores'
+     This field is a list of integers, each identifying a core that one
+     thread of the group is running on.  This field may be absent if
+     such information is not available.
+
+'executable'
+     The name of the executable file that corresponds to this thread
+     group.  The field is only present for thread groups of type
+     'process', and only if there is a corresponding executable file.
+
+Example
+-------
+
+     gdb
+     -list-thread-groups
+     ^done,groups=[{id="17",type="process",pid="yyy",num_children="2"}]
+     -list-thread-groups 17
+     ^done,threads=[{id="2",target-id="Thread 0xb7e14b90 (LWP 21257)",
+        frame={level="0",addr="0xffffe410",func="__kernel_vsyscall",args=[]},state="running"},
+     {id="1",target-id="Thread 0xb7e156b0 (LWP 21254)",
+        frame={level="0",addr="0x0804891f",func="foo",args=[{name="i",value="10"}],
+                file="/tmp/a.c",fullname="/tmp/a.c",line="158"},state="running"}]]
+     -list-thread-groups --available
+     ^done,groups=[{id="17",type="process",pid="yyy",num_children="2",cores=[1,2]}]
+     -list-thread-groups --available --recurse 1
+      ^done,groups=[{id="17", types="process",pid="yyy",num_children="2",cores=[1,2],
+                     threads=[{id="1",target-id="Thread 0xb7e14b90",cores=[1]},
+                              {id="2",target-id="Thread 0xb7e14b90",cores=[2]}]},..]
+     -list-thread-groups --available --recurse 1 17 18
+     ^done,groups=[{id="17", types="process",pid="yyy",num_children="2",cores=[1,2],
+                    threads=[{id="1",target-id="Thread 0xb7e14b90",cores=[1]},
+                             {id="2",target-id="Thread 0xb7e14b90",cores=[2]}]},...]
+
+The '-info-os' Command
+----------------------
 
-   The `org.gnu.gdb.power.altivec' feature is optional.  It should
-contain registers `vr0' through `vr31', `vscr', and `vrsave'.
+Synopsis
+........
 
-   The `org.gnu.gdb.power.vsx' feature is optional.  It should contain
-registers `vs0h' through `vs31h'.  GDB will combine these registers
-with the floating point registers (`f0' through `f31') and the altivec
-registers (`vr0' through `vr31') to present the 128-bit wide registers
-`vs0' through `vs63', the set of vector registers for POWER7.
+     -info-os [ TYPE ]
 
-   The `org.gnu.gdb.power.spe' feature is optional.  It should contain
-registers `ev0h' through `ev31h', `acc', and `spefscr'.  SPE targets
-should provide 32-bit registers in `org.gnu.gdb.power.core' and provide
-the upper halves in `ev0h' through `ev31h'.  GDB will combine these to
-present registers `ev0' through `ev31' to the user.
+   If no argument is supplied, the command returns a table of available
+operating-system-specific information types.  If one of these types is
+supplied as an argument TYPE, then the command returns a table of data
+of that type.
 
-\1f
-File: gdb.info,  Node: TIC6x Features,  Prev: PowerPC Features,  Up: Standard Target Features
+   The types of information available depend on the target operating
+system.
 
-G.4.6 TMS320C6x Features
-------------------------
+GDB Command
+...........
+
+The corresponding GDB command is 'info os'.
+
+Example
+.......
+
+When run on a GNU/Linux system, the output will look something like
+this:
+
+     gdb
+     -info-os
+     ^done,OSDataTable={nr_rows="9",nr_cols="3",
+     hdr=[{width="10",alignment="-1",col_name="col0",colhdr="Type"},
+          {width="10",alignment="-1",col_name="col1",colhdr="Description"},
+          {width="10",alignment="-1",col_name="col2",colhdr="Title"}],
+     body=[item={col0="processes",col1="Listing of all processes",
+                 col2="Processes"},
+           item={col0="procgroups",col1="Listing of all process groups",
+                 col2="Process groups"},
+           item={col0="threads",col1="Listing of all threads",
+                 col2="Threads"},
+           item={col0="files",col1="Listing of all file descriptors",
+                 col2="File descriptors"},
+           item={col0="sockets",col1="Listing of all internet-domain sockets",
+                 col2="Sockets"},
+           item={col0="shm",col1="Listing of all shared-memory regions",
+                 col2="Shared-memory regions"},
+           item={col0="semaphores",col1="Listing of all semaphores",
+                 col2="Semaphores"},
+           item={col0="msg",col1="Listing of all message queues",
+                 col2="Message queues"},
+           item={col0="modules",col1="Listing of all loaded kernel modules",
+                 col2="Kernel modules"}]}
+     gdb
+     -info-os processes
+     ^done,OSDataTable={nr_rows="190",nr_cols="4",
+     hdr=[{width="10",alignment="-1",col_name="col0",colhdr="pid"},
+          {width="10",alignment="-1",col_name="col1",colhdr="user"},
+          {width="10",alignment="-1",col_name="col2",colhdr="command"},
+          {width="10",alignment="-1",col_name="col3",colhdr="cores"}],
+     body=[item={col0="1",col1="root",col2="/sbin/init",col3="0"},
+           item={col0="2",col1="root",col2="[kthreadd]",col3="1"},
+           item={col0="3",col1="root",col2="[ksoftirqd/0]",col3="0"},
+           ...
+           item={col0="26446",col1="stan",col2="bash",col3="0"},
+           item={col0="28152",col1="stan",col2="bash",col3="1"}]}
+     (gdb)
+
+   (Note that the MI output here includes a '"Title"' column that does
+not appear in command-line 'info os'; this column is useful for MI
+clients that want to enumerate the types of data, such as in a popup
+menu, but is needless clutter on the command line, and 'info os' omits
+it.)
+
+The '-add-inferior' Command
+---------------------------
+
+Synopsis
+--------
+
+     -add-inferior
+
+   Creates a new inferior (*note Inferiors and Programs::).  The created
+inferior is not associated with any executable.  Such association may be
+established with the '-file-exec-and-symbols' command (*note GDB/MI File
+Commands::).  The command response has a single field, 'inferior', whose
+value is the identifier of the thread group corresponding to the new
+inferior.
+
+Example
+-------
+
+     gdb
+     -add-inferior
+     ^done,inferior="i3"
+
+The '-interpreter-exec' Command
+-------------------------------
+
+Synopsis
+--------
+
+     -interpreter-exec INTERPRETER COMMAND
+
+   Execute the specified COMMAND in the given INTERPRETER.
+
+GDB Command
+-----------
+
+The corresponding GDB command is 'interpreter-exec'.
+
+Example
+-------
+
+     (gdb)
+     -interpreter-exec console "break main"
+     &"During symbol reading, couldn't parse type; debugger out of date?.\n"
+     &"During symbol reading, bad structure-type format.\n"
+     ~"Breakpoint 1 at 0x8074fc6: file ../../src/gdb/main.c, line 743.\n"
+     ^done
+     (gdb)
+
+The '-inferior-tty-set' Command
+-------------------------------
+
+Synopsis
+--------
+
+     -inferior-tty-set /dev/pts/1
+
+   Set terminal for future runs of the program being debugged.
+
+GDB Command
+-----------
+
+The corresponding GDB command is 'set inferior-tty' /dev/pts/1.
+
+Example
+-------
+
+     (gdb)
+     -inferior-tty-set /dev/pts/1
+     ^done
+     (gdb)
+
+The '-inferior-tty-show' Command
+--------------------------------
+
+Synopsis
+--------
+
+     -inferior-tty-show
+
+   Show terminal for future runs of program being debugged.
+
+GDB Command
+-----------
+
+The corresponding GDB command is 'show inferior-tty'.
+
+Example
+-------
+
+     (gdb)
+     -inferior-tty-set /dev/pts/1
+     ^done
+     (gdb)
+     -inferior-tty-show
+     ^done,inferior_tty_terminal="/dev/pts/1"
+     (gdb)
+
+The '-enable-timings' Command
+-----------------------------
+
+Synopsis
+--------
+
+     -enable-timings [yes | no]
 
-The `org.gnu.gdb.tic6x.core' feature is required for TMS320C6x targets.
-It should contain registers `A0' through `A15', registers `B0' through
-`B15', `CSR' and `PC'.
+   Toggle the printing of the wallclock, user and system times for an MI
+command as a field in its output.  This command is to help frontend
+developers optimize the performance of their code.  No argument is
+equivalent to 'yes'.
 
-   The `org.gnu.gdb.tic6x.gp' feature is optional.  It should contain
-registers `A16' through `A31' and `B16' through `B31'.
+GDB Command
+-----------
 
-   The `org.gnu.gdb.tic6x.c6xp' feature is optional.  It should contain
-registers `TSR', `ILC' and `RILC'.
+No equivalent.
+
+Example
+-------
+
+     (gdb)
+     -enable-timings
+     ^done
+     (gdb)
+     -break-insert main
+     ^done,bkpt={number="1",type="breakpoint",disp="keep",enabled="y",
+     addr="0x080484ed",func="main",file="myprog.c",
+     fullname="/home/nickrob/myprog.c",line="73",thread-groups=["i1"],
+     times="0"},
+     time={wallclock="0.05185",user="0.00800",system="0.00000"}
+     (gdb)
+     -enable-timings no
+     ^done
+     (gdb)
+     -exec-run
+     ^running
+     (gdb)
+     *stopped,reason="breakpoint-hit",disp="keep",bkptno="1",thread-id="0",
+     frame={addr="0x080484ed",func="main",args=[{name="argc",value="1"},
+     {name="argv",value="0xbfb60364"}],file="myprog.c",
+     fullname="/home/nickrob/myprog.c",line="73"}
+     (gdb)
 
 \1f
-File: gdb.info,  Node: Operating System Information,  Next: Trace File Format,  Prev: Target Descriptions,  Up: Top
+File: gdb.info,  Node: Annotations,  Next: JIT Interface,  Prev: GDB/MI,  Up: Top
+
+28 GDB Annotations
+******************
 
-Appendix H Operating System Information
-***************************************
+This chapter describes annotations in GDB.  Annotations were designed to
+interface GDB to graphical user interfaces or other similar programs
+which want to interact with GDB at a relatively high level.
+
+   The annotation mechanism has largely been superseded by GDB/MI (*note
+GDB/MI::).
 
 * Menu:
 
-* Process list::
+* Annotations Overview::  What annotations are; the general syntax.
+* Server Prefix::       Issuing a command without affecting user state.
+* Prompting::           Annotations marking GDB's need for input.
+* Errors::              Annotations for error messages.
+* Invalidation::        Some annotations describe things now invalid.
+* Annotations for Running::
+                        Whether the program is running, how it stopped, etc.
+* Source Annotations::  Annotations describing source code.
+
+\1f
+File: gdb.info,  Node: Annotations Overview,  Next: Server Prefix,  Up: Annotations
 
-   Users of GDB often wish to obtain information about the state of the
-operating system running on the target--for example the list of
-processes, or the list of open files.  This section describes the
-mechanism that makes it possible.  This mechanism is similar to the
-target features mechanism (*note Target Descriptions::), but focuses on
-a different aspect of target.
+28.1 What is an Annotation?
+===========================
 
-   Operating system information is retrived from the target via the
-remote protocol, using `qXfer' requests (*note qXfer osdata read::).
-The object name in the request should be `osdata', and the ANNEX
-identifies the data to be fetched.
+Annotations start with a newline character, two 'control-z' characters,
+and the name of the annotation.  If there is no additional information
+associated with this annotation, the name of the annotation is followed
+immediately by a newline.  If there is additional information, the name
+of the annotation is followed by a space, the additional information,
+and a newline.  The additional information cannot contain newline
+characters.
+
+   Any output not beginning with a newline and two 'control-z'
+characters denotes literal output from GDB.  Currently there is no need
+for GDB to output a newline followed by two 'control-z' characters, but
+if there was such a need, the annotations could be extended with an
+'escape' annotation which means those three characters as output.
+
+   The annotation LEVEL, which is specified using the '--annotate'
+command line option (*note Mode Options::), controls how much
+information GDB prints together with its prompt, values of expressions,
+source lines, and other types of output.  Level 0 is for no annotations,
+level 1 is for use when GDB is run as a subprocess of GNU Emacs, level 3
+is the maximum annotation suitable for programs that control GDB, and
+level 2 annotations have been made obsolete (*note Limitations of the
+Annotation Interface: (annotate)Limitations.).
+
+'set annotate LEVEL'
+     The GDB command 'set annotate' sets the level of annotations to the
+     specified LEVEL.
+
+'show annotate'
+     Show the current annotation level.
+
+   This chapter describes level 3 annotations.
+
+   A simple example of starting up GDB with annotations is:
+
+     $ gdb --annotate=3
+     GNU gdb 6.0
+     Copyright 2003 Free Software Foundation, Inc.
+     GDB is free software, covered by the GNU General Public License,
+     and you are welcome to change it and/or distribute copies of it
+     under certain conditions.
+     Type "show copying" to see the conditions.
+     There is absolutely no warranty for GDB.  Type "show warranty"
+     for details.
+     This GDB was configured as "i386-pc-linux-gnu"
+
+     ^Z^Zpre-prompt
+     (gdb)
+     ^Z^Zprompt
+     quit
+
+     ^Z^Zpost-prompt
+     $
+
+   Here 'quit' is input to GDB; the rest is output from GDB.  The three
+lines beginning '^Z^Z' (where '^Z' denotes a 'control-z' character) are
+annotations; the rest is output from GDB.
 
 \1f
-File: gdb.info,  Node: Process list,  Up: Operating System Information
-
-H.1 Process list
-================
-
-When requesting the process list, the ANNEX field in the `qXfer'
-request should be `processes'.  The returned data is an XML document.
-The formal syntax of this document is defined in
-`gdb/features/osdata.dtd'.
-
-   An example document is:
-
-     <?xml version="1.0"?>
-     <!DOCTYPE target SYSTEM "osdata.dtd">
-     <osdata type="processes">
-       <item>
-         <column name="pid">1</column>
-         <column name="user">root</column>
-         <column name="command">/sbin/init</column>
-         <column name="cores">1,2,3</column>
-       </item>
-     </osdata>
-
-   Each item should include a column whose name is `pid'.  The value of
-that column should identify the process on the target.  The `user' and
-`command' columns are optional, and will be displayed by GDB.  The
-`cores' column, if present, should contain a comma-separated list of
-cores that this process is running on.  Target may provide additional
-columns, which GDB currently ignores.
+File: gdb.info,  Node: Server Prefix,  Next: Prompting,  Prev: Annotations Overview,  Up: Annotations
+
+28.2 The Server Prefix
+======================
+
+If you prefix a command with 'server ' then it will not affect the
+command history, nor will it affect GDB's notion of which command to
+repeat if <RET> is pressed on a line by itself.  This means that
+commands can be run behind a user's back by a front-end in a transparent
+manner.
+
+   The 'server ' prefix does not affect the recording of values into the
+value history; to print a value without recording it into the value
+history, use the 'output' command instead of the 'print' command.
+
+   Using this prefix also disables confirmation requests (*note
+confirmation requests::).
 
 \1f
-File: gdb.info,  Node: Trace File Format,  Next: Index Section Format,  Prev: Operating System Information,  Up: Top
+File: gdb.info,  Node: Prompting,  Next: Errors,  Prev: Server Prefix,  Up: Annotations
 
-Appendix I Trace File Format
-****************************
+28.3 Annotation for GDB Input
+=============================
+
+When GDB prompts for input, it annotates this fact so it is possible to
+know when to send output, when the output from a given command is over,
+etc.
+
+   Different kinds of input each have a different "input type".  Each
+input type has three annotations: a 'pre-' annotation, which denotes the
+beginning of any prompt which is being output, a plain annotation, which
+denotes the end of the prompt, and then a 'post-' annotation which
+denotes the end of any echo which may (or may not) be associated with
+the input.  For example, the 'prompt' input type features the following
+annotations:
+
+     ^Z^Zpre-prompt
+     ^Z^Zprompt
+     ^Z^Zpost-prompt
+
+   The input types are
+
+'prompt'
+     When GDB is prompting for a command (the main GDB prompt).
+
+'commands'
+     When GDB prompts for a set of commands, like in the 'commands'
+     command.  The annotations are repeated for each command which is
+     input.
+
+'overload-choice'
+     When GDB wants the user to select between various overloaded
+     functions.
+
+'query'
+     When GDB wants the user to confirm a potentially dangerous
+     operation.
+
+'prompt-for-continue'
+     When GDB is asking the user to press return to continue.  Note:
+     Don't expect this to work well; instead use 'set height 0' to
+     disable prompting.  This is because the counting of lines is buggy
+     in the presence of annotations.
+
+\1f
+File: gdb.info,  Node: Errors,  Next: Invalidation,  Prev: Prompting,  Up: Annotations
 
-The trace file comes in three parts: a header, a textual description
-section, and a trace frame section with binary data.
+28.4 Errors
+===========
+
+     ^Z^Zquit
 
-   The header has the form `\x7fTRACE0\n'.  The first byte is `0x7f' so
-as to indicate that the file contains binary data, while the `0' is a
-version number that may have different values in the future.
+   This annotation occurs right before GDB responds to an interrupt.
 
-   The description section consists of multiple lines of ASCII text
-separated by newline characters (`0xa').  The lines may include a
-variety of optional descriptive or context-setting information, such as
-tracepoint definitions or register set size.  GDB will ignore any line
-that it does not recognize.  An empty line marks the end of this
-section.
+     ^Z^Zerror
 
-   The trace frame section consists of a number of consecutive frames.
-Each frame begins with a two-byte tracepoint number, followed by a
-four-byte size giving the amount of data in the frame.  The data in the
-frame consists of a number of blocks, each introduced by a character
-indicating its type (at least register, memory, and trace state
-variable).  The data in this section is raw binary, not a hexadecimal
-or other encoding; its endianness matches the target's endianness.
+   This annotation occurs right before GDB responds to an error.
 
-`R BYTES'
-     Register block.  The number and ordering of bytes matches that of a
-     `g' packet in the remote protocol.  Note that these are the actual
-     bytes, in target order and GDB register order, not a hexadecimal
-     encoding.
+   Quit and error annotations indicate that any annotations which GDB
+was in the middle of may end abruptly.  For example, if a
+'value-history-begin' annotation is followed by a 'error', one cannot
+expect to receive the matching 'value-history-end'.  One cannot expect
+not to receive it either, however; an error annotation does not
+necessarily mean that GDB is immediately returning all the way to the
+top level.
 
-`M ADDRESS LENGTH BYTES...'
-     Memory block.  This is a contiguous block of memory, at the 8-byte
-     address ADDRESS, with a 2-byte length LENGTH, followed by LENGTH
-     bytes.
+   A quit or error annotation may be preceded by
 
-`V NUMBER VALUE'
-     Trace state variable block.  This records the 8-byte signed value
-     VALUE of trace state variable numbered NUMBER.
+     ^Z^Zerror-begin
 
+   Any output between that and the quit or error annotation is the error
+message.
 
-   Future enhancements of the trace file format may include additional
-types of blocks.
+   Warning messages are not yet annotated.
 
 \1f
-File: gdb.info,  Node: Index Section Format,  Next: Copying,  Prev: Trace File Format,  Up: Top
+File: gdb.info,  Node: Invalidation,  Next: Annotations for Running,  Prev: Errors,  Up: Annotations
+
+28.5 Invalidation Notices
+=========================
 
-Appendix J `.gdb_index' section format
-**************************************
+The following annotations say that certain pieces of state may have
+changed.
 
-This section documents the index section that is created by `save
-gdb-index' (*note Index Files::).  The index section is DWARF-specific;
-some knowledge of DWARF is assumed in this description.
+'^Z^Zframes-invalid'
 
-   The mapped index file format is designed to be directly `mmap'able
-on any architecture.  In most cases, a datum is represented using a
-little-endian 32-bit integer value, called an `offset_type'.  Big
-endian machines must byte-swap the values before using them.
-Exceptions to this rule are noted.  The data is laid out such that
-alignment is always respected.
+     The frames (for example, output from the 'backtrace' command) may
+     have changed.
+
+'^Z^Zbreakpoints-invalid'
+
+     The breakpoints may have changed.  For example, the user just added
+     or deleted a breakpoint.
+
+\1f
+File: gdb.info,  Node: Annotations for Running,  Next: Source Annotations,  Prev: Invalidation,  Up: Annotations
 
-   A mapped index consists of several areas, laid out in order.
+28.6 Running the Program
+========================
 
-  1. The file header.  This is a sequence of values, of `offset_type'
-     unless otherwise noted:
+When the program starts executing due to a GDB command such as 'step' or
+'continue',
 
-       1. The version number, currently 7.  Versions 1, 2 and 3 are
-          obsolete.  Version 4 uses a different hashing function from
-          versions 5 and 6.  Version 6 includes symbols for inlined
-          functions, whereas versions 4 and 5 do not.  Version 7 adds
-          attributes to the CU indices in the symbol table.  GDB will
-          only read version 4, 5, or 6 indices by specifying `set
-          use-deprecated-index-sections on'.
+     ^Z^Zstarting
 
-       2. The offset, from the start of the file, of the CU list.
+   is output.  When the program stops,
 
-       3. The offset, from the start of the file, of the types CU list.
-          Note that this area can be empty, in which case this offset
-          will be equal to the next offset.
+     ^Z^Zstopped
 
-       4. The offset, from the start of the file, of the address area.
+   is output.  Before the 'stopped' annotation, a variety of annotations
+describe how the program stopped.
 
-       5. The offset, from the start of the file, of the symbol table.
+'^Z^Zexited EXIT-STATUS'
+     The program exited, and EXIT-STATUS is the exit status (zero for
+     successful exit, otherwise nonzero).
 
-       6. The offset, from the start of the file, of the constant pool.
+'^Z^Zsignalled'
+     The program exited with a signal.  After the '^Z^Zsignalled', the
+     annotation continues:
 
-  2. The CU list.  This is a sequence of pairs of 64-bit little-endian
-     values, sorted by the CU offset.  The first element in each pair is
-     the offset of a CU in the `.debug_info' section.  The second
-     element in each pair is the length of that CU.  References to a CU
-     elsewhere in the map are done using a CU index, which is just the
-     0-based index into this table.  Note that if there are type CUs,
-     then conceptually CUs and type CUs form a single list for the
-     purposes of CU indices.
+          INTRO-TEXT
+          ^Z^Zsignal-name
+          NAME
+          ^Z^Zsignal-name-end
+          MIDDLE-TEXT
+          ^Z^Zsignal-string
+          STRING
+          ^Z^Zsignal-string-end
+          END-TEXT
 
-  3. The types CU list.  This is a sequence of triplets of 64-bit
-     little-endian values.  In a triplet, the first value is the CU
-     offset, the second value is the type offset in the CU, and the
-     third value is the type signature.  The types CU list is not
-     sorted.
+     where NAME is the name of the signal, such as 'SIGILL' or
+     'SIGSEGV', and STRING is the explanation of the signal, such as
+     'Illegal Instruction' or 'Segmentation fault'.  The arguments
+     INTRO-TEXT, MIDDLE-TEXT, and END-TEXT are for the user's benefit
+     and have no particular format.
 
-  4. The address area.  The address area consists of a sequence of
-     address entries.  Each address entry has three elements:
+'^Z^Zsignal'
+     The syntax of this annotation is just like 'signalled', but GDB is
+     just saying that the program received the signal, not that it was
+     terminated with it.
 
-       1. The low address.  This is a 64-bit little-endian value.
+'^Z^Zbreakpoint NUMBER'
+     The program hit breakpoint number NUMBER.
 
-       2. The high address.  This is a 64-bit little-endian value.  Like
-          `DW_AT_high_pc', the value is one byte beyond the end.
+'^Z^Zwatchpoint NUMBER'
+     The program hit watchpoint number NUMBER.
 
-       3. The CU index.  This is an `offset_type' value.
+\1f
+File: gdb.info,  Node: Source Annotations,  Prev: Annotations for Running,  Up: Annotations
 
-  5. The symbol table.  This is an open-addressed hash table.  The size
-     of the hash table is always a power of 2.
+28.7 Displaying Source
+======================
 
-     Each slot in the hash table consists of a pair of `offset_type'
-     values.  The first value is the offset of the symbol's name in the
-     constant pool.  The second value is the offset of the CU vector in
-     the constant pool.
+The following annotation is used instead of displaying source code:
 
-     If both values are 0, then this slot in the hash table is empty.
-     This is ok because while 0 is a valid constant pool index, it
-     cannot be a valid index for both a string and a CU vector.
+     ^Z^Zsource FILENAME:LINE:CHARACTER:MIDDLE:ADDR
 
-     The hash value for a table entry is computed by applying an
-     iterative hash function to the symbol's name.  Starting with an
-     initial value of `r = 0', each (unsigned) character `c' in the
-     string is incorporated into the hash using the formula depending
-     on the index version:
-
-    Version 4
-          The formula is `r = r * 67 + c - 113'.
-
-    Versions 5 to 7
-          The formula is `r = r * 67 + tolower (c) - 113'.
-
-     The terminating `\0' is not incorporated into the hash.
-
-     The step size used in the hash table is computed via `((hash * 17)
-     & (size - 1)) | 1', where `hash' is the hash value, and `size' is
-     the size of the hash table.  The step size is used to find the
-     next candidate slot when handling a hash collision.
-
-     The names of C++ symbols in the hash table are canonicalized.  We
-     don't currently have a simple description of the canonicalization
-     algorithm; if you intend to create new index sections, you must
-     read the code.
-
-  6. The constant pool.  This is simply a bunch of bytes.  It is
-     organized so that alignment is correct: CU vectors are stored
-     first, followed by strings.
-
-     A CU vector in the constant pool is a sequence of `offset_type'
-     values.  The first value is the number of CU indices in the vector.
-     Each subsequent value is the index and symbol attributes of a CU in
-     the CU list.  This element in the hash table is used to indicate
-     which CUs define the symbol and how the symbol is used.  See below
-     for the format of each CU index+attributes entry.
-
-     A string in the constant pool is zero-terminated.
-
-   Attributes were added to CU index values in `.gdb_index' version 7.
-If a symbol has multiple uses within a CU then there is one CU
-index+attributes value for each use.
-
-   The format of each CU index+attributes entry is as follows (bit 0 =
-LSB):
-
-Bits 0-23
-     This is the index of the CU in the CU list.
-
-Bits 24-27
-     These bits are reserved for future purposes and must be zero.
-
-Bits 28-30
-     The kind of the symbol in the CU.
-
-    0
-          This value is reserved and should not be used.  By reserving
-          zero the full `offset_type' value is backwards compatible
-          with previous versions of the index.
-
-    1
-          The symbol is a type.
-
-    2
-          The symbol is a variable or an enum value.
-
-    3
-          The symbol is a function.
-
-    4
-          Any other kind of symbol.
-
-    5,6,7
-          These values are reserved.
-
-Bit 31
-     This bit is zero if the value is global and one if it is static.
-
-     The determination of whether a symbol is global or static is
-     complicated.  The authorative reference is the file `dwarf2read.c'
-     in GDB sources.
-
-
-   This pseudo-code describes the computation of a symbol's kind and
-global/static attributes in the index.
-
-     is_external = get_attribute (die, DW_AT_external);
-     language = get_attribute (cu_die, DW_AT_language);
-     switch (die->tag)
-       {
-       case DW_TAG_typedef:
-       case DW_TAG_base_type:
-       case DW_TAG_subrange_type:
-         kind = TYPE;
-         is_static = 1;
-         break;
-       case DW_TAG_enumerator:
-         kind = VARIABLE;
-         is_static = (language != CPLUS && language != JAVA);
-         break;
-       case DW_TAG_subprogram:
-         kind = FUNCTION;
-         is_static = ! (is_external || language == ADA);
-         break;
-       case DW_TAG_constant:
-         kind = VARIABLE;
-         is_static = ! is_external;
-         break;
-       case DW_TAG_variable:
-         kind = VARIABLE;
-         is_static = ! is_external;
-         break;
-       case DW_TAG_namespace:
-         kind = TYPE;
-         is_static = 0;
-         break;
-       case DW_TAG_class_type:
-       case DW_TAG_interface_type:
-       case DW_TAG_structure_type:
-       case DW_TAG_union_type:
-       case DW_TAG_enumeration_type:
-         kind = TYPE;
-         is_static = (language != CPLUS && language != JAVA);
-         break;
-       default:
-         assert (0);
-       }
+   where FILENAME is an absolute file name indicating which source file,
+LINE is the line number within that file (where 1 is the first line in
+the file), CHARACTER is the character position within the file (where 0
+is the first character in the file) (for most debug formats this will
+necessarily point to the beginning of a line), MIDDLE is 'middle' if
+ADDR is in the middle of the line, or 'beg' if ADDR is at the beginning
+of the line, and ADDR is the address in the target program associated
+with the source which is being displayed.  The ADDR is in the form '0x'
+followed by one or more lowercase hex digits (note that this does not
+depend on the language).
 
 \1f
-File: gdb.info,  Node: Copying,  Next: GNU Free Documentation License,  Prev: Index Section Format,  Up: Top
-
-Appendix K GNU GENERAL PUBLIC LICENSE
-*************************************
-
-                        Version 3, 29 June 2007
-
-     Copyright (C) 2007 Free Software Foundation, Inc. `http://fsf.org/'
-
-     Everyone is permitted to copy and distribute verbatim copies of this
-     license document, but changing it is not allowed.
-
-Preamble
-========
-
-The GNU General Public License is a free, copyleft license for software
-and other kinds of works.
-
-   The licenses for most software and other practical works are designed
-to take away your freedom to share and change the works.  By contrast,
-the GNU General Public License is intended to guarantee your freedom to
-share and change all versions of a program--to make sure it remains
-free software for all its users.  We, the Free Software Foundation, use
-the GNU General Public License for most of our software; it applies
-also to any other work released this way by its authors.  You can apply
-it to your programs, too.
-
-   When we speak of free software, we are referring to freedom, not
-price.  Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-them if you wish), that you receive source code or can get it if you
-want it, that you can change the software or use pieces of it in new
-free programs, and that you know you can do these things.
-
-   To protect your rights, we need to prevent others from denying you
-these rights or asking you to surrender the rights.  Therefore, you
-have certain responsibilities if you distribute copies of the software,
-or if you modify it: responsibilities to respect the freedom of others.
-
-   For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must pass on to the recipients the same
-freedoms that you received.  You must make sure that they, too, receive
-or can get the source code.  And you must show them these terms so they
-know their rights.
-
-   Developers that use the GNU GPL protect your rights with two steps:
-(1) assert copyright on the software, and (2) offer you this License
-giving you legal permission to copy, distribute and/or modify it.
-
-   For the developers' and authors' protection, the GPL clearly explains
-that there is no warranty for this free software.  For both users' and
-authors' sake, the GPL requires that modified versions be marked as
-changed, so that their problems will not be attributed erroneously to
-authors of previous versions.
-
-   Some devices are designed to deny users access to install or run
-modified versions of the software inside them, although the
-manufacturer can do so.  This is fundamentally incompatible with the
-aim of protecting users' freedom to change the software.  The
-systematic pattern of such abuse occurs in the area of products for
-individuals to use, which is precisely where it is most unacceptable.
-Therefore, we have designed this version of the GPL to prohibit the
-practice for those products.  If such problems arise substantially in
-other domains, we stand ready to extend this provision to those domains
-in future versions of the GPL, as needed to protect the freedom of
-users.
-
-   Finally, every program is threatened constantly by software patents.
-States should not allow patents to restrict development and use of
-software on general-purpose computers, but in those that do, we wish to
-avoid the special danger that patents applied to a free program could
-make it effectively proprietary.  To prevent this, the GPL assures that
-patents cannot be used to render the program non-free.
-
-   The precise terms and conditions for copying, distribution and
-modification follow.
-
-TERMS AND CONDITIONS
-====================
-
-  0. Definitions.
-
-     "This License" refers to version 3 of the GNU General Public
-     License.
-
-     "Copyright" also means copyright-like laws that apply to other
-     kinds of works, such as semiconductor masks.
-
-     "The Program" refers to any copyrightable work licensed under this
-     License.  Each licensee is addressed as "you".  "Licensees" and
-     "recipients" may be individuals or organizations.
-
-     To "modify" a work means to copy from or adapt all or part of the
-     work in a fashion requiring copyright permission, other than the
-     making of an exact copy.  The resulting work is called a "modified
-     version" of the earlier work or a work "based on" the earlier work.
-
-     A "covered work" means either the unmodified Program or a work
-     based on the Program.
-
-     To "propagate" a work means to do anything with it that, without
-     permission, would make you directly or secondarily liable for
-     infringement under applicable copyright law, except executing it
-     on a computer or modifying a private copy.  Propagation includes
-     copying, distribution (with or without modification), making
-     available to the public, and in some countries other activities as
-     well.
-
-     To "convey" a work means any kind of propagation that enables other
-     parties to make or receive copies.  Mere interaction with a user
-     through a computer network, with no transfer of a copy, is not
-     conveying.
-
-     An interactive user interface displays "Appropriate Legal Notices"
-     to the extent that it includes a convenient and prominently visible
-     feature that (1) displays an appropriate copyright notice, and (2)
-     tells the user that there is no warranty for the work (except to
-     the extent that warranties are provided), that licensees may
-     convey the work under this License, and how to view a copy of this
-     License.  If the interface presents a list of user commands or
-     options, such as a menu, a prominent item in the list meets this
-     criterion.
-
-  1. Source Code.
-
-     The "source code" for a work means the preferred form of the work
-     for making modifications to it.  "Object code" means any
-     non-source form of a work.
-
-     A "Standard Interface" means an interface that either is an
-     official standard defined by a recognized standards body, or, in
-     the case of interfaces specified for a particular programming
-     language, one that is widely used among developers working in that
-     language.
-
-     The "System Libraries" of an executable work include anything,
-     other than the work as a whole, that (a) is included in the normal
-     form of packaging a Major Component, but which is not part of that
-     Major Component, and (b) serves only to enable use of the work
-     with that Major Component, or to implement a Standard Interface
-     for which an implementation is available to the public in source
-     code form.  A "Major Component", in this context, means a major
-     essential component (kernel, window system, and so on) of the
-     specific operating system (if any) on which the executable work
-     runs, or a compiler used to produce the work, or an object code
-     interpreter used to run it.
-
-     The "Corresponding Source" for a work in object code form means all
-     the source code needed to generate, install, and (for an executable
-     work) run the object code and to modify the work, including
-     scripts to control those activities.  However, it does not include
-     the work's System Libraries, or general-purpose tools or generally
-     available free programs which are used unmodified in performing
-     those activities but which are not part of the work.  For example,
-     Corresponding Source includes interface definition files
-     associated with source files for the work, and the source code for
-     shared libraries and dynamically linked subprograms that the work
-     is specifically designed to require, such as by intimate data
-     communication or control flow between those subprograms and other
-     parts of the work.
-
-     The Corresponding Source need not include anything that users can
-     regenerate automatically from other parts of the Corresponding
-     Source.
-
-     The Corresponding Source for a work in source code form is that
-     same work.
-
-  2. Basic Permissions.
-
-     All rights granted under this License are granted for the term of
-     copyright on the Program, and are irrevocable provided the stated
-     conditions are met.  This License explicitly affirms your unlimited
-     permission to run the unmodified Program.  The output from running
-     a covered work is covered by this License only if the output,
-     given its content, constitutes a covered work.  This License
-     acknowledges your rights of fair use or other equivalent, as
-     provided by copyright law.
-
-     You may make, run and propagate covered works that you do not
-     convey, without conditions so long as your license otherwise
-     remains in force.  You may convey covered works to others for the
-     sole purpose of having them make modifications exclusively for
-     you, or provide you with facilities for running those works,
-     provided that you comply with the terms of this License in
-     conveying all material for which you do not control copyright.
-     Those thus making or running the covered works for you must do so
-     exclusively on your behalf, under your direction and control, on
-     terms that prohibit them from making any copies of your
-     copyrighted material outside their relationship with you.
-
-     Conveying under any other circumstances is permitted solely under
-     the conditions stated below.  Sublicensing is not allowed; section
-     10 makes it unnecessary.
-
-  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
-
-     No covered work shall be deemed part of an effective technological
-     measure under any applicable law fulfilling obligations under
-     article 11 of the WIPO copyright treaty adopted on 20 December
-     1996, or similar laws prohibiting or restricting circumvention of
-     such measures.
-
-     When you convey a covered work, you waive any legal power to forbid
-     circumvention of technological measures to the extent such
-     circumvention is effected by exercising rights under this License
-     with respect to the covered work, and you disclaim any intention
-     to limit operation or modification of the work as a means of
-     enforcing, against the work's users, your or third parties' legal
-     rights to forbid circumvention of technological measures.
-
-  4. Conveying Verbatim Copies.
-
-     You may convey verbatim copies of the Program's source code as you
-     receive it, in any medium, provided that you conspicuously and
-     appropriately publish on each copy an appropriate copyright notice;
-     keep intact all notices stating that this License and any
-     non-permissive terms added in accord with section 7 apply to the
-     code; keep intact all notices of the absence of any warranty; and
-     give all recipients a copy of this License along with the Program.
-
-     You may charge any price or no price for each copy that you convey,
-     and you may offer support or warranty protection for a fee.
-
-  5. Conveying Modified Source Versions.
-
-     You may convey a work based on the Program, or the modifications to
-     produce it from the Program, in the form of source code under the
-     terms of section 4, provided that you also meet all of these
-     conditions:
-
-       a. The work must carry prominent notices stating that you
-          modified it, and giving a relevant date.
-
-       b. The work must carry prominent notices stating that it is
-          released under this License and any conditions added under
-          section 7.  This requirement modifies the requirement in
-          section 4 to "keep intact all notices".
-
-       c. You must license the entire work, as a whole, under this
-          License to anyone who comes into possession of a copy.  This
-          License will therefore apply, along with any applicable
-          section 7 additional terms, to the whole of the work, and all
-          its parts, regardless of how they are packaged.  This License
-          gives no permission to license the work in any other way, but
-          it does not invalidate such permission if you have separately
-          received it.
-
-       d. If the work has interactive user interfaces, each must display
-          Appropriate Legal Notices; however, if the Program has
-          interactive interfaces that do not display Appropriate Legal
-          Notices, your work need not make them do so.
-
-     A compilation of a covered work with other separate and independent
-     works, which are not by their nature extensions of the covered
-     work, and which are not combined with it such as to form a larger
-     program, in or on a volume of a storage or distribution medium, is
-     called an "aggregate" if the compilation and its resulting
-     copyright are not used to limit the access or legal rights of the
-     compilation's users beyond what the individual works permit.
-     Inclusion of a covered work in an aggregate does not cause this
-     License to apply to the other parts of the aggregate.
-
-  6. Conveying Non-Source Forms.
-
-     You may convey a covered work in object code form under the terms
-     of sections 4 and 5, provided that you also convey the
-     machine-readable Corresponding Source under the terms of this
-     License, in one of these ways:
-
-       a. Convey the object code in, or embodied in, a physical product
-          (including a physical distribution medium), accompanied by the
-          Corresponding Source fixed on a durable physical medium
-          customarily used for software interchange.
-
-       b. Convey the object code in, or embodied in, a physical product
-          (including a physical distribution medium), accompanied by a
-          written offer, valid for at least three years and valid for
-          as long as you offer spare parts or customer support for that
-          product model, to give anyone who possesses the object code
-          either (1) a copy of the Corresponding Source for all the
-          software in the product that is covered by this License, on a
-          durable physical medium customarily used for software
-          interchange, for a price no more than your reasonable cost of
-          physically performing this conveying of source, or (2) access
-          to copy the Corresponding Source from a network server at no
-          charge.
-
-       c. Convey individual copies of the object code with a copy of
-          the written offer to provide the Corresponding Source.  This
-          alternative is allowed only occasionally and noncommercially,
-          and only if you received the object code with such an offer,
-          in accord with subsection 6b.
-
-       d. Convey the object code by offering access from a designated
-          place (gratis or for a charge), and offer equivalent access
-          to the Corresponding Source in the same way through the same
-          place at no further charge.  You need not require recipients
-          to copy the Corresponding Source along with the object code.
-          If the place to copy the object code is a network server, the
-          Corresponding Source may be on a different server (operated
-          by you or a third party) that supports equivalent copying
-          facilities, provided you maintain clear directions next to
-          the object code saying where to find the Corresponding Source.
-          Regardless of what server hosts the Corresponding Source, you
-          remain obligated to ensure that it is available for as long
-          as needed to satisfy these requirements.
-
-       e. Convey the object code using peer-to-peer transmission,
-          provided you inform other peers where the object code and
-          Corresponding Source of the work are being offered to the
-          general public at no charge under subsection 6d.
-
-
-     A separable portion of the object code, whose source code is
-     excluded from the Corresponding Source as a System Library, need
-     not be included in conveying the object code work.
-
-     A "User Product" is either (1) a "consumer product", which means
-     any tangible personal property which is normally used for personal,
-     family, or household purposes, or (2) anything designed or sold for
-     incorporation into a dwelling.  In determining whether a product
-     is a consumer product, doubtful cases shall be resolved in favor of
-     coverage.  For a particular product received by a particular user,
-     "normally used" refers to a typical or common use of that class of
-     product, regardless of the status of the particular user or of the
-     way in which the particular user actually uses, or expects or is
-     expected to use, the product.  A product is a consumer product
-     regardless of whether the product has substantial commercial,
-     industrial or non-consumer uses, unless such uses represent the
-     only significant mode of use of the product.
-
-     "Installation Information" for a User Product means any methods,
-     procedures, authorization keys, or other information required to
-     install and execute modified versions of a covered work in that
-     User Product from a modified version of its Corresponding Source.
-     The information must suffice to ensure that the continued
-     functioning of the modified object code is in no case prevented or
-     interfered with solely because modification has been made.
-
-     If you convey an object code work under this section in, or with,
-     or specifically for use in, a User Product, and the conveying
-     occurs as part of a transaction in which the right of possession
-     and use of the User Product is transferred to the recipient in
-     perpetuity or for a fixed term (regardless of how the transaction
-     is characterized), the Corresponding Source conveyed under this
-     section must be accompanied by the Installation Information.  But
-     this requirement does not apply if neither you nor any third party
-     retains the ability to install modified object code on the User
-     Product (for example, the work has been installed in ROM).
-
-     The requirement to provide Installation Information does not
-     include a requirement to continue to provide support service,
-     warranty, or updates for a work that has been modified or
-     installed by the recipient, or for the User Product in which it
-     has been modified or installed.  Access to a network may be denied
-     when the modification itself materially and adversely affects the
-     operation of the network or violates the rules and protocols for
-     communication across the network.
-
-     Corresponding Source conveyed, and Installation Information
-     provided, in accord with this section must be in a format that is
-     publicly documented (and with an implementation available to the
-     public in source code form), and must require no special password
-     or key for unpacking, reading or copying.
-
-  7. Additional Terms.
-
-     "Additional permissions" are terms that supplement the terms of
-     this License by making exceptions from one or more of its
-     conditions.  Additional permissions that are applicable to the
-     entire Program shall be treated as though they were included in
-     this License, to the extent that they are valid under applicable
-     law.  If additional permissions apply only to part of the Program,
-     that part may be used separately under those permissions, but the
-     entire Program remains governed by this License without regard to
-     the additional permissions.
-
-     When you convey a copy of a covered work, you may at your option
-     remove any additional permissions from that copy, or from any part
-     of it.  (Additional permissions may be written to require their own
-     removal in certain cases when you modify the work.)  You may place
-     additional permissions on material, added by you to a covered work,
-     for which you have or can give appropriate copyright permission.
-
-     Notwithstanding any other provision of this License, for material
-     you add to a covered work, you may (if authorized by the copyright
-     holders of that material) supplement the terms of this License
-     with terms:
-
-       a. Disclaiming warranty or limiting liability differently from
-          the terms of sections 15 and 16 of this License; or
-
-       b. Requiring preservation of specified reasonable legal notices
-          or author attributions in that material or in the Appropriate
-          Legal Notices displayed by works containing it; or
-
-       c. Prohibiting misrepresentation of the origin of that material,
-          or requiring that modified versions of such material be
-          marked in reasonable ways as different from the original
-          version; or
-
-       d. Limiting the use for publicity purposes of names of licensors
-          or authors of the material; or
-
-       e. Declining to grant rights under trademark law for use of some
-          trade names, trademarks, or service marks; or
-
-       f. Requiring indemnification of licensors and authors of that
-          material by anyone who conveys the material (or modified
-          versions of it) with contractual assumptions of liability to
-          the recipient, for any liability that these contractual
-          assumptions directly impose on those licensors and authors.
-
-     All other non-permissive additional terms are considered "further
-     restrictions" within the meaning of section 10.  If the Program as
-     you received it, or any part of it, contains a notice stating that
-     it is governed by this License along with a term that is a further
-     restriction, you may remove that term.  If a license document
-     contains a further restriction but permits relicensing or
-     conveying under this License, you may add to a covered work
-     material governed by the terms of that license document, provided
-     that the further restriction does not survive such relicensing or
-     conveying.
-
-     If you add terms to a covered work in accord with this section, you
-     must place, in the relevant source files, a statement of the
-     additional terms that apply to those files, or a notice indicating
-     where to find the applicable terms.
-
-     Additional terms, permissive or non-permissive, may be stated in
-     the form of a separately written license, or stated as exceptions;
-     the above requirements apply either way.
-
-  8. Termination.
-
-     You may not propagate or modify a covered work except as expressly
-     provided under this License.  Any attempt otherwise to propagate or
-     modify it is void, and will automatically terminate your rights
-     under this License (including any patent licenses granted under
-     the third paragraph of section 11).
-
-     However, if you cease all violation of this License, then your
-     license from a particular copyright holder is reinstated (a)
-     provisionally, unless and until the copyright holder explicitly
-     and finally terminates your license, and (b) permanently, if the
-     copyright holder fails to notify you of the violation by some
-     reasonable means prior to 60 days after the cessation.
-
-     Moreover, your license from a particular copyright holder is
-     reinstated permanently if the copyright holder notifies you of the
-     violation by some reasonable means, this is the first time you have
-     received notice of violation of this License (for any work) from
-     that copyright holder, and you cure the violation prior to 30 days
-     after your receipt of the notice.
-
-     Termination of your rights under this section does not terminate
-     the licenses of parties who have received copies or rights from
-     you under this License.  If your rights have been terminated and
-     not permanently reinstated, you do not qualify to receive new
-     licenses for the same material under section 10.
-
-  9. Acceptance Not Required for Having Copies.
-
-     You are not required to accept this License in order to receive or
-     run a copy of the Program.  Ancillary propagation of a covered work
-     occurring solely as a consequence of using peer-to-peer
-     transmission to receive a copy likewise does not require
-     acceptance.  However, nothing other than this License grants you
-     permission to propagate or modify any covered work.  These actions
-     infringe copyright if you do not accept this License.  Therefore,
-     by modifying or propagating a covered work, you indicate your
-     acceptance of this License to do so.
-
- 10. Automatic Licensing of Downstream Recipients.
-
-     Each time you convey a covered work, the recipient automatically
-     receives a license from the original licensors, to run, modify and
-     propagate that work, subject to this License.  You are not
-     responsible for enforcing compliance by third parties with this
-     License.
-
-     An "entity transaction" is a transaction transferring control of an
-     organization, or substantially all assets of one, or subdividing an
-     organization, or merging organizations.  If propagation of a
-     covered work results from an entity transaction, each party to that
-     transaction who receives a copy of the work also receives whatever
-     licenses to the work the party's predecessor in interest had or
-     could give under the previous paragraph, plus a right to
-     possession of the Corresponding Source of the work from the
-     predecessor in interest, if the predecessor has it or can get it
-     with reasonable efforts.
-
-     You may not impose any further restrictions on the exercise of the
-     rights granted or affirmed under this License.  For example, you
-     may not impose a license fee, royalty, or other charge for
-     exercise of rights granted under this License, and you may not
-     initiate litigation (including a cross-claim or counterclaim in a
-     lawsuit) alleging that any patent claim is infringed by making,
-     using, selling, offering for sale, or importing the Program or any
-     portion of it.
-
- 11. Patents.
-
-     A "contributor" is a copyright holder who authorizes use under this
-     License of the Program or a work on which the Program is based.
-     The work thus licensed is called the contributor's "contributor
-     version".
-
-     A contributor's "essential patent claims" are all patent claims
-     owned or controlled by the contributor, whether already acquired or
-     hereafter acquired, that would be infringed by some manner,
-     permitted by this License, of making, using, or selling its
-     contributor version, but do not include claims that would be
-     infringed only as a consequence of further modification of the
-     contributor version.  For purposes of this definition, "control"
-     includes the right to grant patent sublicenses in a manner
-     consistent with the requirements of this License.
-
-     Each contributor grants you a non-exclusive, worldwide,
-     royalty-free patent license under the contributor's essential
-     patent claims, to make, use, sell, offer for sale, import and
-     otherwise run, modify and propagate the contents of its
-     contributor version.
-
-     In the following three paragraphs, a "patent license" is any
-     express agreement or commitment, however denominated, not to
-     enforce a patent (such as an express permission to practice a
-     patent or covenant not to sue for patent infringement).  To
-     "grant" such a patent license to a party means to make such an
-     agreement or commitment not to enforce a patent against the party.
-
-     If you convey a covered work, knowingly relying on a patent
-     license, and the Corresponding Source of the work is not available
-     for anyone to copy, free of charge and under the terms of this
-     License, through a publicly available network server or other
-     readily accessible means, then you must either (1) cause the
-     Corresponding Source to be so available, or (2) arrange to deprive
-     yourself of the benefit of the patent license for this particular
-     work, or (3) arrange, in a manner consistent with the requirements
-     of this License, to extend the patent license to downstream
-     recipients.  "Knowingly relying" means you have actual knowledge
-     that, but for the patent license, your conveying the covered work
-     in a country, or your recipient's use of the covered work in a
-     country, would infringe one or more identifiable patents in that
-     country that you have reason to believe are valid.
-
-     If, pursuant to or in connection with a single transaction or
-     arrangement, you convey, or propagate by procuring conveyance of, a
-     covered work, and grant a patent license to some of the parties
-     receiving the covered work authorizing them to use, propagate,
-     modify or convey a specific copy of the covered work, then the
-     patent license you grant is automatically extended to all
-     recipients of the covered work and works based on it.
-
-     A patent license is "discriminatory" if it does not include within
-     the scope of its coverage, prohibits the exercise of, or is
-     conditioned on the non-exercise of one or more of the rights that
-     are specifically granted under this License.  You may not convey a
-     covered work if you are a party to an arrangement with a third
-     party that is in the business of distributing software, under
-     which you make payment to the third party based on the extent of
-     your activity of conveying the work, and under which the third
-     party grants, to any of the parties who would receive the covered
-     work from you, a discriminatory patent license (a) in connection
-     with copies of the covered work conveyed by you (or copies made
-     from those copies), or (b) primarily for and in connection with
-     specific products or compilations that contain the covered work,
-     unless you entered into that arrangement, or that patent license
-     was granted, prior to 28 March 2007.
-
-     Nothing in this License shall be construed as excluding or limiting
-     any implied license or other defenses to infringement that may
-     otherwise be available to you under applicable patent law.
-
- 12. No Surrender of Others' Freedom.
-
-     If conditions are imposed on you (whether by court order,
-     agreement or otherwise) that contradict the conditions of this
-     License, they do not excuse you from the conditions of this
-     License.  If you cannot convey a covered work so as to satisfy
-     simultaneously your obligations under this License and any other
-     pertinent obligations, then as a consequence you may not convey it
-     at all.  For example, if you agree to terms that obligate you to
-     collect a royalty for further conveying from those to whom you
-     convey the Program, the only way you could satisfy both those
-     terms and this License would be to refrain entirely from conveying
-     the Program.
-
- 13. Use with the GNU Affero General Public License.
-
-     Notwithstanding any other provision of this License, you have
-     permission to link or combine any covered work with a work licensed
-     under version 3 of the GNU Affero General Public License into a
-     single combined work, and to convey the resulting work.  The terms
-     of this License will continue to apply to the part which is the
-     covered work, but the special requirements of the GNU Affero
-     General Public License, section 13, concerning interaction through
-     a network will apply to the combination as such.
-
- 14. Revised Versions of this License.
-
-     The Free Software Foundation may publish revised and/or new
-     versions of the GNU General Public License from time to time.
-     Such new versions will be similar in spirit to the present
-     version, but may differ in detail to address new problems or
-     concerns.
-
-     Each version is given a distinguishing version number.  If the
-     Program specifies that a certain numbered version of the GNU
-     General Public License "or any later version" applies to it, you
-     have the option of following the terms and conditions either of
-     that numbered version or of any later version published by the
-     Free Software Foundation.  If the Program does not specify a
-     version number of the GNU General Public License, you may choose
-     any version ever published by the Free Software Foundation.
-
-     If the Program specifies that a proxy can decide which future
-     versions of the GNU General Public License can be used, that
-     proxy's public statement of acceptance of a version permanently
-     authorizes you to choose that version for the Program.
-
-     Later license versions may give you additional or different
-     permissions.  However, no additional obligations are imposed on any
-     author or copyright holder as a result of your choosing to follow a
-     later version.
-
- 15. Disclaimer of Warranty.
-
-     THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
-     APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE
-     COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS"
-     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED,
-     INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE
-     RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.
-     SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
-     NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. Limitation of Liability.
-
-     IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-     WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES
-     AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU
-     FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-     CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE
-     THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA
-     BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
-     PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-     PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF
-     THE POSSIBILITY OF SUCH DAMAGES.
-
- 17. Interpretation of Sections 15 and 16.
-
-     If the disclaimer of warranty and limitation of liability provided
-     above cannot be given local legal effect according to their terms,
-     reviewing courts shall apply local law that most closely
-     approximates an absolute waiver of all civil liability in
-     connection with the Program, unless a warranty or assumption of
-     liability accompanies a copy of the Program in return for a fee.
-
-
-END OF TERMS AND CONDITIONS
-===========================
+File: gdb.info,  Node: JIT Interface,  Next: In-Process Agent,  Prev: Annotations,  Up: Top
+
+29 JIT Compilation Interface
+****************************
+
+This chapter documents GDB's "just-in-time" (JIT) compilation interface.
+A JIT compiler is a program or library that generates native executable
+code at runtime and executes it, usually in order to achieve good
+performance while maintaining platform independence.
+
+   Programs that use JIT compilation are normally difficult to debug
+because portions of their code are generated at runtime, instead of
+being loaded from object files, which is where GDB normally finds the
+program's symbols and debug information.  In order to debug programs
+that use JIT compilation, GDB has an interface that allows the program
+to register in-memory symbol files with GDB at runtime.
+
+   If you are using GDB to debug a program that uses this interface,
+then it should work transparently so long as you have not stripped the
+binary.  If you are developing a JIT compiler, then the interface is
+documented in the rest of this chapter.  At this time, the only known
+client of this interface is the LLVM JIT.
+
+   Broadly speaking, the JIT interface mirrors the dynamic loader
+interface.  The JIT compiler communicates with GDB by writing data into
+a global variable and calling a fuction at a well-known symbol.  When
+GDB attaches, it reads a linked list of symbol files from the global
+variable to find existing code, and puts a breakpoint in the function so
+that it can find out about additional code.
+
+* Menu:
+
+* Declarations::                Relevant C struct declarations
+* Registering Code::            Steps to register code
+* Unregistering Code::          Steps to unregister code
+* Custom Debug Info::           Emit debug information in a custom format
+
+\1f
+File: gdb.info,  Node: Declarations,  Next: Registering Code,  Up: JIT Interface
+
+29.1 JIT Declarations
+=====================
+
+These are the relevant struct declarations that a C program should
+include to implement the interface:
+
+     typedef enum
+     {
+       JIT_NOACTION = 0,
+       JIT_REGISTER_FN,
+       JIT_UNREGISTER_FN
+     } jit_actions_t;
+
+     struct jit_code_entry
+     {
+       struct jit_code_entry *next_entry;
+       struct jit_code_entry *prev_entry;
+       const char *symfile_addr;
+       uint64_t symfile_size;
+     };
+
+     struct jit_descriptor
+     {
+       uint32_t version;
+       /* This type should be jit_actions_t, but we use uint32_t
+          to be explicit about the bitwidth.  */
+       uint32_t action_flag;
+       struct jit_code_entry *relevant_entry;
+       struct jit_code_entry *first_entry;
+     };
+
+     /* GDB puts a breakpoint in this function.  */
+     void __attribute__((noinline)) __jit_debug_register_code() { };
+
+     /* Make sure to specify the version statically, because the
+        debugger may check the version before we can set it.  */
+     struct jit_descriptor __jit_debug_descriptor = { 1, 0, 0, 0 };
+
+   If the JIT is multi-threaded, then it is important that the JIT
+synchronize any modifications to this global data properly, which can
+easily be done by putting a global mutex around modifications to these
+structures.
+
+\1f
+File: gdb.info,  Node: Registering Code,  Next: Unregistering Code,  Prev: Declarations,  Up: JIT Interface
+
+29.2 Registering Code
+=====================
+
+To register code with GDB, the JIT should follow this protocol:
+
+   * Generate an object file in memory with symbols and other desired
+     debug information.  The file must include the virtual addresses of
+     the sections.
+
+   * Create a code entry for the file, which gives the start and size of
+     the symbol file.
 
-How to Apply These Terms to Your New Programs
-=============================================
-
-If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these
-terms.
-
-   To do so, attach the following notices to the program.  It is safest
-to attach them to the start of each source file to most effectively
-state the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
-     ONE LINE TO GIVE THE PROGRAM'S NAME AND A BRIEF IDEA OF WHAT IT DOES.
-     Copyright (C) YEAR NAME OF AUTHOR
-
-     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 `http://www.gnu.org/licenses/'.
-
-   Also add information on how to contact you by electronic and paper
-mail.
-
-   If the program does terminal interaction, make it output a short
-notice like this when it starts in an interactive mode:
-
-     PROGRAM Copyright (C) YEAR NAME OF AUTHOR
-     This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
-     This is free software, and you are welcome to redistribute it
-     under certain conditions; type `show c' for details.
-
-   The hypothetical commands `show w' and `show c' should show the
-appropriate parts of the General Public License.  Of course, your
-program's commands might be different; for a GUI interface, you would
-use an "about box".
-
-   You should also get your employer (if you work as a programmer) or
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary.  For more information on this, and how to apply and follow
-the GNU GPL, see `http://www.gnu.org/licenses/'.
-
-   The GNU General Public License does not permit incorporating your
-program into proprietary programs.  If your program is a subroutine
-library, you may consider it more useful to permit linking proprietary
-applications with the library.  If this is what you want to do, use the
-GNU Lesser General Public License instead of this License.  But first,
-please read `http://www.gnu.org/philosophy/why-not-lgpl.html'.
+   * Add it to the linked list in the JIT descriptor.
+
+   * Point the relevant_entry field of the descriptor at the entry.
+
+   * Set 'action_flag' to 'JIT_REGISTER' and call
+     '__jit_debug_register_code'.
+
+   When GDB is attached and the breakpoint fires, GDB uses the
+'relevant_entry' pointer so it doesn't have to walk the list looking for
+new code.  However, the linked list must still be maintained in order to
+allow GDB to attach to a running process and still find the symbol
+files.
+
+\1f
+File: gdb.info,  Node: Unregistering Code,  Next: Custom Debug Info,  Prev: Registering Code,  Up: JIT Interface
+
+29.3 Unregistering Code
+=======================
+
+If code is freed, then the JIT should use the following protocol:
+
+   * Remove the code entry corresponding to the code from the linked
+     list.
+
+   * Point the 'relevant_entry' field of the descriptor at the code
+     entry.
+
+   * Set 'action_flag' to 'JIT_UNREGISTER' and call
+     '__jit_debug_register_code'.
+
+   If the JIT frees or recompiles code without unregistering it, then
+GDB and the JIT will leak the memory used for the associated symbol
+files.
+
+\1f
+File: gdb.info,  Node: Custom Debug Info,  Prev: Unregistering Code,  Up: JIT Interface
+
+29.4 Custom Debug Info
+======================
+
+Generating debug information in platform-native file formats (like ELF
+or COFF) may be an overkill for JIT compilers; especially if all the
+debug info is used for is displaying a meaningful backtrace.  The issue
+can be resolved by having the JIT writers decide on a debug info format
+and also provide a reader that parses the debug info generated by the
+JIT compiler.  This section gives a brief overview on writing such a
+parser.  More specific details can be found in the source file
+'gdb/jit-reader.in', which is also installed as a header at
+'INCLUDEDIR/gdb/jit-reader.h' for easy inclusion.
+
+   The reader is implemented as a shared object (so this functionality
+is not available on platforms which don't allow loading shared objects
+at runtime).  Two GDB commands, 'jit-reader-load' and
+'jit-reader-unload' are provided, to be used to load and unload the
+readers from a preconfigured directory.  Once loaded, the shared object
+is used the parse the debug information emitted by the JIT compiler.
+
+* Menu:
+
+* Using JIT Debug Info Readers::       How to use supplied readers correctly
+* Writing JIT Debug Info Readers::     Creating a debug-info reader
+
+\1f
+File: gdb.info,  Node: Using JIT Debug Info Readers,  Next: Writing JIT Debug Info Readers,  Up: Custom Debug Info
+
+29.4.1 Using JIT Debug Info Readers
+-----------------------------------
+
+Readers can be loaded and unloaded using the 'jit-reader-load' and
+'jit-reader-unload' commands.
+
+'jit-reader-load READER'
+     Load the JIT reader named READER, which is a shared object
+     specified as either an absolute or a relative file name.  In the
+     latter case, GDB will try to load the reader from a pre-configured
+     directory, usually 'LIBDIR/gdb/' on a UNIX system (here LIBDIR is
+     the system library directory, often '/usr/local/lib').
+
+     Only one reader can be active at a time; trying to load a second
+     reader when one is already loaded will result in GDB reporting an
+     error.  A new JIT reader can be loaded by first unloading the
+     current one using 'jit-reader-unload' and then invoking
+     'jit-reader-load'.
+
+'jit-reader-unload'
+     Unload the currently loaded JIT reader.
+
+\1f
+File: gdb.info,  Node: Writing JIT Debug Info Readers,  Prev: Using JIT Debug Info Readers,  Up: Custom Debug Info
+
+29.4.2 Writing JIT Debug Info Readers
+-------------------------------------
+
+As mentioned, a reader is essentially a shared object conforming to a
+certain ABI. This ABI is described in 'jit-reader.h'.
+
+   'jit-reader.h' defines the structures, macros and functions required
+to write a reader.  It is installed (along with GDB), in
+'INCLUDEDIR/gdb' where INCLUDEDIR is the system include directory.
+
+   Readers need to be released under a GPL compatible license.  A reader
+can be declared as released under such a license by placing the macro
+'GDB_DECLARE_GPL_COMPATIBLE_READER' in a source file.
+
+   The entry point for readers is the symbol 'gdb_init_reader', which is
+expected to be a function with the prototype
+
+     extern struct gdb_reader_funcs *gdb_init_reader (void);
+
+   'struct gdb_reader_funcs' contains a set of pointers to callback
+functions.  These functions are executed to read the debug info
+generated by the JIT compiler ('read'), to unwind stack frames
+('unwind') and to create canonical frame IDs ('get_Frame_id').  It also
+has a callback that is called when the reader is being unloaded
+('destroy').  The struct looks like this
+
+     struct gdb_reader_funcs
+     {
+       /* Must be set to GDB_READER_INTERFACE_VERSION.  */
+       int reader_version;
+
+       /* For use by the reader.  */
+       void *priv_data;
+
+       gdb_read_debug_info *read;
+       gdb_unwind_frame *unwind;
+       gdb_get_frame_id *get_frame_id;
+       gdb_destroy_reader *destroy;
+     };
+
+   The callbacks are provided with another set of callbacks by GDB to do
+their job.  For 'read', these callbacks are passed in a 'struct
+gdb_symbol_callbacks' and for 'unwind' and 'get_frame_id', in a 'struct
+gdb_unwind_callbacks'.  'struct gdb_symbol_callbacks' has callbacks to
+create new object files and new symbol tables inside those object files.
+'struct gdb_unwind_callbacks' has callbacks to read registers off the
+current frame and to write out the values of the registers in the
+previous frame.  Both have a callback ('target_read') to read bytes off
+the target's address space.
+
+\1f
+File: gdb.info,  Node: In-Process Agent,  Next: GDB Bugs,  Prev: JIT Interface,  Up: Top
+
+30 In-Process Agent
+*******************
+
+The traditional debugging model is conceptually low-speed, but works
+fine, because most bugs can be reproduced in debugging-mode execution.
+However, as multi-core or many-core processors are becoming mainstream,
+and multi-threaded programs become more and more popular, there should
+be more and more bugs that only manifest themselves at normal-mode
+execution, for example, thread races, because debugger's interference
+with the program's timing may conceal the bugs.  On the other hand, in
+some applications, it is not feasible for the debugger to interrupt the
+program's execution long enough for the developer to learn anything
+helpful about its behavior.  If the program's correctness depends on its
+real-time behavior, delays introduced by a debugger might cause the
+program to fail, even when the code itself is correct.  It is useful to
+be able to observe the program's behavior without interrupting it.
+
+   Therefore, traditional debugging model is too intrusive to reproduce
+some bugs.  In order to reduce the interference with the program, we can
+reduce the number of operations performed by debugger.  The "In-Process
+Agent", a shared library, is running within the same process with
+inferior, and is able to perform some debugging operations itself.  As a
+result, debugger is only involved when necessary, and performance of
+debugging can be improved accordingly.  Note that interference with
+program can be reduced but can't be removed completely, because the
+in-process agent will still stop or slow down the program.
+
+   The in-process agent can interpret and execute Agent Expressions
+(*note Agent Expressions::) during performing debugging operations.  The
+agent expressions can be used for different purposes, such as collecting
+data in tracepoints, and condition evaluation in breakpoints.
+
+   You can control whether the in-process agent is used as an aid for
+debugging with the following commands:
+
+'set agent on'
+     Causes the in-process agent to perform some operations on behalf of
+     the debugger.  Just which operations requested by the user will be
+     done by the in-process agent depends on the its capabilities.  For
+     example, if you request to evaluate breakpoint conditions in the
+     in-process agent, and the in-process agent has such capability as
+     well, then breakpoint conditions will be evaluated in the
+     in-process agent.
+
+'set agent off'
+     Disables execution of debugging operations by the in-process agent.
+     All of the operations will be performed by GDB.
+
+'show agent'
+     Display the current setting of execution of debugging operations by
+     the in-process agent.
+
+* Menu:
+
+* In-Process Agent Protocol::
+
+\1f
+File: gdb.info,  Node: In-Process Agent Protocol,  Up: In-Process Agent
+
+30.1 In-Process Agent Protocol
+==============================
+
+The in-process agent is able to communicate with both GDB and GDBserver
+(*note In-Process Agent::).  This section documents the protocol used
+for communications between GDB or GDBserver and the IPA. In general, GDB
+or GDBserver sends commands (*note IPA Protocol Commands::) and data to
+in-process agent, and then in-process agent replies back with the return
+result of the command, or some other information.  The data sent to
+in-process agent is composed of primitive data types, such as 4-byte or
+8-byte type, and composite types, which are called objects (*note IPA
+Protocol Objects::).
+
+* Menu:
+
+* IPA Protocol Objects::
+* IPA Protocol Commands::
+
+\1f
+File: gdb.info,  Node: IPA Protocol Objects,  Next: IPA Protocol Commands,  Up: In-Process Agent Protocol
+
+30.1.1 IPA Protocol Objects
+---------------------------
+
+The commands sent to and results received from agent may contain some
+complex data types called "objects".
+
+   The in-process agent is running on the same machine with GDB or
+GDBserver, so it doesn't have to handle as much differences between two
+ends as remote protocol (*note Remote Protocol::) tries to handle.
+However, there are still some differences of two ends in two processes:
+
+  1. word size.  On some 64-bit machines, GDB or GDBserver can be
+     compiled as a 64-bit executable, while in-process agent is a 32-bit
+     one.
+  2. ABI. Some machines may have multiple types of ABI, GDB or GDBserver
+     is compiled with one, and in-process agent is compiled with the
+     other one.
+
+   Here are the IPA Protocol Objects:
+
+  1. agent expression object.  It represents an agent expression (*note
+     Agent Expressions::).
+  2. tracepoint action object.  It represents a tracepoint action (*note
+     Tracepoint Action Lists: Tracepoint Actions.) to collect registers,
+     memory, static trace data and to evaluate expression.
+  3. tracepoint object.  It represents a tracepoint (*note
+     Tracepoints::).
+
+   The following table describes important attributes of each IPA
+protocol object:
+
+Name                   Size           Description
+---------------------------------------------------------------------------
+_agent expression
+object_
+length                 4              length of bytes code
+byte code              LENGTH         contents of byte code
+_tracepoint action
+for collecting
+memory_
+'M'                    1              type of tracepoint action
+addr                   8              if BASEREG is '-1', ADDR is the
+                                      address of the lowest byte to
+                                      collect, otherwise ADDR is the
+                                      offset of BASEREG for memory
+                                      collecting.
+len                    8              length of memory for collecting
+basereg                4              the register number containing the
+                                      starting memory address for
+                                      collecting.
+_tracepoint action
+for collecting
+registers_
+'R'                    1              type of tracepoint action
+_tracepoint action
+for collecting
+static trace data_
+'L'                    1              type of tracepoint action
+_tracepoint action
+for expression
+evaluation_
+'X'                    1              type of tracepoint action
+agent expression       length of      *note agent expression object::
+_tracepoint object_
+number                 4              number of tracepoint
+address                8              address of tracepoint inserted on
+type                   4              type of tracepoint
+enabled                1              enable or disable of tracepoint
+step_count             8              step
+pass_count             8              pass
+numactions             4              number of tracepoint actions
+hit count              8              hit count
+trace frame usage      8              trace frame usage
+compiled_cond          8              compiled condition
+orig_size              8              orig size
+condition              4 if           zero if condition is NULL,
+                       condition is   otherwise is *note agent
+                       NULL           expression object::
+                       otherwise
+                       length of
+                       *note agent
+                       expression
+                       object::
+actions                variable       numactions number of *note
+                                      tracepoint action object::
+
+\1f
+File: gdb.info,  Node: IPA Protocol Commands,  Prev: IPA Protocol Objects,  Up: In-Process Agent Protocol
+
+30.1.2 IPA Protocol Commands
+----------------------------
+
+The spaces in each command are delimiters to ease reading this commands
+specification.  They don't exist in real commands.
+
+'FastTrace:TRACEPOINT_OBJECT GDB_JUMP_PAD_HEAD'
+     Installs a new fast tracepoint described by TRACEPOINT_OBJECT
+     (*note tracepoint object::).  The GDB_JUMP_PAD_HEAD, 8-byte long,
+     is the head of "jumppad", which is used to jump to data collection
+     routine in IPA finally.
+
+     Replies:
+     'OK TARGET_ADDRESS GDB_JUMP_PAD_HEAD FJUMP_SIZE FJUMP'
+          TARGET_ADDRESS is address of tracepoint in the inferior.  The
+          GDB_JUMP_PAD_HEAD is updated head of jumppad.  Both of
+          TARGET_ADDRESS and GDB_JUMP_PAD_HEAD are 8-byte long.  The
+          FJUMP contains a sequence of instructions jump to jumppad
+          entry.  The FJUMP_SIZE, 4-byte long, is the size of FJUMP.
+     'E NN'
+          for an error
+
+'close'
+     Closes the in-process agent.  This command is sent when GDB or
+     GDBserver is about to kill inferiors.
+
+'qTfSTM'
+     *Note qTfSTM::.
+'qTsSTM'
+     *Note qTsSTM::.
+'qTSTMat'
+     *Note qTSTMat::.
+'probe_marker_at:ADDRESS'
+     Asks in-process agent to probe the marker at ADDRESS.
+
+     Replies:
+     'E NN'
+          for an error
+'unprobe_marker_at:ADDRESS'
+     Asks in-process agent to unprobe the marker at ADDRESS.
+
+\1f
+File: gdb.info,  Node: GDB Bugs,  Next: Command Line Editing,  Prev: In-Process Agent,  Up: Top
+
+31 Reporting Bugs in GDB
+************************
+
+Your bug reports play an essential role in making GDB reliable.
+
+   Reporting a bug may help you by bringing a solution to your problem,
+or it may not.  But in any case the principal function of a bug report
+is to help the entire community by making the next version of GDB work
+better.  Bug reports are your contribution to the maintenance of GDB.
+
+   In order for a bug report to serve its purpose, you must include the
+information that enables us to fix the bug.
+
+* Menu:
+
+* Bug Criteria::                Have you found a bug?
+* Bug Reporting::               How to report bugs
+
+\1f
+File: gdb.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: GDB Bugs
+
+31.1 Have You Found a Bug?
+==========================
+
+If you are not sure whether you have found a bug, here are some
+guidelines:
+
+   * If the debugger gets a fatal signal, for any input whatever, that
+     is a GDB bug.  Reliable debuggers never crash.
+
+   * If GDB produces an error message for valid input, that is a bug.
+     (Note that if you're cross debugging, the problem may also be
+     somewhere in the connection to the target.)
+
+   * If GDB does not produce an error message for invalid input, that is
+     a bug.  However, you should note that your idea of "invalid input"
+     might be our idea of "an extension" or "support for traditional
+     practice".
+
+   * If you are an experienced user of debugging tools, your suggestions
+     for improvement of GDB are welcome in any case.
+
+\1f
+File: gdb.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: GDB Bugs
+
+31.2 How to Report Bugs
+=======================
+
+A number of companies and individuals offer support for GNU products.
+If you obtained GDB from a support organization, we recommend you
+contact that organization first.
+
+   You can find contact information for many support companies and
+individuals in the file 'etc/SERVICE' in the GNU Emacs distribution.
+
+   In any event, we also recommend that you submit bug reports for GDB.
+The preferred method is to submit them directly using GDB's Bugs web
+page (http://www.gnu.org/software/gdb/bugs/).  Alternatively, the e-mail
+gateway <bug-gdb@gnu.org> can be used.
+
+   *Do not send bug reports to 'info-gdb', or to 'help-gdb', or to any
+newsgroups.*  Most users of GDB do not want to receive bug reports.
+Those that do have arranged to receive 'bug-gdb'.
+
+   The mailing list 'bug-gdb' has a newsgroup 'gnu.gdb.bug' which serves
+as a repeater.  The mailing list and the newsgroup carry exactly the
+same messages.  Often people think of posting bug reports to the
+newsgroup instead of mailing them.  This appears to work, but it has one
+problem which can be crucial: a newsgroup posting often lacks a mail
+path back to the sender.  Thus, if we need to ask for more information,
+we may be unable to reach you.  For this reason, it is better to send
+bug reports to the mailing list.
+
+   The fundamental principle of reporting bugs usefully is this: *report
+all the facts*.  If you are not sure whether to state a fact or leave it
+out, state it!
+
+   Often people omit facts because they think they know what causes the
+problem and assume that some details do not matter.  Thus, you might
+assume that the name of the variable you use in an example does not
+matter.  Well, probably it does not, but one cannot be sure.  Perhaps
+the bug is a stray memory reference which happens to fetch from the
+location where that name is stored in memory; perhaps, if the name were
+different, the contents of that location would fool the debugger into
+doing the right thing despite the bug.  Play it safe and give a
+specific, complete example.  That is the easiest thing for you to do,
+and the most helpful.
+
+   Keep in mind that the purpose of a bug report is to enable us to fix
+the bug.  It may be that the bug has been reported previously, but
+neither you nor we can know that unless your bug report is complete and
+self-contained.
+
+   Sometimes people give a few sketchy facts and ask, "Does this ring a
+bell?"  Those bug reports are useless, and we urge everyone to _refuse
+to respond to them_ except to chide the sender to report bugs properly.
+
+   To enable us to fix the bug, you should include all these things:
+
+   * The version of GDB.  GDB announces it if you start with no
+     arguments; you can also print it at any time using 'show version'.
+
+     Without this, we will not know whether there is any point in
+     looking for the bug in the current version of GDB.
+
+   * The type of machine you are using, and the operating system name
+     and version number.
+
+   * The details of the GDB build-time configuration.  GDB shows these
+     details if you invoke it with the '--configuration' command-line
+     option, or if you type 'show configuration' at GDB's prompt.
+
+   * What compiler (and its version) was used to compile GDB--e.g.
+     "gcc-2.8.1".
+
+   * What compiler (and its version) was used to compile the program you
+     are debugging--e.g. "gcc-2.8.1", or "HP92453-01 A.10.32.03 HP C
+     Compiler".  For GCC, you can say 'gcc --version' to get this
+     information; for other compilers, see the documentation for those
+     compilers.
+
+   * The command arguments you gave the compiler to compile your example
+     and observe the bug.  For example, did you use '-O'?  To guarantee
+     you will not omit something important, list them all.  A copy of
+     the Makefile (or the output from make) is sufficient.
+
+     If we were to try to guess the arguments, we would probably guess
+     wrong and then we might not encounter the bug.
+
+   * A complete input script, and all necessary source files, that will
+     reproduce the bug.
+
+   * A description of what behavior you observe that you believe is
+     incorrect.  For example, "It gets a fatal signal."
+
+     Of course, if the bug is that GDB gets a fatal signal, then we will
+     certainly notice it.  But if the bug is incorrect output, we might
+     not notice unless it is glaringly wrong.  You might as well not
+     give us a chance to make a mistake.
+
+     Even if the problem you experience is a fatal signal, you should
+     still say so explicitly.  Suppose something strange is going on,
+     such as, your copy of GDB is out of synch, or you have encountered
+     a bug in the C library on your system.  (This has happened!)  Your
+     copy might crash and ours would not.  If you told us to expect a
+     crash, then when ours fails to crash, we would know that the bug
+     was not happening for us.  If you had not told us to expect a
+     crash, then we would not be able to draw any conclusion from our
+     observations.
+
+     To collect all this information, you can use a session recording
+     program such as 'script', which is available on many Unix systems.
+     Just run your GDB session inside 'script' and then include the
+     'typescript' file with your bug report.
+
+     Another way to record a GDB session is to run GDB inside Emacs and
+     then save the entire buffer to a file.
+
+   * If you wish to suggest changes to the GDB source, send us context
+     diffs.  If you even discuss something in the GDB source, refer to
+     it by context, not by line number.
+
+     The line numbers in our development sources will not match those in
+     your sources.  Your line numbers would convey no useful information
+     to us.
+
+   Here are some things that are not necessary:
+
+   * A description of the envelope of the bug.
+
+     Often people who encounter a bug spend a lot of time investigating
+     which changes to the input file will make the bug go away and which
+     changes will not affect it.
+
+     This is often time consuming and not very useful, because the way
+     we will find the bug is by running a single example under the
+     debugger with breakpoints, not by pure deduction from a series of
+     examples.  We recommend that you save your time for something else.
+
+     Of course, if you can find a simpler example to report _instead_ of
+     the original one, that is a convenience for us.  Errors in the
+     output will be easier to spot, running under the debugger will take
+     less time, and so on.
+
+     However, simplification is not vital; if you do not want to do
+     this, report the bug anyway and send us the entire test case you
+     used.
+
+   * A patch for the bug.
+
+     A patch for the bug does help us if it is a good one.  But do not
+     omit the necessary information, such as the test case, on the
+     assumption that a patch is all we need.  We might see problems with
+     your patch and decide to fix the problem another way, or we might
+     not understand it at all.
+
+     Sometimes with a program as complicated as GDB it is very hard to
+     construct an example that will make the program follow a certain
+     path through the code.  If you do not send us the example, we will
+     not be able to construct one, so we will not be able to verify that
+     the bug is fixed.
+
+     And if we cannot understand what bug you are trying to fix, or why
+     your patch should be an improvement, we will not install it.  A
+     test case will help us to understand.
+
+   * A guess about what the bug is or what it depends on.
+
+     Such guesses are usually wrong.  Even we cannot guess right about
+     such things without first using the debugger to find the facts.
+
+\1f
+File: gdb.info,  Node: Command Line Editing,  Next: Using History Interactively,  Prev: GDB Bugs,  Up: Top
+
+32 Command Line Editing
+***********************
+
+This chapter describes the basic features of the GNU command line
+editing interface.
+
+* Menu:
+
+* Introduction and Notation::  Notation used in this text.
+* Readline Interaction::       The minimum set of commands for editing a line.
+* Readline Init File::         Customizing Readline from a user's view.
+* Bindable Readline Commands:: A description of most of the Readline commands
+                               available for binding
+* Readline vi Mode::           A short description of how to make Readline
+                               behave like the vi editor.
+
+\1f
+File: gdb.info,  Node: Introduction and Notation,  Next: Readline Interaction,  Up: Command Line Editing
+
+32.1 Introduction to Line Editing
+=================================
+
+The following paragraphs describe the notation used to represent
+keystrokes.
+
+   The text 'C-k' is read as 'Control-K' and describes the character
+produced when the <k> key is pressed while the Control key is depressed.
+
+   The text 'M-k' is read as 'Meta-K' and describes the character
+produced when the Meta key (if you have one) is depressed, and the <k>
+key is pressed.  The Meta key is labeled <ALT> on many keyboards.  On
+keyboards with two keys labeled <ALT> (usually to either side of the
+space bar), the <ALT> on the left side is generally set to work as a
+Meta key.  The <ALT> key on the right may also be configured to work as
+a Meta key or may be configured as some other modifier, such as a
+Compose key for typing accented characters.
+
+   If you do not have a Meta or <ALT> key, or another key working as a
+Meta key, the identical keystroke can be generated by typing <ESC>
+_first_, and then typing <k>.  Either process is known as "metafying"
+the <k> key.
+
+   The text 'M-C-k' is read as 'Meta-Control-k' and describes the
+character produced by "metafying" 'C-k'.
+
+   In addition, several keys have their own names.  Specifically, <DEL>,
+<ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves when seen
+in this text, or in an init file (*note Readline Init File::).  If your
+keyboard lacks a <LFD> key, typing <C-j> will produce the desired
+character.  The <RET> key may be labeled <Return> or <Enter> on some
+keyboards.
+
+\1f
+File: gdb.info,  Node: Readline Interaction,  Next: Readline Init File,  Prev: Introduction and Notation,  Up: Command Line Editing
+
+32.2 Readline Interaction
+=========================
+
+Often during an interactive session you type in a long line of text,
+only to notice that the first word on the line is misspelled.  The
+Readline library gives you a set of commands for manipulating the text
+as you type it in, allowing you to just fix your typo, and not forcing
+you to retype the majority of the line.  Using these editing commands,
+you move the cursor to the place that needs correction, and delete or
+insert the text of the corrections.  Then, when you are satisfied with
+the line, you simply press <RET>.  You do not have to be at the end of
+the line to press <RET>; the entire line is accepted regardless of the
+location of the cursor within the line.
+
+* Menu:
+
+* Readline Bare Essentials::   The least you need to know about Readline.
+* Readline Movement Commands:: Moving about the input line.
+* Readline Killing Commands::  How to delete text, and how to get it back!
+* Readline Arguments::         Giving numeric arguments to commands.
+* Searching::                  Searching through previous lines.
+
+\1f
+File: gdb.info,  Node: Readline Bare Essentials,  Next: Readline Movement Commands,  Up: Readline Interaction
+
+32.2.1 Readline Bare Essentials
+-------------------------------
+
+In order to enter characters into the line, simply type them.  The typed
+character appears where the cursor was, and then the cursor moves one
+space to the right.  If you mistype a character, you can use your erase
+character to back up and delete the mistyped character.
+
+   Sometimes you may mistype a character, and not notice the error until
+you have typed several other characters.  In that case, you can type
+'C-b' to move the cursor to the left, and then correct your mistake.
+Afterwards, you can move the cursor to the right with 'C-f'.
+
+   When you add text in the middle of a line, you will notice that
+characters to the right of the cursor are 'pushed over' to make room for
+the text that you have inserted.  Likewise, when you delete text behind
+the cursor, characters to the right of the cursor are 'pulled back' to
+fill in the blank space created by the removal of the text.  A list of
+the bare essentials for editing the text of an input line follows.
+
+'C-b'
+     Move back one character.
+'C-f'
+     Move forward one character.
+<DEL> or <Backspace>
+     Delete the character to the left of the cursor.
+'C-d'
+     Delete the character underneath the cursor.
+Printing characters
+     Insert the character into the line at the cursor.
+'C-_' or 'C-x C-u'
+     Undo the last editing command.  You can undo all the way back to an
+     empty line.
+
+(Depending on your configuration, the <Backspace> key be set to delete
+the character to the left of the cursor and the <DEL> key set to delete
+the character underneath the cursor, like 'C-d', rather than the
+character to the left of the cursor.)
+
+\1f
+File: gdb.info,  Node: Readline Movement Commands,  Next: Readline Killing Commands,  Prev: Readline Bare Essentials,  Up: Readline Interaction
+
+32.2.2 Readline Movement Commands
+---------------------------------
+
+The above table describes the most basic keystrokes that you need in
+order to do editing of the input line.  For your convenience, many other
+commands have been added in addition to 'C-b', 'C-f', 'C-d', and <DEL>.
+Here are some commands for moving more rapidly about the line.
+
+'C-a'
+     Move to the start of the line.
+'C-e'
+     Move to the end of the line.
+'M-f'
+     Move forward a word, where a word is composed of letters and
+     digits.
+'M-b'
+     Move backward a word.
+'C-l'
+     Clear the screen, reprinting the current line at the top.
+
+   Notice how 'C-f' moves forward a character, while 'M-f' moves forward
+a word.  It is a loose convention that control keystrokes operate on
+characters while meta keystrokes operate on words.
+
+\1f
+File: gdb.info,  Node: Readline Killing Commands,  Next: Readline Arguments,  Prev: Readline Movement Commands,  Up: Readline Interaction
+
+32.2.3 Readline Killing Commands
+--------------------------------
+
+"Killing" text means to delete the text from the line, but to save it
+away for later use, usually by "yanking" (re-inserting) it back into the
+line.  ('Cut' and 'paste' are more recent jargon for 'kill' and 'yank'.)
+
+   If the description for a command says that it 'kills' text, then you
+can be sure that you can get the text back in a different (or the same)
+place later.
+
+   When you use a kill command, the text is saved in a "kill-ring".  Any
+number of consecutive kills save all of the killed text together, so
+that when you yank it back, you get it all.  The kill ring is not line
+specific; the text that you killed on a previously typed line is
+available to be yanked back later, when you are typing another line.
+
+   Here is the list of commands for killing text.
+
+'C-k'
+     Kill the text from the current cursor position to the end of the
+     line.
+
+'M-d'
+     Kill from the cursor to the end of the current word, or, if between
+     words, to the end of the next word.  Word boundaries are the same
+     as those used by 'M-f'.
+
+'M-<DEL>'
+     Kill from the cursor the start of the current word, or, if between
+     words, to the start of the previous word.  Word boundaries are the
+     same as those used by 'M-b'.
+
+'C-w'
+     Kill from the cursor to the previous whitespace.  This is different
+     than 'M-<DEL>' because the word boundaries differ.
+
+   Here is how to "yank" the text back into the line.  Yanking means to
+copy the most-recently-killed text from the kill buffer.
+
+'C-y'
+     Yank the most recently killed text back into the buffer at the
+     cursor.
+
+'M-y'
+     Rotate the kill-ring, and yank the new top.  You can only do this
+     if the prior command is 'C-y' or 'M-y'.
+
+\1f
+File: gdb.info,  Node: Readline Arguments,  Next: Searching,  Prev: Readline Killing Commands,  Up: Readline Interaction
+
+32.2.4 Readline Arguments
+-------------------------
+
+You can pass numeric arguments to Readline commands.  Sometimes the
+argument acts as a repeat count, other times it is the sign of the
+argument that is significant.  If you pass a negative argument to a
+command which normally acts in a forward direction, that command will
+act in a backward direction.  For example, to kill text back to the
+start of the line, you might type 'M-- C-k'.
+
+   The general way to pass numeric arguments to a command is to type
+meta digits before the command.  If the first 'digit' typed is a minus
+sign ('-'), then the sign of the argument will be negative.  Once you
+have typed one meta digit to get the argument started, you can type the
+remainder of the digits, and then the command.  For example, to give the
+'C-d' command an argument of 10, you could type 'M-1 0 C-d', which will
+delete the next ten characters on the input line.
+
+\1f
+File: gdb.info,  Node: Searching,  Prev: Readline Arguments,  Up: Readline Interaction
+
+32.2.5 Searching for Commands in the History
+--------------------------------------------
+
+Readline provides commands for searching through the command history for
+lines containing a specified string.  There are two search modes:
+"incremental" and "non-incremental".
+
+   Incremental searches begin before the user has finished typing the
+search string.  As each character of the search string is typed,
+Readline displays the next entry from the history matching the string
+typed so far.  An incremental search requires only as many characters as
+needed to find the desired history entry.  To search backward in the
+history for a particular string, type 'C-r'.  Typing 'C-s' searches
+forward through the history.  The characters present in the value of the
+'isearch-terminators' variable are used to terminate an incremental
+search.  If that variable has not been assigned a value, the <ESC> and
+'C-J' characters will terminate an incremental search.  'C-g' will abort
+an incremental search and restore the original line.  When the search is
+terminated, the history entry containing the search string becomes the
+current line.
+
+   To find other matching entries in the history list, type 'C-r' or
+'C-s' as appropriate.  This will search backward or forward in the
+history for the next entry matching the search string typed so far.  Any
+other key sequence bound to a Readline command will terminate the search
+and execute that command.  For instance, a <RET> will terminate the
+search and accept the line, thereby executing the command from the
+history list.  A movement command will terminate the search, make the
+last line found the current line, and begin editing.
+
+   Readline remembers the last incremental search string.  If two 'C-r's
+are typed without any intervening characters defining a new search
+string, any remembered search string is used.
+
+   Non-incremental searches read the entire search string before
+starting to search for matching history lines.  The search string may be
+typed by the user or be part of the contents of the current line.
+
+\1f
+File: gdb.info,  Node: Readline Init File,  Next: Bindable Readline Commands,  Prev: Readline Interaction,  Up: Command Line Editing
+
+32.3 Readline Init File
+=======================
+
+Although the Readline library comes with a set of Emacs-like keybindings
+installed by default, it is possible to use a different set of
+keybindings.  Any user can customize programs that use Readline by
+putting commands in an "inputrc" file, conventionally in his home
+directory.  The name of this file is taken from the value of the
+environment variable 'INPUTRC'.  If that variable is unset, the default
+is '~/.inputrc'.  If that file does not exist or cannot be read, the
+ultimate default is '/etc/inputrc'.
+
+   When a program which uses the Readline library starts up, the init
+file is read, and the key bindings are set.
+
+   In addition, the 'C-x C-r' command re-reads this init file, thus
+incorporating any changes that you might have made to it.
+
+* Menu:
+
+* Readline Init File Syntax::  Syntax for the commands in the inputrc file.
+
+* Conditional Init Constructs::        Conditional key bindings in the inputrc file.
+
+* Sample Init File::           An example inputrc file.
+
+\1f
+File: gdb.info,  Node: Readline Init File Syntax,  Next: Conditional Init Constructs,  Up: Readline Init File
+
+32.3.1 Readline Init File Syntax
+--------------------------------
+
+There are only a few basic constructs allowed in the Readline init file.
+Blank lines are ignored.  Lines beginning with a '#' are comments.
+Lines beginning with a '$' indicate conditional constructs (*note
+Conditional Init Constructs::).  Other lines denote variable settings
+and key bindings.
+
+Variable Settings
+     You can modify the run-time behavior of Readline by altering the
+     values of variables in Readline using the 'set' command within the
+     init file.  The syntax is simple:
+
+          set VARIABLE VALUE
+
+     Here, for example, is how to change from the default Emacs-like key
+     binding to use 'vi' line editing commands:
+
+          set editing-mode vi
+
+     Variable names and values, where appropriate, are recognized
+     without regard to case.  Unrecognized variable names are ignored.
+
+     Boolean variables (those that can be set to on or off) are set to
+     on if the value is null or empty, ON (case-insensitive), or 1.  Any
+     other value results in the variable being set to off.
+
+     A great deal of run-time behavior is changeable with the following
+     variables.
+
+     'bell-style'
+          Controls what happens when Readline wants to ring the terminal
+          bell.  If set to 'none', Readline never rings the bell.  If
+          set to 'visible', Readline uses a visible bell if one is
+          available.  If set to 'audible' (the default), Readline
+          attempts to ring the terminal's bell.
+
+     'bind-tty-special-chars'
+          If set to 'on', Readline attempts to bind the control
+          characters treated specially by the kernel's terminal driver
+          to their Readline equivalents.
+
+     'comment-begin'
+          The string to insert at the beginning of the line when the
+          'insert-comment' command is executed.  The default value is
+          '"#"'.
+
+     'completion-display-width'
+          The number of screen columns used to display possible matches
+          when performing completion.  The value is ignored if it is
+          less than 0 or greater than the terminal screen width.  A
+          value of 0 will cause matches to be displayed one per line.
+          The default value is -1.
+
+     'completion-ignore-case'
+          If set to 'on', Readline performs filename matching and
+          completion in a case-insensitive fashion.  The default value
+          is 'off'.
+
+     'completion-map-case'
+          If set to 'on', and COMPLETION-IGNORE-CASE is enabled,
+          Readline treats hyphens ('-') and underscores ('_') as
+          equivalent when performing case-insensitive filename matching
+          and completion.
+
+     'completion-prefix-display-length'
+          The length in characters of the common prefix of a list of
+          possible completions that is displayed without modification.
+          When set to a value greater than zero, common prefixes longer
+          than this value are replaced with an ellipsis when displaying
+          possible completions.
+
+     'completion-query-items'
+          The number of possible completions that determines when the
+          user is asked whether the list of possibilities should be
+          displayed.  If the number of possible completions is greater
+          than this value, Readline will ask the user whether or not he
+          wishes to view them; otherwise, they are simply listed.  This
+          variable must be set to an integer value greater than or equal
+          to 0.  A negative value means Readline should never ask.  The
+          default limit is '100'.
+
+     'convert-meta'
+          If set to 'on', Readline will convert characters with the
+          eighth bit set to an ASCII key sequence by stripping the
+          eighth bit and prefixing an <ESC> character, converting them
+          to a meta-prefixed key sequence.  The default value is 'on'.
+
+     'disable-completion'
+          If set to 'On', Readline will inhibit word completion.
+          Completion characters will be inserted into the line as if
+          they had been mapped to 'self-insert'.  The default is 'off'.
+
+     'editing-mode'
+          The 'editing-mode' variable controls which default set of key
+          bindings is used.  By default, Readline starts up in Emacs
+          editing mode, where the keystrokes are most similar to Emacs.
+          This variable can be set to either 'emacs' or 'vi'.
+
+     'echo-control-characters'
+          When set to 'on', on operating systems that indicate they
+          support it, readline echoes a character corresponding to a
+          signal generated from the keyboard.  The default is 'on'.
+
+     'enable-keypad'
+          When set to 'on', Readline will try to enable the application
+          keypad when it is called.  Some systems need this to enable
+          the arrow keys.  The default is 'off'.
+
+     'enable-meta-key'
+          When set to 'on', Readline will try to enable any meta
+          modifier key the terminal claims to support when it is called.
+          On many terminals, the meta key is used to send eight-bit
+          characters.  The default is 'on'.
+
+     'expand-tilde'
+          If set to 'on', tilde expansion is performed when Readline
+          attempts word completion.  The default is 'off'.
+
+     'history-preserve-point'
+          If set to 'on', the history code attempts to place the point
+          (the current cursor position) at the same location on each
+          history line retrieved with 'previous-history' or
+          'next-history'.  The default is 'off'.
+
+     'history-size'
+          Set the maximum number of history entries saved in the history
+          list.  If set to zero, the number of entries in the history
+          list is not limited.
+
+     'horizontal-scroll-mode'
+          This variable can be set to either 'on' or 'off'.  Setting it
+          to 'on' means that the text of the lines being edited will
+          scroll horizontally on a single screen line when they are
+          longer than the width of the screen, instead of wrapping onto
+          a new screen line.  By default, this variable is set to 'off'.
+
+     'input-meta'
+          If set to 'on', Readline will enable eight-bit input (it will
+          not clear the eighth bit in the characters it reads),
+          regardless of what the terminal claims it can support.  The
+          default value is 'off'.  The name 'meta-flag' is a synonym for
+          this variable.
+
+     'isearch-terminators'
+          The string of characters that should terminate an incremental
+          search without subsequently executing the character as a
+          command (*note Searching::).  If this variable has not been
+          given a value, the characters <ESC> and 'C-J' will terminate
+          an incremental search.
+
+     'keymap'
+          Sets Readline's idea of the current keymap for key binding
+          commands.  Acceptable 'keymap' names are 'emacs',
+          'emacs-standard', 'emacs-meta', 'emacs-ctlx', 'vi', 'vi-move',
+          'vi-command', and 'vi-insert'.  'vi' is equivalent to
+          'vi-command'; 'emacs' is equivalent to 'emacs-standard'.  The
+          default value is 'emacs'.  The value of the 'editing-mode'
+          variable also affects the default keymap.
+
+     'mark-directories'
+          If set to 'on', completed directory names have a slash
+          appended.  The default is 'on'.
+
+     'mark-modified-lines'
+          This variable, when set to 'on', causes Readline to display an
+          asterisk ('*') at the start of history lines which have been
+          modified.  This variable is 'off' by default.
+
+     'mark-symlinked-directories'
+          If set to 'on', completed names which are symbolic links to
+          directories have a slash appended (subject to the value of
+          'mark-directories').  The default is 'off'.
+
+     'match-hidden-files'
+          This variable, when set to 'on', causes Readline to match
+          files whose names begin with a '.' (hidden files) when
+          performing filename completion.  If set to 'off', the leading
+          '.' must be supplied by the user in the filename to be
+          completed.  This variable is 'on' by default.
+
+     'menu-complete-display-prefix'
+          If set to 'on', menu completion displays the common prefix of
+          the list of possible completions (which may be empty) before
+          cycling through the list.  The default is 'off'.
+
+     'output-meta'
+          If set to 'on', Readline will display characters with the
+          eighth bit set directly rather than as a meta-prefixed escape
+          sequence.  The default is 'off'.
+
+     'page-completions'
+          If set to 'on', Readline uses an internal 'more'-like pager to
+          display a screenful of possible completions at a time.  This
+          variable is 'on' by default.
+
+     'print-completions-horizontally'
+          If set to 'on', Readline will display completions with matches
+          sorted horizontally in alphabetical order, rather than down
+          the screen.  The default is 'off'.
+
+     'revert-all-at-newline'
+          If set to 'on', Readline will undo all changes to history
+          lines before returning when 'accept-line' is executed.  By
+          default, history lines may be modified and retain individual
+          undo lists across calls to 'readline'.  The default is 'off'.
+
+     'show-all-if-ambiguous'
+          This alters the default behavior of the completion functions.
+          If set to 'on', words which have more than one possible
+          completion cause the matches to be listed immediately instead
+          of ringing the bell.  The default value is 'off'.
+
+     'show-all-if-unmodified'
+          This alters the default behavior of the completion functions
+          in a fashion similar to SHOW-ALL-IF-AMBIGUOUS.  If set to
+          'on', words which have more than one possible completion
+          without any possible partial completion (the possible
+          completions don't share a common prefix) cause the matches to
+          be listed immediately instead of ringing the bell.  The
+          default value is 'off'.
+
+     'skip-completed-text'
+          If set to 'on', this alters the default completion behavior
+          when inserting a single match into the line.  It's only active
+          when performing completion in the middle of a word.  If
+          enabled, readline does not insert characters from the
+          completion that match characters after point in the word being
+          completed, so portions of the word following the cursor are
+          not duplicated.  For instance, if this is enabled, attempting
+          completion when the cursor is after the 'e' in 'Makefile' will
+          result in 'Makefile' rather than 'Makefilefile', assuming
+          there is a single possible completion.  The default value is
+          'off'.
+
+     'visible-stats'
+          If set to 'on', a character denoting a file's type is appended
+          to the filename when listing possible completions.  The
+          default is 'off'.
+
+Key Bindings
+     The syntax for controlling key bindings in the init file is simple.
+     First you need to find the name of the command that you want to
+     change.  The following sections contain tables of the command name,
+     the default keybinding, if any, and a short description of what the
+     command does.
+
+     Once you know the name of the command, simply place on a line in
+     the init file the name of the key you wish to bind the command to,
+     a colon, and then the name of the command.  There can be no space
+     between the key name and the colon - that will be interpreted as
+     part of the key name.  The name of the key can be expressed in
+     different ways, depending on what you find most comfortable.
+
+     In addition to command names, readline allows keys to be bound to a
+     string that is inserted when the key is pressed (a MACRO).
+
+     KEYNAME: FUNCTION-NAME or MACRO
+          KEYNAME is the name of a key spelled out in English.  For
+          example:
+               Control-u: universal-argument
+               Meta-Rubout: backward-kill-word
+               Control-o: "> output"
+
+          In the above example, 'C-u' is bound to the function
+          'universal-argument', 'M-DEL' is bound to the function
+          'backward-kill-word', and 'C-o' is bound to run the macro
+          expressed on the right hand side (that is, to insert the text
+          '> output' into the line).
+
+          A number of symbolic character names are recognized while
+          processing this key binding syntax: DEL, ESC, ESCAPE, LFD,
+          NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.
+
+     "KEYSEQ": FUNCTION-NAME or MACRO
+          KEYSEQ differs from KEYNAME above in that strings denoting an
+          entire key sequence can be specified, by placing the key
+          sequence in double quotes.  Some GNU Emacs style key escapes
+          can be used, as in the following example, but the special
+          character names are not recognized.
+
+               "\C-u": universal-argument
+               "\C-x\C-r": re-read-init-file
+               "\e[11~": "Function Key 1"
+
+          In the above example, 'C-u' is again bound to the function
+          'universal-argument' (just as it was in the first example),
+          ''C-x' 'C-r'' is bound to the function 're-read-init-file',
+          and '<ESC> <[> <1> <1> <~>' is bound to insert the text
+          'Function Key 1'.
+
+     The following GNU Emacs style escape sequences are available when
+     specifying key sequences:
+
+     '\C-'
+          control prefix
+     '\M-'
+          meta prefix
+     '\e'
+          an escape character
+     '\\'
+          backslash
+     '\"'
+          <">, a double quotation mark
+     '\''
+          <'>, a single quote or apostrophe
+
+     In addition to the GNU Emacs style escape sequences, a second set
+     of backslash escapes is available:
+
+     '\a'
+          alert (bell)
+     '\b'
+          backspace
+     '\d'
+          delete
+     '\f'
+          form feed
+     '\n'
+          newline
+     '\r'
+          carriage return
+     '\t'
+          horizontal tab
+     '\v'
+          vertical tab
+     '\NNN'
+          the eight-bit character whose value is the octal value NNN
+          (one to three digits)
+     '\xHH'
+          the eight-bit character whose value is the hexadecimal value
+          HH (one or two hex digits)
+
+     When entering the text of a macro, single or double quotes must be
+     used to indicate a macro definition.  Unquoted text is assumed to
+     be a function name.  In the macro body, the backslash escapes
+     described above are expanded.  Backslash will quote any other
+     character in the macro text, including '"' and '''.  For example,
+     the following binding will make ''C-x' \' insert a single '\' into
+     the line:
+          "\C-x\\": "\\"
+
+\1f
+File: gdb.info,  Node: Conditional Init Constructs,  Next: Sample Init File,  Prev: Readline Init File Syntax,  Up: Readline Init File
+
+32.3.2 Conditional Init Constructs
+----------------------------------
+
+Readline implements a facility similar in spirit to the conditional
+compilation features of the C preprocessor which allows key bindings and
+variable settings to be performed as the result of tests.  There are
+four parser directives used.
+
+'$if'
+     The '$if' construct allows bindings to be made based on the editing
+     mode, the terminal being used, or the application using Readline.
+     The text of the test extends to the end of the line; no characters
+     are required to isolate it.
+
+     'mode'
+          The 'mode=' form of the '$if' directive is used to test
+          whether Readline is in 'emacs' or 'vi' mode.  This may be used
+          in conjunction with the 'set keymap' command, for instance, to
+          set bindings in the 'emacs-standard' and 'emacs-ctlx' keymaps
+          only if Readline is starting out in 'emacs' mode.
+
+     'term'
+          The 'term=' form may be used to include terminal-specific key
+          bindings, perhaps to bind the key sequences output by the
+          terminal's function keys.  The word on the right side of the
+          '=' is tested against both the full name of the terminal and
+          the portion of the terminal name before the first '-'.  This
+          allows 'sun' to match both 'sun' and 'sun-cmd', for instance.
+
+     'application'
+          The APPLICATION construct is used to include
+          application-specific settings.  Each program using the
+          Readline library sets the APPLICATION NAME, and you can test
+          for a particular value.  This could be used to bind key
+          sequences to functions useful for a specific program.  For
+          instance, the following command adds a key sequence that
+          quotes the current or previous word in Bash:
+               $if Bash
+               # Quote the current or previous word
+               "\C-xq": "\eb\"\ef\""
+               $endif
+
+'$endif'
+     This command, as seen in the previous example, terminates an '$if'
+     command.
+
+'$else'
+     Commands in this branch of the '$if' directive are executed if the
+     test fails.
+
+'$include'
+     This directive takes a single filename as an argument and reads
+     commands and bindings from that file.  For example, the following
+     directive reads from '/etc/inputrc':
+          $include /etc/inputrc
+
+\1f
+File: gdb.info,  Node: Sample Init File,  Prev: Conditional Init Constructs,  Up: Readline Init File
+
+32.3.3 Sample Init File
+-----------------------
+
+Here is an example of an INPUTRC file.  This illustrates key binding,
+variable assignment, and conditional syntax.
+
+     # This file controls the behaviour of line input editing for
+     # programs that use the GNU Readline library.  Existing
+     # programs include FTP, Bash, and GDB.
+     #
+     # You can re-read the inputrc file with C-x C-r.
+     # Lines beginning with '#' are comments.
+     #
+     # First, include any systemwide bindings and variable
+     # assignments from /etc/Inputrc
+     $include /etc/Inputrc
+
+     #
+     # Set various bindings for emacs mode.
+
+     set editing-mode emacs
+
+     $if mode=emacs
+
+     Meta-Control-h:   backward-kill-word      Text after the function name is ignored
+
+     #
+     # Arrow keys in keypad mode
+     #
+     #"\M-OD":        backward-char
+     #"\M-OC":        forward-char
+     #"\M-OA":        previous-history
+     #"\M-OB":        next-history
+     #
+     # Arrow keys in ANSI mode
+     #
+     "\M-[D":        backward-char
+     "\M-[C":        forward-char
+     "\M-[A":        previous-history
+     "\M-[B":        next-history
+     #
+     # Arrow keys in 8 bit keypad mode
+     #
+     #"\M-\C-OD":       backward-char
+     #"\M-\C-OC":       forward-char
+     #"\M-\C-OA":       previous-history
+     #"\M-\C-OB":       next-history
+     #
+     # Arrow keys in 8 bit ANSI mode
+     #
+     #"\M-\C-[D":       backward-char
+     #"\M-\C-[C":       forward-char
+     #"\M-\C-[A":       previous-history
+     #"\M-\C-[B":       next-history
+
+     C-q: quoted-insert
+
+     $endif
+
+     # An old-style binding.  This happens to be the default.
+     TAB: complete
+
+     # Macros that are convenient for shell interaction
+     $if Bash
+     # edit the path
+     "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
+     # prepare to type a quoted word --
+     # insert open and close double quotes
+     # and move to just after the open quote
+     "\C-x\"": "\"\"\C-b"
+     # insert a backslash (testing backslash escapes
+     # in sequences and macros)
+     "\C-x\\": "\\"
+     # Quote the current or previous word
+     "\C-xq": "\eb\"\ef\""
+     # Add a binding to refresh the line, which is unbound
+     "\C-xr": redraw-current-line
+     # Edit variable on current line.
+     "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
+     $endif
+
+     # use a visible bell if one is available
+     set bell-style visible
+
+     # don't strip characters to 7 bits when reading
+     set input-meta on
+
+     # allow iso-latin1 characters to be inserted rather
+     # than converted to prefix-meta sequences
+     set convert-meta off
+
+     # display characters with the eighth bit set directly
+     # rather than as meta-prefixed characters
+     set output-meta on
+
+     # if there are more than 150 possible completions for
+     # a word, ask the user if he wants to see all of them
+     set completion-query-items 150
+
+     # For FTP
+     $if Ftp
+     "\C-xg": "get \M-?"
+     "\C-xt": "put \M-?"
+     "\M-.": yank-last-arg
+     $endif
+
+\1f
+File: gdb.info,  Node: Bindable Readline Commands,  Next: Readline vi Mode,  Prev: Readline Init File,  Up: Command Line Editing
+
+32.4 Bindable Readline Commands
+===============================
+
+* Menu:
+
+* Commands For Moving::                Moving about the line.
+* Commands For History::       Getting at previous lines.
+* Commands For Text::          Commands for changing text.
+* Commands For Killing::       Commands for killing and yanking.
+* Numeric Arguments::          Specifying numeric arguments, repeat counts.
+* Commands For Completion::    Getting Readline to do the typing for you.
+* Keyboard Macros::            Saving and re-executing typed characters
+* Miscellaneous Commands::     Other miscellaneous commands.
+
+This section describes Readline commands that may be bound to key
+sequences.  Command names without an accompanying key sequence are
+unbound by default.
+
+   In the following descriptions, "point" refers to the current cursor
+position, and "mark" refers to a cursor position saved by the 'set-mark'
+command.  The text between the point and mark is referred to as the
+"region".
+
+\1f
+File: gdb.info,  Node: Commands For Moving,  Next: Commands For History,  Up: Bindable Readline Commands
+
+32.4.1 Commands For Moving
+--------------------------
+
+'beginning-of-line (C-a)'
+     Move to the start of the current line.
+
+'end-of-line (C-e)'
+     Move to the end of the line.
+
+'forward-char (C-f)'
+     Move forward a character.
+
+'backward-char (C-b)'
+     Move back a character.
+
+'forward-word (M-f)'
+     Move forward to the end of the next word.  Words are composed of
+     letters and digits.
+
+'backward-word (M-b)'
+     Move back to the start of the current or previous word.  Words are
+     composed of letters and digits.
+
+'clear-screen (C-l)'
+     Clear the screen and redraw the current line, leaving the current
+     line at the top of the screen.
+
+'redraw-current-line ()'
+     Refresh the current line.  By default, this is unbound.
+
+\1f
+File: gdb.info,  Node: Commands For History,  Next: Commands For Text,  Prev: Commands For Moving,  Up: Bindable Readline Commands
+
+32.4.2 Commands For Manipulating The History
+--------------------------------------------
+
+'accept-line (Newline or Return)'
+     Accept the line regardless of where the cursor is.  If this line is
+     non-empty, it may be added to the history list for future recall
+     with 'add_history()'.  If this line is a modified history line, the
+     history line is restored to its original state.
+
+'previous-history (C-p)'
+     Move 'back' through the history list, fetching the previous
+     command.
+
+'next-history (C-n)'
+     Move 'forward' through the history list, fetching the next command.
+
+'beginning-of-history (M-<)'
+     Move to the first line in the history.
+
+'end-of-history (M->)'
+     Move to the end of the input history, i.e., the line currently
+     being entered.
+
+'reverse-search-history (C-r)'
+     Search backward starting at the current line and moving 'up'
+     through the history as necessary.  This is an incremental search.
+
+'forward-search-history (C-s)'
+     Search forward starting at the current line and moving 'down'
+     through the the history as necessary.  This is an incremental
+     search.
+
+'non-incremental-reverse-search-history (M-p)'
+     Search backward starting at the current line and moving 'up'
+     through the history as necessary using a non-incremental search for
+     a string supplied by the user.
+
+'non-incremental-forward-search-history (M-n)'
+     Search forward starting at the current line and moving 'down'
+     through the the history as necessary using a non-incremental search
+     for a string supplied by the user.
+
+'history-search-forward ()'
+     Search forward through the history for the string of characters
+     between the start of the current line and the point.  This is a
+     non-incremental search.  By default, this command is unbound.
+
+'history-search-backward ()'
+     Search backward through the history for the string of characters
+     between the start of the current line and the point.  This is a
+     non-incremental search.  By default, this command is unbound.
+
+'yank-nth-arg (M-C-y)'
+     Insert the first argument to the previous command (usually the
+     second word on the previous line) at point.  With an argument N,
+     insert the Nth word from the previous command (the words in the
+     previous command begin with word 0).  A negative argument inserts
+     the Nth word from the end of the previous command.  Once the
+     argument N is computed, the argument is extracted as if the '!N'
+     history expansion had been specified.
+
+'yank-last-arg (M-. or M-_)'
+     Insert last argument to the previous command (the last word of the
+     previous history entry).  With a numeric argument, behave exactly
+     like 'yank-nth-arg'.  Successive calls to 'yank-last-arg' move back
+     through the history list, inserting the last word (or the word
+     specified by the argument to the first call) of each line in turn.
+     Any numeric argument supplied to these successive calls determines
+     the direction to move through the history.  A negative argument
+     switches the direction through the history (back or forward).  The
+     history expansion facilities are used to extract the last argument,
+     as if the '!$' history expansion had been specified.
+
+\1f
+File: gdb.info,  Node: Commands For Text,  Next: Commands For Killing,  Prev: Commands For History,  Up: Bindable Readline Commands
+
+32.4.3 Commands For Changing Text
+---------------------------------
+
+'delete-char (C-d)'
+     Delete the character at point.  If point is at the beginning of the
+     line, there are no characters in the line, and the last character
+     typed was not bound to 'delete-char', then return EOF.
+
+'backward-delete-char (Rubout)'
+     Delete the character behind the cursor.  A numeric argument means
+     to kill the characters instead of deleting them.
+
+'forward-backward-delete-char ()'
+     Delete the character under the cursor, unless the cursor is at the
+     end of the line, in which case the character behind the cursor is
+     deleted.  By default, this is not bound to a key.
+
+'quoted-insert (C-q or C-v)'
+     Add the next character typed to the line verbatim.  This is how to
+     insert key sequences like 'C-q', for example.
+
+'tab-insert (M-<TAB>)'
+     Insert a tab character.
+
+'self-insert (a, b, A, 1, !, ...)'
+     Insert yourself.
+
+'transpose-chars (C-t)'
+     Drag the character before the cursor forward over the character at
+     the cursor, moving the cursor forward as well.  If the insertion
+     point is at the end of the line, then this transposes the last two
+     characters of the line.  Negative arguments have no effect.
+
+'transpose-words (M-t)'
+     Drag the word before point past the word after point, moving point
+     past that word as well.  If the insertion point is at the end of
+     the line, this transposes the last two words on the line.
+
+'upcase-word (M-u)'
+     Uppercase the current (or following) word.  With a negative
+     argument, uppercase the previous word, but do not move the cursor.
+
+'downcase-word (M-l)'
+     Lowercase the current (or following) word.  With a negative
+     argument, lowercase the previous word, but do not move the cursor.
+
+'capitalize-word (M-c)'
+     Capitalize the current (or following) word.  With a negative
+     argument, capitalize the previous word, but do not move the cursor.
+
+'overwrite-mode ()'
+     Toggle overwrite mode.  With an explicit positive numeric argument,
+     switches to overwrite mode.  With an explicit non-positive numeric
+     argument, switches to insert mode.  This command affects only
+     'emacs' mode; 'vi' mode does overwrite differently.  Each call to
+     'readline()' starts in insert mode.
+
+     In overwrite mode, characters bound to 'self-insert' replace the
+     text at point rather than pushing the text to the right.
+     Characters bound to 'backward-delete-char' replace the character
+     before point with a space.
+
+     By default, this command is unbound.
+
+\1f
+File: gdb.info,  Node: Commands For Killing,  Next: Numeric Arguments,  Prev: Commands For Text,  Up: Bindable Readline Commands
+
+32.4.4 Killing And Yanking
+--------------------------
+
+'kill-line (C-k)'
+     Kill the text from point to the end of the line.
+
+'backward-kill-line (C-x Rubout)'
+     Kill backward to the beginning of the line.
+
+'unix-line-discard (C-u)'
+     Kill backward from the cursor to the beginning of the current line.
+
+'kill-whole-line ()'
+     Kill all characters on the current line, no matter where point is.
+     By default, this is unbound.
+
+'kill-word (M-d)'
+     Kill from point to the end of the current word, or if between
+     words, to the end of the next word.  Word boundaries are the same
+     as 'forward-word'.
+
+'backward-kill-word (M-<DEL>)'
+     Kill the word behind point.  Word boundaries are the same as
+     'backward-word'.
+
+'unix-word-rubout (C-w)'
+     Kill the word behind point, using white space as a word boundary.
+     The killed text is saved on the kill-ring.
+
+'unix-filename-rubout ()'
+     Kill the word behind point, using white space and the slash
+     character as the word boundaries.  The killed text is saved on the
+     kill-ring.
+
+'delete-horizontal-space ()'
+     Delete all spaces and tabs around point.  By default, this is
+     unbound.
+
+'kill-region ()'
+     Kill the text in the current region.  By default, this command is
+     unbound.
+
+'copy-region-as-kill ()'
+     Copy the text in the region to the kill buffer, so it can be yanked
+     right away.  By default, this command is unbound.
+
+'copy-backward-word ()'
+     Copy the word before point to the kill buffer.  The word boundaries
+     are the same as 'backward-word'.  By default, this command is
+     unbound.
+
+'copy-forward-word ()'
+     Copy the word following point to the kill buffer.  The word
+     boundaries are the same as 'forward-word'.  By default, this
+     command is unbound.
+
+'yank (C-y)'
+     Yank the top of the kill ring into the buffer at point.
+
+'yank-pop (M-y)'
+     Rotate the kill-ring, and yank the new top.  You can only do this
+     if the prior command is 'yank' or 'yank-pop'.
+
+\1f
+File: gdb.info,  Node: Numeric Arguments,  Next: Commands For Completion,  Prev: Commands For Killing,  Up: Bindable Readline Commands
+
+32.4.5 Specifying Numeric Arguments
+-----------------------------------
+
+'digit-argument (M-0, M-1, ... M--)'
+     Add this digit to the argument already accumulating, or start a new
+     argument.  'M--' starts a negative argument.
+
+'universal-argument ()'
+     This is another way to specify an argument.  If this command is
+     followed by one or more digits, optionally with a leading minus
+     sign, those digits define the argument.  If the command is followed
+     by digits, executing 'universal-argument' again ends the numeric
+     argument, but is otherwise ignored.  As a special case, if this
+     command is immediately followed by a character that is neither a
+     digit or minus sign, the argument count for the next command is
+     multiplied by four.  The argument count is initially one, so
+     executing this function the first time makes the argument count
+     four, a second time makes the argument count sixteen, and so on.
+     By default, this is not bound to a key.
+
+\1f
+File: gdb.info,  Node: Commands For Completion,  Next: Keyboard Macros,  Prev: Numeric Arguments,  Up: Bindable Readline Commands
+
+32.4.6 Letting Readline Type For You
+------------------------------------
+
+'complete (<TAB>)'
+     Attempt to perform completion on the text before point.  The actual
+     completion performed is application-specific.  The default is
+     filename completion.
+
+'possible-completions (M-?)'
+     List the possible completions of the text before point.  When
+     displaying completions, Readline sets the number of columns used
+     for display to the value of 'completion-display-width', the value
+     of the environment variable 'COLUMNS', or the screen width, in that
+     order.
+
+'insert-completions (M-*)'
+     Insert all completions of the text before point that would have
+     been generated by 'possible-completions'.
+
+'menu-complete ()'
+     Similar to 'complete', but replaces the word to be completed with a
+     single match from the list of possible completions.  Repeated
+     execution of 'menu-complete' steps through the list of possible
+     completions, inserting each match in turn.  At the end of the list
+     of completions, the bell is rung (subject to the setting of
+     'bell-style') and the original text is restored.  An argument of N
+     moves N positions forward in the list of matches; a negative
+     argument may be used to move backward through the list.  This
+     command is intended to be bound to <TAB>, but is unbound by
+     default.
+
+'menu-complete-backward ()'
+     Identical to 'menu-complete', but moves backward through the list
+     of possible completions, as if 'menu-complete' had been given a
+     negative argument.
+
+'delete-char-or-list ()'
+     Deletes the character under the cursor if not at the beginning or
+     end of the line (like 'delete-char').  If at the end of the line,
+     behaves identically to 'possible-completions'.  This command is
+     unbound by default.
+
+\1f
+File: gdb.info,  Node: Keyboard Macros,  Next: Miscellaneous Commands,  Prev: Commands For Completion,  Up: Bindable Readline Commands
+
+32.4.7 Keyboard Macros
+----------------------
+
+'start-kbd-macro (C-x ()'
+     Begin saving the characters typed into the current keyboard macro.
+
+'end-kbd-macro (C-x ))'
+     Stop saving the characters typed into the current keyboard macro
+     and save the definition.
+
+'call-last-kbd-macro (C-x e)'
+     Re-execute the last keyboard macro defined, by making the
+     characters in the macro appear as if typed at the keyboard.
+
+\1f
+File: gdb.info,  Node: Miscellaneous Commands,  Prev: Keyboard Macros,  Up: Bindable Readline Commands
+
+32.4.8 Some Miscellaneous Commands
+----------------------------------
+
+'re-read-init-file (C-x C-r)'
+     Read in the contents of the INPUTRC file, and incorporate any
+     bindings or variable assignments found there.
+
+'abort (C-g)'
+     Abort the current editing command and ring the terminal's bell
+     (subject to the setting of 'bell-style').
+
+'do-uppercase-version (M-a, M-b, M-X, ...)'
+     If the metafied character X is lowercase, run the command that is
+     bound to the corresponding uppercase character.
+
+'prefix-meta (<ESC>)'
+     Metafy the next character typed.  This is for keyboards without a
+     meta key.  Typing '<ESC> f' is equivalent to typing 'M-f'.
+
+'undo (C-_ or C-x C-u)'
+     Incremental undo, separately remembered for each line.
+
+'revert-line (M-r)'
+     Undo all changes made to this line.  This is like executing the
+     'undo' command enough times to get back to the beginning.
+
+'tilde-expand (M-~)'
+     Perform tilde expansion on the current word.
+
+'set-mark (C-@)'
+     Set the mark to the point.  If a numeric argument is supplied, the
+     mark is set to that position.
+
+'exchange-point-and-mark (C-x C-x)'
+     Swap the point with the mark.  The current cursor position is set
+     to the saved position, and the old cursor position is saved as the
+     mark.
+
+'character-search (C-])'
+     A character is read and point is moved to the next occurrence of
+     that character.  A negative count searches for previous
+     occurrences.
+
+'character-search-backward (M-C-])'
+     A character is read and point is moved to the previous occurrence
+     of that character.  A negative count searches for subsequent
+     occurrences.
+
+'skip-csi-sequence ()'
+     Read enough characters to consume a multi-key sequence such as
+     those defined for keys like Home and End.  Such sequences begin
+     with a Control Sequence Indicator (CSI), usually ESC-[.  If this
+     sequence is bound to "\e[", keys producing such sequences will have
+     no effect unless explicitly bound to a readline command, instead of
+     inserting stray characters into the editing buffer.  This is
+     unbound by default, but usually bound to ESC-[.
+
+'insert-comment (M-#)'
+     Without a numeric argument, the value of the 'comment-begin'
+     variable is inserted at the beginning of the current line.  If a
+     numeric argument is supplied, this command acts as a toggle: if the
+     characters at the beginning of the line do not match the value of
+     'comment-begin', the value is inserted, otherwise the characters in
+     'comment-begin' are deleted from the beginning of the line.  In
+     either case, the line is accepted as if a newline had been typed.
+
+'dump-functions ()'
+     Print all of the functions and their key bindings to the Readline
+     output stream.  If a numeric argument is supplied, the output is
+     formatted in such a way that it can be made part of an INPUTRC
+     file.  This command is unbound by default.
+
+'dump-variables ()'
+     Print all of the settable variables and their values to the
+     Readline output stream.  If a numeric argument is supplied, the
+     output is formatted in such a way that it can be made part of an
+     INPUTRC file.  This command is unbound by default.
+
+'dump-macros ()'
+     Print all of the Readline key sequences bound to macros and the
+     strings they output.  If a numeric argument is supplied, the output
+     is formatted in such a way that it can be made part of an INPUTRC
+     file.  This command is unbound by default.
+
+'emacs-editing-mode (C-e)'
+     When in 'vi' command mode, this causes a switch to 'emacs' editing
+     mode.
+
+'vi-editing-mode (M-C-j)'
+     When in 'emacs' editing mode, this causes a switch to 'vi' editing
+     mode.
+
+\1f
+File: gdb.info,  Node: Readline vi Mode,  Prev: Bindable Readline Commands,  Up: Command Line Editing
+
+32.5 Readline vi Mode
+=====================
+
+While the Readline library does not have a full set of 'vi' editing
+functions, it does contain enough to allow simple editing of the line.
+The Readline 'vi' mode behaves as specified in the POSIX standard.
+
+   In order to switch interactively between 'emacs' and 'vi' editing
+modes, use the command 'M-C-j' (bound to emacs-editing-mode when in 'vi'
+mode and to vi-editing-mode in 'emacs' mode).  The Readline default is
+'emacs' mode.
+
+   When you enter a line in 'vi' mode, you are already placed in
+'insertion' mode, as if you had typed an 'i'.  Pressing <ESC> switches
+you into 'command' mode, where you can edit the text of the line with
+the standard 'vi' movement keys, move to previous history lines with 'k'
+and subsequent lines with 'j', and so forth.
+
+\1f
+File: gdb.info,  Node: Using History Interactively,  Next: In Memoriam,  Prev: Command Line Editing,  Up: Top
+
+33 Using History Interactively
+******************************
+
+This chapter describes how to use the GNU History Library interactively,
+from a user's standpoint.  It should be considered a user's guide.  For
+information on using the GNU History Library in your own programs, *note
+(history)Programming with GNU History::.
+
+* Menu:
+
+* History Interaction::                What it feels like using History as a user.
+
+\1f
+File: gdb.info,  Node: History Interaction,  Up: Using History Interactively
+
+33.1 History Expansion
+======================
+
+The History library provides a history expansion feature that is similar
+to the history expansion provided by 'csh'.  This section describes the
+syntax used to manipulate the history information.
+
+   History expansions introduce words from the history list into the
+input stream, making it easy to repeat commands, insert the arguments to
+a previous command into the current input line, or fix errors in
+previous commands quickly.
+
+   History expansion takes place in two parts.  The first is to
+determine which line from the history list should be used during
+substitution.  The second is to select portions of that line for
+inclusion into the current one.  The line selected from the history is
+called the "event", and the portions of that line that are acted upon
+are called "words".  Various "modifiers" are available to manipulate the
+selected words.  The line is broken into words in the same fashion that
+Bash does, so that several words surrounded by quotes are considered one
+word.  History expansions are introduced by the appearance of the
+history expansion character, which is '!' by default.
+
+* Menu:
+
+* Event Designators::  How to specify which history line to use.
+* Word Designators::   Specifying which words are of interest.
+* Modifiers::          Modifying the results of substitution.
+
+\1f
+File: gdb.info,  Node: Event Designators,  Next: Word Designators,  Up: History Interaction
+
+33.1.1 Event Designators
+------------------------
+
+An event designator is a reference to a command line entry in the
+history list.  Unless the reference is absolute, events are relative to
+the current position in the history list.
+
+'!'
+     Start a history substitution, except when followed by a space, tab,
+     the end of the line, or '='.
+
+'!N'
+     Refer to command line N.
+
+'!-N'
+     Refer to the command N lines back.
+
+'!!'
+     Refer to the previous command.  This is a synonym for '!-1'.
+
+'!STRING'
+     Refer to the most recent command preceding the current position in
+     the history list starting with STRING.
+
+'!?STRING[?]'
+     Refer to the most recent command preceding the current position in
+     the history list containing STRING.  The trailing '?' may be
+     omitted if the STRING is followed immediately by a newline.
+
+'^STRING1^STRING2^'
+     Quick Substitution.  Repeat the last command, replacing STRING1
+     with STRING2.  Equivalent to '!!:s/STRING1/STRING2/'.
+
+'!#'
+     The entire command line typed so far.
+
+\1f
+File: gdb.info,  Node: Word Designators,  Next: Modifiers,  Prev: Event Designators,  Up: History Interaction
+
+33.1.2 Word Designators
+-----------------------
+
+Word designators are used to select desired words from the event.  A ':'
+separates the event specification from the word designator.  It may be
+omitted if the word designator begins with a '^', '$', '*', '-', or '%'.
+Words are numbered from the beginning of the line, with the first word
+being denoted by 0 (zero).  Words are inserted into the current line
+separated by single spaces.
+
+   For example,
+
+'!!'
+     designates the preceding command.  When you type this, the
+     preceding command is repeated in toto.
+
+'!!:$'
+     designates the last argument of the preceding command.  This may be
+     shortened to '!$'.
+
+'!fi:2'
+     designates the second argument of the most recent command starting
+     with the letters 'fi'.
+
+   Here are the word designators:
+
+'0 (zero)'
+     The '0'th word.  For many applications, this is the command word.
+
+'N'
+     The Nth word.
+
+'^'
+     The first argument; that is, word 1.
+
+'$'
+     The last argument.
+
+'%'
+     The word matched by the most recent '?STRING?' search.
+
+'X-Y'
+     A range of words; '-Y' abbreviates '0-Y'.
+
+'*'
+     All of the words, except the '0'th.  This is a synonym for '1-$'.
+     It is not an error to use '*' if there is just one word in the
+     event; the empty string is returned in that case.
+
+'X*'
+     Abbreviates 'X-$'
+
+'X-'
+     Abbreviates 'X-$' like 'X*', but omits the last word.
+
+   If a word designator is supplied without an event specification, the
+previous command is used as the event.
+
+\1f
+File: gdb.info,  Node: Modifiers,  Prev: Word Designators,  Up: History Interaction
+
+33.1.3 Modifiers
+----------------
+
+After the optional word designator, you can add a sequence of one or
+more of the following modifiers, each preceded by a ':'.
+
+'h'
+     Remove a trailing pathname component, leaving only the head.
+
+'t'
+     Remove all leading pathname components, leaving the tail.
+
+'r'
+     Remove a trailing suffix of the form '.SUFFIX', leaving the
+     basename.
+
+'e'
+     Remove all but the trailing suffix.
+
+'p'
+     Print the new command but do not execute it.
+
+'s/OLD/NEW/'
+     Substitute NEW for the first occurrence of OLD in the event line.
+     Any delimiter may be used in place of '/'.  The delimiter may be
+     quoted in OLD and NEW with a single backslash.  If '&' appears in
+     NEW, it is replaced by OLD.  A single backslash will quote the '&'.
+     The final delimiter is optional if it is the last character on the
+     input line.
+
+'&'
+     Repeat the previous substitution.
+
+'g'
+'a'
+     Cause changes to be applied over the entire event line.  Used in
+     conjunction with 's', as in 'gs/OLD/NEW/', or with '&'.
+
+'G'
+     Apply the following 's' modifier once to each word in the event.
+
+\1f
+File: gdb.info,  Node: In Memoriam,  Next: Formatting Documentation,  Prev: Using History Interactively,  Up: Top
+
+Appendix A In Memoriam
+**********************
+
+The GDB project mourns the loss of the following long-time contributors:
+
+'Fred Fish'
+     Fred was a long-standing contributor to GDB (1991-2006), and to
+     Free Software in general.  Outside of GDB, he was known in the
+     Amiga world for his series of Fish Disks, and the GeekGadget
+     project.
+
+'Michael Snyder'
+     Michael was one of the Global Maintainers of the GDB project, with
+     contributions recorded as early as 1996, until 2011.  In addition
+     to his day to day participation, he was a large driving force
+     behind adding Reverse Debugging to GDB.
+
+   Beyond their technical contributions to the project, they were also
+enjoyable members of the Free Software Community.  We will miss them.
+
+\1f
+File: gdb.info,  Node: Formatting Documentation,  Next: Installing GDB,  Prev: In Memoriam,  Up: Top
+
+Appendix B Formatting Documentation
+***********************************
+
+The GDB 4 release includes an already-formatted reference card, ready
+for printing with PostScript or Ghostscript, in the 'gdb' subdirectory
+of the main source directory(1).  If you can use PostScript or
+Ghostscript with your printer, you can print the reference card
+immediately with 'refcard.ps'.
+
+   The release also includes the source for the reference card.  You can
+format it, using TeX, by typing:
+
+     make refcard.dvi
+
+   The GDB reference card is designed to print in "landscape" mode on US
+"letter" size paper; that is, on a sheet 11 inches wide by 8.5 inches
+high.  You will need to specify this form of printing as an option to
+your DVI output program.
+
+   All the documentation for GDB comes as part of the machine-readable
+distribution.  The documentation is written in Texinfo format, which is
+a documentation system that uses a single source file to produce both
+on-line information and a printed manual.  You can use one of the Info
+formatting commands to create the on-line version of the documentation
+and TeX (or 'texi2roff') to typeset the printed version.
+
+   GDB includes an already formatted copy of the on-line Info version of
+this manual in the 'gdb' subdirectory.  The main Info file is
+'gdb-7.9/gdb/gdb.info', and it refers to subordinate files matching
+'gdb.info*' in the same directory.  If necessary, you can print out
+these files, or read them with any editor; but they are easier to read
+using the 'info' subsystem in GNU Emacs or the standalone 'info'
+program, available as part of the GNU Texinfo distribution.
+
+   If you want to format these Info files yourself, you need one of the
+Info formatting programs, such as 'texinfo-format-buffer' or 'makeinfo'.
+
+   If you have 'makeinfo' installed, and are in the top level GDB source
+directory ('gdb-7.9', in the case of version 7.9), you can make the Info
+file by typing:
+
+     cd gdb
+     make gdb.info
+
+   If you want to typeset and print copies of this manual, you need TeX,
+a program to print its DVI output files, and 'texinfo.tex', the Texinfo
+definitions file.
+
+   TeX is a typesetting program; it does not print files directly, but
+produces output files called DVI files.  To print a typeset document,
+you need a program to print DVI files.  If your system has TeX
+installed, chances are it has such a program.  The precise command to
+use depends on your system; 'lpr -d' is common; another (for PostScript
+devices) is 'dvips'.  The DVI print command may require a file name
+without any extension or a '.dvi' extension.
+
+   TeX also requires a macro definitions file called 'texinfo.tex'.
+This file tells TeX how to typeset a document written in Texinfo format.
+On its own, TeX cannot either read or typeset a Texinfo file.
+'texinfo.tex' is distributed with GDB and is located in the
+'gdb-VERSION-NUMBER/texinfo' directory.
+
+   If you have TeX and a DVI printer program installed, you can typeset
+and print this manual.  First switch to the 'gdb' subdirectory of the
+main source directory (for example, to 'gdb-7.9/gdb') and type:
+
+     make gdb.dvi
+
+   Then give 'gdb.dvi' to your DVI printing program.
+
+   ---------- Footnotes ----------
+
+   (1) In 'gdb-7.9/gdb/refcard.ps' of the version 7.9 release.
+
+\1f
+File: gdb.info,  Node: Installing GDB,  Next: Maintenance Commands,  Prev: Formatting Documentation,  Up: Top
+
+Appendix C Installing GDB
+*************************
+
+* Menu:
+
+* Requirements::                Requirements for building GDB
+* Running Configure::           Invoking the GDB 'configure' script
+* Separate Objdir::             Compiling GDB in another directory
+* Config Names::                Specifying names for hosts and targets
+* Configure Options::           Summary of options for configure
+* System-wide configuration::   Having a system-wide init file
+
+\1f
+File: gdb.info,  Node: Requirements,  Next: Running Configure,  Up: Installing GDB
+
+C.1 Requirements for Building GDB
+=================================
+
+Building GDB requires various tools and packages to be available.  Other
+packages will be used only if they are found.
+
+Tools/Packages Necessary for Building GDB
+=========================================
+
+ISO C90 compiler
+     GDB is written in ISO C90.  It should be buildable with any working
+     C90 compiler, e.g. GCC.
+
+Tools/Packages Optional for Building GDB
+========================================
+
+Expat
+     GDB can use the Expat XML parsing library.  This library may be
+     included with your operating system distribution; if it is not, you
+     can get the latest version from <http://expat.sourceforge.net>.
+     The 'configure' script will search for this library in several
+     standard locations; if it is installed in an unusual path, you can
+     use the '--with-libexpat-prefix' option to specify its location.
+
+     Expat is used for:
+
+        * Remote protocol memory maps (*note Memory Map Format::)
+        * Target descriptions (*note Target Descriptions::)
+        * Remote shared library lists (*Note Library List Format::, or
+          alternatively *note Library List Format for SVR4 Targets::)
+        * MS-Windows shared libraries (*note Shared Libraries::)
+        * Traceframe info (*note Traceframe Info Format::)
+        * Branch trace (*note Branch Trace Format::)
+
+zlib
+     GDB will use the 'zlib' library, if available, to read compressed
+     debug sections.  Some linkers, such as GNU gold, are capable of
+     producing binaries with compressed debug sections.  If GDB is
+     compiled with 'zlib', it will be able to read the debug information
+     in such binaries.
+
+     The 'zlib' library is likely included with your operating system
+     distribution; if it is not, you can get the latest version from
+     <http://zlib.net>.
+
+iconv
+     GDB's features related to character sets (*note Character Sets::)
+     require a functioning 'iconv' implementation.  If you are on a GNU
+     system, then this is provided by the GNU C Library.  Some other
+     systems also provide a working 'iconv'.
+
+     If GDB is using the 'iconv' program which is installed in a
+     non-standard place, you will need to tell GDB where to find it.
+     This is done with '--with-iconv-bin' which specifies the directory
+     that contains the 'iconv' program.
+
+     On systems without 'iconv', you can install GNU Libiconv.  If you
+     have previously installed Libiconv, you can use the
+     '--with-libiconv-prefix' option to configure.
+
+     GDB's top-level 'configure' and 'Makefile' will arrange to build
+     Libiconv if a directory named 'libiconv' appears in the top-most
+     source directory.  If Libiconv is built this way, and if the
+     operating system does not provide a suitable 'iconv'
+     implementation, then the just-built library will automatically be
+     used by GDB.  One easy way to set this up is to download GNU
+     Libiconv, unpack it, and then rename the directory holding the
+     Libiconv source code to 'libiconv'.
+
+\1f
+File: gdb.info,  Node: Running Configure,  Next: Separate Objdir,  Prev: Requirements,  Up: Installing GDB
+
+C.2 Invoking the GDB 'configure' Script
+=======================================
+
+GDB comes with a 'configure' script that automates the process of
+preparing GDB for installation; you can then use 'make' to build the
+'gdb' program.
+
+   The GDB distribution includes all the source code you need for GDB in
+a single directory, whose name is usually composed by appending the
+version number to 'gdb'.
+
+   For example, the GDB version 7.9 distribution is in the 'gdb-7.9'
+directory.  That directory contains:
+
+'gdb-7.9/configure (and supporting files)'
+     script for configuring GDB and all its supporting libraries
+
+'gdb-7.9/gdb'
+     the source specific to GDB itself
+
+'gdb-7.9/bfd'
+     source for the Binary File Descriptor library
+
+'gdb-7.9/include'
+     GNU include files
+
+'gdb-7.9/libiberty'
+     source for the '-liberty' free software library
+
+'gdb-7.9/opcodes'
+     source for the library of opcode tables and disassemblers
+
+'gdb-7.9/readline'
+     source for the GNU command-line interface
+
+'gdb-7.9/glob'
+     source for the GNU filename pattern-matching subroutine
+
+'gdb-7.9/mmalloc'
+     source for the GNU memory-mapped malloc package
+
+   The simplest way to configure and build GDB is to run 'configure'
+from the 'gdb-VERSION-NUMBER' source directory, which in this example is
+the 'gdb-7.9' directory.
+
+   First switch to the 'gdb-VERSION-NUMBER' source directory if you are
+not already in it; then run 'configure'.  Pass the identifier for the
+platform on which GDB will run as an argument.
+
+   For example:
+
+     cd gdb-7.9
+     ./configure HOST
+     make
+
+where HOST is an identifier such as 'sun4' or 'decstation', that
+identifies the platform where GDB will run.  (You can often leave off
+HOST; 'configure' tries to guess the correct value by examining your
+system.)
+
+   Running 'configure HOST' and then running 'make' builds the 'bfd',
+'readline', 'mmalloc', and 'libiberty' libraries, then 'gdb' itself.
+The configured source files, and the binaries, are left in the
+corresponding source directories.
+
+   'configure' is a Bourne-shell ('/bin/sh') script; if your system does
+not recognize this automatically when you run a different shell, you may
+need to run 'sh' on it explicitly:
+
+     sh configure HOST
+
+   If you run 'configure' from a directory that contains source
+directories for multiple libraries or programs, such as the 'gdb-7.9'
+source directory for version 7.9, 'configure' creates configuration
+files for every directory level underneath (unless you tell it not to,
+with the '--norecursion' option).
+
+   You should run the 'configure' script from the top directory in the
+source tree, the 'gdb-VERSION-NUMBER' directory.  If you run 'configure'
+from one of the subdirectories, you will configure only that
+subdirectory.  That is usually not what you want.  In particular, if you
+run the first 'configure' from the 'gdb' subdirectory of the
+'gdb-VERSION-NUMBER' directory, you will omit the configuration of
+'bfd', 'readline', and other sibling directories of the 'gdb'
+subdirectory.  This leads to build errors about missing include files
+such as 'bfd/bfd.h'.
+
+   You can install 'gdb' anywhere; it has no hardwired paths.  However,
+you should make sure that the shell on your path (named by the 'SHELL'
+environment variable) is publicly readable.  Remember that GDB uses the
+shell to start your program--some systems refuse to let GDB debug child
+processes whose programs are not readable.
+
+\1f
+File: gdb.info,  Node: Separate Objdir,  Next: Config Names,  Prev: Running Configure,  Up: Installing GDB
+
+C.3 Compiling GDB in Another Directory
+======================================
+
+If you want to run GDB versions for several host or target machines, you
+need a different 'gdb' compiled for each combination of host and target.
+'configure' is designed to make this easy by allowing you to generate
+each configuration in a separate subdirectory, rather than in the source
+directory.  If your 'make' program handles the 'VPATH' feature (GNU
+'make' does), running 'make' in each of these directories builds the
+'gdb' program specified there.
+
+   To build 'gdb' in a separate directory, run 'configure' with the
+'--srcdir' option to specify where to find the source.  (You also need
+to specify a path to find 'configure' itself from your working
+directory.  If the path to 'configure' would be the same as the argument
+to '--srcdir', you can leave out the '--srcdir' option; it is assumed.)
+
+   For example, with version 7.9, you can build GDB in a separate
+directory for a Sun 4 like this:
+
+     cd gdb-7.9
+     mkdir ../gdb-sun4
+     cd ../gdb-sun4
+     ../gdb-7.9/configure sun4
+     make
+
+   When 'configure' builds a configuration using a remote source
+directory, it creates a tree for the binaries with the same structure
+(and using the same names) as the tree under the source directory.  In
+the example, you'd find the Sun 4 library 'libiberty.a' in the directory
+'gdb-sun4/libiberty', and GDB itself in 'gdb-sun4/gdb'.
+
+   Make sure that your path to the 'configure' script has just one
+instance of 'gdb' in it.  If your path to 'configure' looks like
+'../gdb-7.9/gdb/configure', you are configuring only one subdirectory of
+GDB, not the whole package.  This leads to build errors about missing
+include files such as 'bfd/bfd.h'.
+
+   One popular reason to build several GDB configurations in separate
+directories is to configure GDB for cross-compiling (where GDB runs on
+one machine--the "host"--while debugging programs that run on another
+machine--the "target").  You specify a cross-debugging target by giving
+the '--target=TARGET' option to 'configure'.
+
+   When you run 'make' to build a program or library, you must run it in
+a configured directory--whatever directory you were in when you called
+'configure' (or one of its subdirectories).
+
+   The 'Makefile' that 'configure' generates in each source directory
+also runs recursively.  If you type 'make' in a source directory such as
+'gdb-7.9' (or in a separate configured directory configured with
+'--srcdir=DIRNAME/gdb-7.9'), you will build all the required libraries,
+and then build GDB.
+
+   When you have multiple hosts or targets configured in separate
+directories, you can run 'make' on them in parallel (for example, if
+they are NFS-mounted on each of the hosts); they will not interfere with
+each other.
+
+\1f
+File: gdb.info,  Node: Config Names,  Next: Configure Options,  Prev: Separate Objdir,  Up: Installing GDB
+
+C.4 Specifying Names for Hosts and Targets
+==========================================
+
+The specifications used for hosts and targets in the 'configure' script
+are based on a three-part naming scheme, but some short predefined
+aliases are also supported.  The full naming scheme encodes three pieces
+of information in the following pattern:
+
+     ARCHITECTURE-VENDOR-OS
+
+   For example, you can use the alias 'sun4' as a HOST argument, or as
+the value for TARGET in a '--target=TARGET' option.  The equivalent full
+name is 'sparc-sun-sunos4'.
+
+   The 'configure' script accompanying GDB does not provide any query
+facility to list all supported host and target names or aliases.
+'configure' calls the Bourne shell script 'config.sub' to map
+abbreviations to full names; you can read the script, if you wish, or
+you can use it to test your guesses on abbreviations--for example:
+
+     % sh config.sub i386-linux
+     i386-pc-linux-gnu
+     % sh config.sub alpha-linux
+     alpha-unknown-linux-gnu
+     % sh config.sub hp9k700
+     hppa1.1-hp-hpux
+     % sh config.sub sun4
+     sparc-sun-sunos4.1.1
+     % sh config.sub sun3
+     m68k-sun-sunos4.1.1
+     % sh config.sub i986v
+     Invalid configuration `i986v': machine `i986v' not recognized
+
+'config.sub' is also distributed in the GDB source directory ('gdb-7.9',
+for version 7.9).
+
+\1f
+File: gdb.info,  Node: Configure Options,  Next: System-wide configuration,  Prev: Config Names,  Up: Installing GDB
+
+C.5 'configure' Options
+=======================
+
+Here is a summary of the 'configure' options and arguments that are most
+often useful for building GDB.  'configure' also has several other
+options not listed here.  *note (configure.info)What Configure Does::,
+for a full explanation of 'configure'.
+
+     configure [--help]
+               [--prefix=DIR]
+               [--exec-prefix=DIR]
+               [--srcdir=DIRNAME]
+               [--norecursion] [--rm]
+               [--target=TARGET]
+               HOST
+
+You may introduce options with a single '-' rather than '--' if you
+prefer; but you may abbreviate option names if you use '--'.
+
+'--help'
+     Display a quick summary of how to invoke 'configure'.
+
+'--prefix=DIR'
+     Configure the source to install programs and files under directory
+     'DIR'.
+
+'--exec-prefix=DIR'
+     Configure the source to install programs under directory 'DIR'.
+
+'--srcdir=DIRNAME'
+     *Warning: using this option requires GNU 'make', or another 'make'
+     that implements the 'VPATH' feature.*
+     Use this option to make configurations in directories separate from
+     the GDB source directories.  Among other things, you can use this
+     to build (or maintain) several configurations simultaneously, in
+     separate directories.  'configure' writes configuration-specific
+     files in the current directory, but arranges for them to use the
+     source in the directory DIRNAME.  'configure' creates directories
+     under the working directory in parallel to the source directories
+     below DIRNAME.
+
+'--norecursion'
+     Configure only the directory level where 'configure' is executed;
+     do not propagate configuration to subdirectories.
+
+'--target=TARGET'
+     Configure GDB for cross-debugging programs running on the specified
+     TARGET.  Without this option, GDB is configured to debug programs
+     that run on the same machine (HOST) as GDB itself.
+
+     There is no convenient way to generate a list of all available
+     targets.
+
+'HOST ...'
+     Configure GDB to run on the specified HOST.
+
+     There is no convenient way to generate a list of all available
+     hosts.
+
+   There are many other options available as well, but they are
+generally needed for special purposes only.
+
+\1f
+File: gdb.info,  Node: System-wide configuration,  Prev: Configure Options,  Up: Installing GDB
+
+C.6 System-wide configuration and settings
+==========================================
+
+GDB can be configured to have a system-wide init file; this file will be
+read and executed at startup (*note What GDB does during startup:
+Startup.).
+
+   Here is the corresponding configure option:
+
+'--with-system-gdbinit=FILE'
+     Specify that the default location of the system-wide init file is
+     FILE.
+
+   If GDB has been configured with the option '--prefix=$prefix', it may
+be subject to relocation.  Two possible cases:
+
+   * If the default location of this init file contains '$prefix', it
+     will be subject to relocation.  Suppose that the configure options
+     are '--prefix=$prefix --with-system-gdbinit=$prefix/etc/gdbinit';
+     if GDB is moved from '$prefix' to '$install', the system init file
+     is looked for as '$install/etc/gdbinit' instead of
+     '$prefix/etc/gdbinit'.
+
+   * By contrast, if the default location does not contain the prefix,
+     it will not be relocated.  E.g. if GDB has been configured with
+     '--prefix=/usr/local --with-system-gdbinit=/usr/share/gdb/gdbinit',
+     then GDB will always look for '/usr/share/gdb/gdbinit', wherever
+     GDB is installed.
+
+   If the configured location of the system-wide init file (as given by
+the '--with-system-gdbinit' option at configure time) is in the
+data-directory (as specified by '--with-gdb-datadir' at configure time)
+or in one of its subdirectories, then GDB will look for the system-wide
+init file in the directory specified by the '--data-directory'
+command-line option.  Note that the system-wide init file is only read
+once, during GDB initialization.  If the data-directory is changed after
+GDB has started with the 'set data-directory' command, the file will not
+be reread.
+
+* Menu:
+
+* System-wide Configuration Scripts::  Installed System-wide Configuration Scripts
+
+\1f
+File: gdb.info,  Node: System-wide Configuration Scripts,  Up: System-wide configuration
+
+C.6.1 Installed System-wide Configuration Scripts
+-------------------------------------------------
+
+The 'system-gdbinit' directory, located inside the data-directory (as
+specified by '--with-gdb-datadir' at configure time) contains a number
+of scripts which can be used as system-wide init files.  To
+automatically source those scripts at startup, GDB should be configured
+with '--with-system-gdbinit'.  Otherwise, any user should be able to
+source them by hand as needed.
+
+   The following scripts are currently available:
+
+   * 'elinos.py' This script is useful when debugging a program on an
+     ELinOS target.  It takes advantage of the environment variables
+     defined in a standard ELinOS environment in order to determine the
+     location of the system shared libraries, and then sets the
+     'solib-absolute-prefix' and 'solib-search-path' variables
+     appropriately.
+
+   * 'wrs-linux.py' This script is useful when debugging a program on a
+     target running Wind River Linux.  It expects the 'ENV_PREFIX' to be
+     set to the host-side sysroot used by the target system.
+
+\1f
+File: gdb.info,  Node: Maintenance Commands,  Next: Remote Protocol,  Prev: Installing GDB,  Up: Top
+
+Appendix D Maintenance Commands
+*******************************
+
+In addition to commands intended for GDB users, GDB includes a number of
+commands intended for GDB developers, that are not documented elsewhere
+in this manual.  These commands are provided here for reference.  (For
+commands that turn on debugging messages, see *note Debugging Output::.)
+
+'maint agent [-at LOCATION,] EXPRESSION'
+'maint agent-eval [-at LOCATION,] EXPRESSION'
+     Translate the given EXPRESSION into remote agent bytecodes.  This
+     command is useful for debugging the Agent Expression mechanism
+     (*note Agent Expressions::).  The 'agent' version produces an
+     expression useful for data collection, such as by tracepoints,
+     while 'maint agent-eval' produces an expression that evaluates
+     directly to a result.  For instance, a collection expression for
+     'globa + globb' will include bytecodes to record four bytes of
+     memory at each of the addresses of 'globa' and 'globb', while
+     discarding the result of the addition, while an evaluation
+     expression will do the addition and return the sum.  If '-at' is
+     given, generate remote agent bytecode for LOCATION.  If not,
+     generate remote agent bytecode for current frame PC address.
+
+'maint agent-printf FORMAT,EXPR,...'
+     Translate the given format string and list of argument expressions
+     into remote agent bytecodes and display them as a disassembled
+     list.  This command is useful for debugging the agent version of
+     dynamic printf (*note Dynamic Printf::).
+
+'maint info breakpoints'
+     Using the same format as 'info breakpoints', display both the
+     breakpoints you've set explicitly, and those GDB is using for
+     internal purposes.  Internal breakpoints are shown with negative
+     breakpoint numbers.  The type column identifies what kind of
+     breakpoint is shown:
+
+     'breakpoint'
+          Normal, explicitly set breakpoint.
+
+     'watchpoint'
+          Normal, explicitly set watchpoint.
+
+     'longjmp'
+          Internal breakpoint, used to handle correctly stepping through
+          'longjmp' calls.
+
+     'longjmp resume'
+          Internal breakpoint at the target of a 'longjmp'.
+
+     'until'
+          Temporary internal breakpoint used by the GDB 'until' command.
+
+     'finish'
+          Temporary internal breakpoint used by the GDB 'finish'
+          command.
+
+     'shlib events'
+          Shared library events.
+
+'maint info bfds'
+     This prints information about each 'bfd' object that is known to
+     GDB.  *Note BFD: (bfd)Top.
+
+'set displaced-stepping'
+'show displaced-stepping'
+     Control whether or not GDB will do "displaced stepping" if the
+     target supports it.  Displaced stepping is a way to single-step
+     over breakpoints without removing them from the inferior, by
+     executing an out-of-line copy of the instruction that was
+     originally at the breakpoint location.  It is also known as
+     out-of-line single-stepping.
+
+     'set displaced-stepping on'
+          If the target architecture supports it, GDB will use displaced
+          stepping to step over breakpoints.
+
+     'set displaced-stepping off'
+          GDB will not use displaced stepping to step over breakpoints,
+          even if such is supported by the target architecture.
+
+     'set displaced-stepping auto'
+          This is the default mode.  GDB will use displaced stepping
+          only if non-stop mode is active (*note Non-Stop Mode::) and
+          the target architecture supports displaced stepping.
+
+'maint check-psymtabs'
+     Check the consistency of currently expanded psymtabs versus
+     symtabs.  Use this to check, for example, whether a symbol is in
+     one but not the other.
+
+'maint check-symtabs'
+     Check the consistency of currently expanded symtabs.
+
+'maint expand-symtabs [REGEXP]'
+     Expand symbol tables.  If REGEXP is specified, only expand symbol
+     tables for file names matching REGEXP.
+
+'maint set catch-demangler-crashes [on|off]'
+'maint show catch-demangler-crashes'
+     Control whether GDB should attempt to catch crashes in the symbol
+     name demangler.  The default is to attempt to catch crashes.  If
+     enabled, the first time a crash is caught, a core file is created,
+     the offending symbol is displayed and the user is presented with
+     the option to terminate the current session.
+
+'maint cplus first_component NAME'
+     Print the first C++ class/namespace component of NAME.
+
+'maint cplus namespace'
+     Print the list of possible C++ namespaces.
+
+'maint deprecate COMMAND [REPLACEMENT]'
+'maint undeprecate COMMAND'
+     Deprecate or undeprecate the named COMMAND.  Deprecated commands
+     cause GDB to issue a warning when you use them.  The optional
+     argument REPLACEMENT says which newer command should be used in
+     favor of the deprecated one; if it is given, GDB will mention the
+     replacement as part of the warning.
+
+'maint dump-me'
+     Cause a fatal signal in the debugger and force it to dump its core.
+     This is supported only on systems which support aborting a program
+     with the 'SIGQUIT' signal.
+
+'maint internal-error [MESSAGE-TEXT]'
+'maint internal-warning [MESSAGE-TEXT]'
+'maint demangler-warning [MESSAGE-TEXT]'
+
+     Cause GDB to call the internal function 'internal_error',
+     'internal_warning' or 'demangler_warning' and hence behave as
+     though an internal problam has been detected.  In addition to
+     reporting the internal problem, these functions give the user the
+     opportunity to either quit GDB or (for 'internal_error' and
+     'internal_warning') create a core file of the current GDB session.
+
+     These commands take an optional parameter MESSAGE-TEXT that is used
+     as the text of the error or warning message.
+
+     Here's an example of using 'internal-error':
+
+          (gdb) maint internal-error testing, 1, 2
+          .../maint.c:121: internal-error: testing, 1, 2
+          A problem internal to GDB has been detected.  Further
+          debugging may prove unreliable.
+          Quit this debugging session? (y or n) n
+          Create a core file? (y or n) n
+          (gdb)
+
+'maint set internal-error ACTION [ask|yes|no]'
+'maint show internal-error ACTION'
+'maint set internal-warning ACTION [ask|yes|no]'
+'maint show internal-warning ACTION'
+'maint set demangler-warning ACTION [ask|yes|no]'
+'maint show demangler-warning ACTION'
+     When GDB reports an internal problem (error or warning) it gives
+     the user the opportunity to both quit GDB and create a core file of
+     the current GDB session.  These commands let you override the
+     default behaviour for each particular ACTION, described in the
+     table below.
+
+     'quit'
+          You can specify that GDB should always (yes) or never (no)
+          quit.  The default is to ask the user what to do.
+
+     'corefile'
+          You can specify that GDB should always (yes) or never (no)
+          create a core file.  The default is to ask the user what to
+          do.  Note that there is no 'corefile' option for
+          'demangler-warning': demangler warnings always create a core
+          file and this cannot be disabled.
+
+'maint packet TEXT'
+     If GDB is talking to an inferior via the serial protocol, then this
+     command sends the string TEXT to the inferior, and displays the
+     response packet.  GDB supplies the initial '$' character, the
+     terminating '#' character, and the checksum.
+
+'maint print architecture [FILE]'
+     Print the entire architecture configuration.  The optional argument
+     FILE names the file where the output goes.
+
+'maint print c-tdesc'
+     Print the current target description (*note Target Descriptions::)
+     as a C source file.  The created source file can be used in GDB
+     when an XML parser is not available to parse the description.
+
+'maint print dummy-frames'
+     Prints the contents of GDB's internal dummy-frame stack.
+
+          (gdb) b add
+          ...
+          (gdb) print add(2,3)
+          Breakpoint 2, add (a=2, b=3) at ...
+          58     return (a + b);
+          The program being debugged stopped while in a function called from GDB.
+          ...
+          (gdb) maint print dummy-frames
+          0xa8206d8: id={stack=0xbfffe734,code=0xbfffe73f,!special}, ptid=process 9353
+          (gdb)
+
+     Takes an optional file parameter.
+
+'maint print registers [FILE]'
+'maint print raw-registers [FILE]'
+'maint print cooked-registers [FILE]'
+'maint print register-groups [FILE]'
+'maint print remote-registers [FILE]'
+     Print GDB's internal register data structures.
+
+     The command 'maint print raw-registers' includes the contents of
+     the raw register cache; the command 'maint print cooked-registers'
+     includes the (cooked) value of all registers, including registers
+     which aren't available on the target nor visible to user; the
+     command 'maint print register-groups' includes the groups that each
+     register is a member of; and the command 'maint print
+     remote-registers' includes the remote target's register numbers and
+     offsets in the 'G' packets.
+
+     These commands take an optional parameter, a file name to which to
+     write the information.
+
+'maint print reggroups [FILE]'
+     Print GDB's internal register group data structures.  The optional
+     argument FILE tells to what file to write the information.
+
+     The register groups info looks like this:
+
+          (gdb) maint print reggroups
+           Group      Type
+           general    user
+           float      user
+           all        user
+           vector     user
+           system     user
+           save       internal
+           restore    internal
+
+'flushregs'
+     This command forces GDB to flush its internal register cache.
+
+'maint print objfiles [REGEXP]'
+     Print a dump of all known object files.  If REGEXP is specified,
+     only print object files whose names match REGEXP.  For each object
+     file, this command prints its name, address in memory, and all of
+     its psymtabs and symtabs.
+
+'maint print user-registers'
+     List all currently available "user registers".  User registers
+     typically provide alternate names for actual hardware registers.
+     They include the four "standard" registers '$fp', '$pc', '$sp', and
+     '$ps'.  *Note standard registers::.  User registers can be used in
+     expressions in the same way as the canonical register names, but
+     only the latter are listed by the 'info registers' and 'maint print
+     registers' commands.
+
+'maint print section-scripts [REGEXP]'
+     Print a dump of scripts specified in the '.debug_gdb_section'
+     section.  If REGEXP is specified, only print scripts loaded by
+     object files matching REGEXP.  For each script, this command prints
+     its name as specified in the objfile, and the full path if known.
+     *Note dotdebug_gdb_scripts section::.
+
+'maint print statistics'
+     This command prints, for each object file in the program, various
+     data about that object file followed by the byte cache ("bcache")
+     statistics for the object file.  The objfile data includes the
+     number of minimal, partial, full, and stabs symbols, the number of
+     types defined by the objfile, the number of as yet unexpanded psym
+     tables, the number of line tables and string tables, and the amount
+     of memory used by the various tables.  The bcache statistics
+     include the counts, sizes, and counts of duplicates of all and
+     unique objects, max, average, and median entry size, total memory
+     used and its overhead and savings, and various measures of the hash
+     table size and chain lengths.
+
+'maint print target-stack'
+     A "target" is an interface between the debugger and a particular
+     kind of file or process.  Targets can be stacked in "strata", so
+     that more than one target can potentially respond to a request.  In
+     particular, memory accesses will walk down the stack of targets
+     until they find a target that is interested in handling that
+     particular address.
+
+     This command prints a short description of each layer that was
+     pushed on the "target stack", starting from the top layer down to
+     the bottom one.
+
+'maint print type EXPR'
+     Print the type chain for a type specified by EXPR.  The argument
+     can be either a type name or a symbol.  If it is a symbol, the type
+     of that symbol is described.  The type chain produced by this
+     command is a recursive definition of the data type as stored in
+     GDB's data structures, including its flags and contained types.
+
+'maint set dwarf2 always-disassemble'
+'maint show dwarf2 always-disassemble'
+     Control the behavior of 'info address' when using DWARF debugging
+     information.
+
+     The default is 'off', which means that GDB should try to describe a
+     variable's location in an easily readable format.  When 'on', GDB
+     will instead display the DWARF location expression in an
+     assembly-like format.  Note that some locations are too complex for
+     GDB to describe simply; in this case you will always see the
+     disassembly form.
+
+     Here is an example of the resulting disassembly:
+
+          (gdb) info addr argc
+          Symbol "argc" is a complex DWARF expression:
+               1: DW_OP_fbreg 0
+
+     For more information on these expressions, see the DWARF standard
+     (http://www.dwarfstd.org/).
+
+'maint set dwarf2 max-cache-age'
+'maint show dwarf2 max-cache-age'
+     Control the DWARF 2 compilation unit cache.
+
+     In object files with inter-compilation-unit references, such as
+     those produced by the GCC option '-feliminate-dwarf2-dups', the
+     DWARF 2 reader needs to frequently refer to previously read
+     compilation units.  This setting controls how long a compilation
+     unit will remain in the cache if it is not referenced.  A higher
+     limit means that cached compilation units will be stored in memory
+     longer, and more total memory will be used.  Setting it to zero
+     disables caching, which will slow down GDB startup, but reduce
+     memory consumption.
+
+'maint set profile'
+'maint show profile'
+     Control profiling of GDB.
+
+     Profiling will be disabled until you use the 'maint set profile'
+     command to enable it.  When you enable profiling, the system will
+     begin collecting timing and execution count data; when you disable
+     profiling or exit GDB, the results will be written to a log file.
+     Remember that if you use profiling, GDB will overwrite the
+     profiling log file (often called 'gmon.out').  If you have a record
+     of important profiling data in a 'gmon.out' file, be sure to move
+     it to a safe location.
+
+     Configuring with '--enable-profiling' arranges for GDB to be
+     compiled with the '-pg' compiler option.
+
+'maint set show-debug-regs'
+'maint show show-debug-regs'
+     Control whether to show variables that mirror the hardware debug
+     registers.  Use 'on' to enable, 'off' to disable.  If enabled, the
+     debug registers values are shown when GDB inserts or removes a
+     hardware breakpoint or watchpoint, and when the inferior triggers a
+     hardware-assisted breakpoint or watchpoint.
+
+'maint set show-all-tib'
+'maint show show-all-tib'
+     Control whether to show all non zero areas within a 1k block
+     starting at thread local base, when using the 'info w32
+     thread-information-block' command.
+
+'maint set target-async'
+'maint show target-async'
+     This controls whether GDB targets operate in synchronous or
+     asynchronous mode (*note Background Execution::).  Normally the
+     default is asynchronous, if it is available; but this can be
+     changed to more easily debug problems occurring only in synchronous
+     mode.
+
+'maint set per-command'
+'maint show per-command'
+
+     GDB can display the resources used by each command.  This is useful
+     in debugging performance problems.
+
+     'maint set per-command space [on|off]'
+     'maint show per-command space'
+          Enable or disable the printing of the memory used by GDB for
+          each command.  If enabled, GDB will display how much memory
+          each command took, following the command's own output.  This
+          can also be requested by invoking GDB with the '--statistics'
+          command-line switch (*note Mode Options::).
+
+     'maint set per-command time [on|off]'
+     'maint show per-command time'
+          Enable or disable the printing of the execution time of GDB
+          for each command.  If enabled, GDB will display how much time
+          it took to execute each command, following the command's own
+          output.  Both CPU time and wallclock time are printed.
+          Printing both is useful when trying to determine whether the
+          cost is CPU or, e.g., disk/network latency.  Note that the CPU
+          time printed is for GDB only, it does not include the
+          execution time of the inferior because there's no mechanism
+          currently to compute how much time was spent by GDB and how
+          much time was spent by the program been debugged.  This can
+          also be requested by invoking GDB with the '--statistics'
+          command-line switch (*note Mode Options::).
+
+     'maint set per-command symtab [on|off]'
+     'maint show per-command symtab'
+          Enable or disable the printing of basic symbol table
+          statistics for each command.  If enabled, GDB will display the
+          following information:
+
+            a. number of symbol tables
+            b. number of primary symbol tables
+            c. number of blocks in the blockvector
+
+'maint space VALUE'
+     An alias for 'maint set per-command space'.  A non-zero value
+     enables it, zero disables it.
+
+'maint time VALUE'
+     An alias for 'maint set per-command time'.  A non-zero value
+     enables it, zero disables it.
+
+'maint translate-address [SECTION] ADDR'
+     Find the symbol stored at the location specified by the address
+     ADDR and an optional section name SECTION.  If found, GDB prints
+     the name of the closest symbol and an offset from the symbol's
+     location to the specified address.  This is similar to the 'info
+     address' command (*note Symbols::), except that this command also
+     allows to find symbols in other sections.
+
+     If section was not specified, the section in which the symbol was
+     found is also printed.  For dynamically linked executables, the
+     name of executable or shared library containing the symbol is
+     printed as well.
+
+   The following command is useful for non-interactive invocations of
+GDB, such as in the test suite.
+
+'set watchdog NSEC'
+     Set the maximum number of seconds GDB will wait for the target
+     operation to finish.  If this time expires, GDB reports and error
+     and the command is aborted.
+
+'show watchdog'
+     Show the current setting of the target wait timeout.