Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(172)

Unified Diff: gdb/doc/gdb.info-5

Issue 124383005: GDB 7.6.50 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@upstream
Patch Set: Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « gdb/doc/gdb.info-4 ('k') | gdb/doc/gdb.info-6 » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: gdb/doc/gdb.info-5
diff --git a/gdb/doc/gdb.info-5 b/gdb/doc/gdb.info-5
index bd337224a3899346bc33a9d2f6638bd09a530273..3d1b32cbd746a0dce26c44ea4b430dea05a794a3 100644
--- a/gdb/doc/gdb.info-5
+++ b/gdb/doc/gdb.info-5
@@ -1,13 +1,12 @@
-This is gdb.info, produced by makeinfo version 4.8 from ./gdb.texinfo.
+This is gdb.info, produced by makeinfo version 4.13 from ./gdb.texinfo.
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
- 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-2013 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
@@ -23,11 +22,9 @@ developing GNU and promoting software freedom."
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.1.
+Source-Level Debugger' for GDB (GDB) Version 7.6.50.20131211-cvs.
- 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-2013 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 +38,8043 @@ this GNU Manual. Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom."

-File: gdb.info, Node: Running Configure, Next: Separate Objdir, Prev: Requirements, Up: Installing GDB
+File: gdb.info, Node: GDB/MI Miscellaneous Commands, Prev: GDB/MI Ada Exceptions Commands, Up: GDB/MI
-C.2 Invoking the GDB `configure' Script
-=======================================
+27.23 Miscellaneous GDB/MI Commands
+===================================
-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-exit' Command
+-----------------------
- 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'.
+Synopsis
+........
- For example, the GDB version 7.5.1 distribution is in the
-`gdb-7.5.1' directory. That directory contains:
+ -gdb-exit
-`gdb-7.5.1/configure (and supporting files)'
- script for configuring GDB and all its supporting libraries
+ Exit GDB immediately.
-`gdb-7.5.1/gdb'
- the source specific to GDB itself
+GDB Command
+...........
-`gdb-7.5.1/bfd'
- source for the Binary File Descriptor library
+Approximately corresponds to `quit'.
-`gdb-7.5.1/include'
- GNU include files
+Example
+.......
-`gdb-7.5.1/libiberty'
- source for the `-liberty' free software library
+ (gdb)
+ -gdb-exit
+ ^exit
-`gdb-7.5.1/opcodes'
- source for the library of opcode tables and disassemblers
+The `-gdb-set' Command
+----------------------
-`gdb-7.5.1/readline'
- source for the GNU command-line interface
+Synopsis
+........
-`gdb-7.5.1/glob'
- source for the GNU filename pattern-matching subroutine
+ -gdb-set
-`gdb-7.5.1/mmalloc'
- source for the GNU memory-mapped malloc package
+ Set an internal GDB variable.
- 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.1' directory.
+GDB Command
+...........
- 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.
+The corresponding GDB command is `set'.
- For example:
+Example
+.......
- cd gdb-7.5.1
- ./configure HOST
- make
+ (gdb)
+ -gdb-set $foo=3
+ ^done
+ (gdb)
-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.)
+The `-gdb-show' Command
+-----------------------
- 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.
+Synopsis
+........
- `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:
+ -gdb-show
- sh configure HOST
+ Show the current value of a GDB variable.
- If you run `configure' from a directory that contains source
-directories for multiple libraries or programs, such as the `gdb-7.5.1'
-source directory for version 7.5.1, `configure' creates configuration
-files for every directory level underneath (unless you tell it not to,
-with the `--norecursion' option).
+GDB Command
+...........
- 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'.
+The corresponding GDB command is `show'.
- 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.
+Example
+.......
-
-File: gdb.info, Node: Separate Objdir, Next: Config Names, Prev: Running Configure, Up: Installing GDB
+ (gdb)
+ -gdb-show annotate
+ ^done,value="0"
+ (gdb)
-C.3 Compiling GDB in Another Directory
-======================================
+The `-gdb-version' Command
+--------------------------
-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.
+Synopsis
+........
- 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.)
+ -gdb-version
- For example, with version 7.5.1, you can build GDB in a separate
-directory for a Sun 4 like this:
+ Show version information for GDB. Used mostly in testing.
- cd gdb-7.5.1
- mkdir ../gdb-sun4
- cd ../gdb-sun4
- ../gdb-7.5.1/configure sun4
- make
+GDB Command
+...........
- 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'.
+The GDB equivalent is `show version'. GDB by default shows this
+information when you start an interactive session.
- 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.1/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'.
+Example
+.......
- 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'.
+ (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)
- 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 `-info-gdb-mi-command' Command
+----------------------------------
- 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.1' (or in a separate configured directory configured with
-`--srcdir=DIRNAME/gdb-7.5.1'), you will build all the required
-libraries, and then build GDB.
+Synopsis
+........
- 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.
+ -info-gdb-mi-command CMD_NAME
-
-File: gdb.info, Node: Config Names, Next: Configure Options, Prev: Separate Objdir, Up: Installing GDB
+ Query support for the GDB/MI command named CMD_NAME.
-C.4 Specifying Names for Hosts and Targets
-==========================================
+ 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.
-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:
+GDB Command
+...........
- ARCHITECTURE-VENDOR-OS
+There is no corresponding GDB command.
- 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'.
+Result
+......
- 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:
+The result is a tuple. There is currently only one field:
- % 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
+`exists'
+ This field is equal to `"true"' if the GDB/MI command exists,
+ `"false"' otherwise.
-`config.sub' is also distributed in the GDB source directory
-(`gdb-7.5.1', for version 7.5.1).
-
-File: gdb.info, Node: Configure Options, Next: System-wide configuration, Prev: Config Names, Up: Installing GDB
+Example
+.......
-C.5 `configure' Options
-=======================
+Here is an example where the GDB/MI command does not exist:
-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'.
+ -info-gdb-mi-command unsupported-command
+ ^done,command={exists="false"}
- configure [--help]
- [--prefix=DIR]
- [--exec-prefix=DIR]
- [--srcdir=DIRNAME]
- [--norecursion] [--rm]
- [--target=TARGET]
- HOST
+And here is an example where the GDB/MI command is known to the
+debugger:
-You may introduce options with a single `-' rather than `--' if you
-prefer; but you may abbreviate option names if you use `--'.
+ -info-gdb-mi-command symbol-list-lines
+ ^done,command={exists="true"}
-`--help'
- Display a quick summary of how to invoke `configure'.
+The `-list-features' Command
+----------------------------
-`--prefix=DIR'
- Configure the source to install programs and files under directory
- `DIR'.
+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.
-`--exec-prefix=DIR'
- Configure the source to install programs under directory `DIR'.
+ 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.
-`--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.
+ Example output:
-`--norecursion'
- Configure only the directory level where `configure' is executed;
- do not propagate configuration to subdirectories.
+ (gdb) -list-features
+ ^done,result=["feature1","feature2"]
-`--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.
+ The current list of features is:
- There is no convenient way to generate a list of all available
- targets.
+`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'.
-`HOST ...'
- Configure GDB to run on the specified HOST.
+`pending-breakpoints'
+ Indicates support for the `-f' option to the `-break-insert'
+ command.
- There is no convenient way to generate a list of all available
- hosts.
+`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'
- There are many other options available as well, but they are
-generally needed for special purposes only.
+`thread-info'
+ Indicates support for the `-thread-info' command.
-
-File: gdb.info, Node: System-wide configuration, Prev: Configure Options, Up: Installing GDB
+`data-read-memory-bytes'
+ Indicates support for the `-data-read-memory-bytes' and the
+ `-data-write-memory-bytes' commands.
-C.6 System-wide configuration and settings
-==========================================
+`breakpoint-notifications'
+ Indicates that changes to breakpoints and breakpoints created via
+ the CLI will be announced via async records.
-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.).
+`ada-task-info'
+ Indicates support for the `-ada-task-info' command.
- Here is the corresponding configure option:
+`language-option'
+ Indicates that all GDB/MI commands accept the `--language' option
+ (*note Context management::).
-`--with-system-gdbinit=FILE'
- Specify that the default location of the system-wide init file is
- FILE.
+`info-gdb-mi-command'
+ Indicates support for the `-info-gdb-mi-command' command.
- If GDB has been configured with the option `--prefix=$prefix', it
-may be subject to relocation. Two possible cases:
+`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::).
- * 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'.
+`exec-run-start-option'
+ Indicates that the `-exec-run' command supports the `--start'
+ option (*note GDB/MI Program Execution::).
- * 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.
+The `-list-target-features' Command
+-----------------------------------
-
-File: gdb.info, Node: Maintenance Commands, Next: Remote Protocol, Prev: Installing GDB, Up: Top
+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:
-Appendix D Maintenance Commands
-*******************************
+ (gdb) -list-target-features
+ ^done,result=["async"]
-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::.)
+ The current list of features is:
-`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.
+`async'
+ Indicates that the target is capable of asynchronous command
+ execution, which means that GDB will accept further commands while
+ the target is running.
-`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::.
+`reverse'
+ Indicates that the target is capable of reverse execution. *Note
+ Reverse Execution::, for more information.
-`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.
+The `-list-thread-groups' Command
+---------------------------------
- `watchpoint'
- Normal, explicitly set watchpoint.
+Synopsis
+--------
- `longjmp'
- Internal breakpoint, used to handle correctly stepping through
- `longjmp' calls.
+ -list-thread-groups [ --available ] [ --recurse 1 ] [ GROUP ... ]
- `longjmp resume'
- Internal breakpoint at the target of a `longjmp'.
+ 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.
- `until'
- Temporary internal breakpoint used by the GDB `until' command.
+ Normally, thread groups that are being debugged are reported. With
+the `--available' option, GDB reports thread groups available on the
+target.
- `finish'
- Temporary internal breakpoint used by the GDB `finish'
- command.
+ 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.
+
+`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
+----------------------
- `shlib events'
- Shared library events.
+Synopsis
+........
+ -info-os [ TYPE ]
-`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.
+ 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.
- `set displaced-stepping on'
- If the target architecture supports it, GDB will use
- displaced stepping to step over breakpoints.
+ The types of information available depend on the target operating
+system.
- `set displaced-stepping off'
- GDB will not use displaced stepping to step over breakpoints,
- even if such is supported by the target architecture.
+GDB Command
+...........
- `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.
+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
+---------------------------
-`maint check-symtabs'
- Check the consistency of psymtabs and symtabs.
+Synopsis
+--------
-`maint cplus first_component NAME'
- Print the first C++ class/namespace component of NAME.
+ -add-inferior
-`maint cplus namespace'
- Print the list of possible C++ namespaces.
+ 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.
-`maint demangle NAME'
- Demangle a C++ or Objective-C mangled NAME.
+Example
+-------
-`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.
+ gdb
+ -add-inferior
+ ^done,inferior="i3"
-`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.
+The `-interpreter-exec' Command
+-------------------------------
-`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.
+Synopsis
+--------
- These commands take an optional parameter MESSAGE-TEXT that is
- used as the text of the error or warning message.
+ -interpreter-exec INTERPRETER COMMAND
+Execute the specified COMMAND in the given INTERPRETER.
- Here's an example of using `internal-error':
+GDB 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)
+The corresponding GDB command is `interpreter-exec'.
-`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.
+Example
+-------
- `quit'
- You can specify that GDB should always (yes) or never (no)
- quit. The default is to ask the user what to do.
+ (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)
- `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.
+The `-inferior-tty-set' Command
+-------------------------------
-`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.
+Synopsis
+--------
-`maint print architecture [FILE]'
- Print the entire architecture configuration. The optional argument
- FILE names the file where the output goes.
+ -inferior-tty-set /dev/pts/1
-`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.
+ Set terminal for future runs of the program being debugged.
-`maint print dummy-frames'
- Prints the contents of GDB's internal dummy-frame stack.
+GDB Command
+-----------
- (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)
+The corresponding GDB command is `set inferior-tty' /dev/pts/1.
- Takes an optional file parameter.
+Example
+-------
-`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.
+ (gdb)
+ -inferior-tty-set /dev/pts/1
+ ^done
+ (gdb)
- 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.
+The `-inferior-tty-show' Command
+--------------------------------
- These commands take an optional parameter, a file name to which to
- write the information.
+Synopsis
+--------
-`maint print reggroups [FILE]'
- Print GDB's internal register group data structures. The optional
- argument FILE tells to what file to write the information.
+ -inferior-tty-show
- The register groups info looks like this:
+ Show terminal for future runs of program being debugged.
- (gdb) maint print reggroups
- Group Type
- general user
- float user
- all user
- vector user
- system user
- save internal
- restore internal
+GDB Command
+-----------
-`flushregs'
- This command forces GDB to flush its internal register cache.
+The corresponding GDB command is `show inferior-tty'.
-`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
+-------
-`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::.
+ (gdb)
+ -inferior-tty-set /dev/pts/1
+ ^done
+ (gdb)
+ -inferior-tty-show
+ ^done,inferior_tty_terminal="/dev/pts/1"
+ (gdb)
-`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.
+The `-enable-timings' Command
+-----------------------------
-`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.
+Synopsis
+--------
- 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.
+ -enable-timings [yes | no]
-`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.
+ 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'.
-`maint set dwarf2 always-disassemble'
+GDB Command
+-----------
-`maint show dwarf2 always-disassemble'
- Control the behavior of `info address' when using DWARF debugging
- information.
+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)
- 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.
+
+File: gdb.info, Node: Annotations, Next: JIT Interface, Prev: GDB/MI, Up: Top
- Here is an example of the resulting disassembly:
+28 GDB Annotations
+******************
- (gdb) info addr argc
- Symbol "argc" is a complex DWARF expression:
- 1: DW_OP_fbreg 0
+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.
- For more information on these expressions, see the DWARF standard
- (http://www.dwarfstd.org/).
+ The annotation mechanism has largely been superseded by GDB/MI
+(*note GDB/MI::).
-`maint set dwarf2 max-cache-age'
-`maint show dwarf2 max-cache-age'
- Control the DWARF 2 compilation unit cache.
+* Menu:
- 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.
+* 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.
-`maint set profile'
-`maint show profile'
- Control profiling of GDB.
+
+File: gdb.info, Node: Annotations Overview, Next: Server Prefix, Up: Annotations
- 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.
+28.1 What is an Annotation?
+===========================
- Configuring with `--enable-profiling' arranges for GDB to be
- compiled with the `-pg' compiler option.
+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.
-`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.
+
+File: gdb.info, Node: Server Prefix, Next: Prompting, Prev: Annotations Overview, Up: Annotations
-`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.
+28.2 The Server Prefix
+======================
-`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::).
+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.
-`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.
+ 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.
- 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.
+ Using this prefix also disables confirmation requests (*note
+confirmation requests::).
+
+File: gdb.info, Node: Prompting, Next: Errors, Prev: Server Prefix, Up: Annotations
- The following command is useful for non-interactive invocations of
-GDB, such as in the test suite.
+28.3 Annotation for GDB Input
+=============================
-`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.
+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.
-`show watchdog'
- Show the current setting of the target wait timeout.
+ 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:
-
-File: gdb.info, Node: Remote Protocol, Next: Agent Expressions, Prev: Maintenance Commands, Up: Top
+ ^Z^Zpre-prompt
+ ^Z^Zprompt
+ ^Z^Zpost-prompt
-Appendix E GDB Remote Serial Protocol
-*************************************
+ The input types are
-* Menu:
+`prompt'
+ When GDB is prompting for a command (the main GDB prompt).
-* 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::
+`commands'
+ When GDB prompts for a set of commands, like in the `commands'
+ command. The annotations are repeated for each command which is
+ input.
-
-File: gdb.info, Node: Overview, Next: Packets, Up: Remote Protocol
+`overload-choice'
+ When GDB wants the user to select between various overloaded
+ functions.
-E.1 Overview
-============
+`query'
+ When GDB wants the user to confirm a potentially dangerous
+ operation.
-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.
+`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.
- In the examples below, `->' and `<-' are used to indicate
-transmitted and received data, respectively.
+
+File: gdb.info, Node: Errors, Next: Invalidation, Prev: Prompting, Up: Annotations
- 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:
+28.4 Errors
+===========
- `$'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).
+ ^Z^Zquit
- Implementors should note that prior to GDB 5.0 the protocol
-specification also included an optional two-digit SEQUENCE-ID:
+ This annotation occurs right before GDB responds to an interrupt.
- `$'SEQUENCE-ID`:'PACKET-DATA`#'CHECKSUM
+ ^Z^Zerror
-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.
+ This annotation occurs right before GDB responds to an error.
- 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):
+ 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.
- -> `$'PACKET-DATA`#'CHECKSUM
- <- `+'
- The `+'/`-' acknowledgments can be disabled once a connection is
-established. *Note Packet Acknowledgment::, for details.
+ A quit or error annotation may be preceded by
- 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.
+ ^Z^Zerror-begin
- PACKET-DATA consists of a sequence of characters with the exception
-of `#' and `$' (see `X' packet for additional exceptions).
+ Any output between that and the quit or error annotation is the error
+message.
- Fields within the packet should be separated using `,' `;' or `:'.
-Except where otherwise noted all numbers are represented in HEX with
-leading zeros suppressed.
+ Warning messages are not yet annotated.
- 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).
+
+File: gdb.info, Node: Invalidation, Next: Annotations for Running, Prev: Errors, Up: Annotations
- 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.
+28.5 Invalidation Notices
+=========================
- 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).
+The following annotations say that certain pieces of state may have
+changed.
- 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.
+`^Z^Zframes-invalid'
+ The frames (for example, output from the `backtrace' command) may
+ have changed.
- 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'.
+`^Z^Zbreakpoints-invalid'
+ The breakpoints may have changed. For example, the user just
+ added or deleted a breakpoint.
- The error response returned for some packets includes a two character
-error number. That number is not well defined.
+
+File: gdb.info, Node: Annotations for Running, Next: Source Annotations, Prev: Invalidation, Up: Annotations
- 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.
+28.6 Running the Program
+========================
- 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.
+When the program starts executing due to a GDB command such as `step'
+or `continue',
-
-File: gdb.info, Node: Packets, Next: Stop Reply Packets, Prev: Overview, Up: Remote Protocol
+ ^Z^Zstarting
-E.2 Packets
-===========
+ is output. When the program stops,
-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.
+ ^Z^Zstopped
- 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.
+ is output. Before the `stopped' annotation, a variety of
+annotations describe how the program stopped.
- 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.
+`^Z^Zexited EXIT-STATUS'
+ The program exited, and EXIT-STATUS is the exit status (zero for
+ successful exit, otherwise nonzero).
- 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.
+`^Z^Zsignalled'
+ The program exited with a signal. After the `^Z^Zsignalled', the
+ annotation continues:
- 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.
+ INTRO-TEXT
+ ^Z^Zsignal-name
+ NAME
+ ^Z^Zsignal-name-end
+ MIDDLE-TEXT
+ ^Z^Zsignal-string
+ STRING
+ ^Z^Zsignal-string-end
+ END-TEXT
- Note that all packet forms beginning with an upper- or lower-case
-letter, other than those described here, are reserved for future use.
+ 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'. INTRO-TEXT,
+ MIDDLE-TEXT, and END-TEXT are for the user's benefit and have no
+ particular format.
- Here are the packet descriptions.
+`^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.
-`!'
- Enable extended mode. In extended mode, the remote server is made
- persistent. The `R' packet is used to restart the program being
- debugged.
+`^Z^Zbreakpoint NUMBER'
+ The program hit breakpoint number NUMBER.
- Reply:
- `OK'
- The remote target both supports and has enabled extended mode.
+`^Z^Zwatchpoint NUMBER'
+ The program hit watchpoint number NUMBER.
-`?'
- 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::.
+
+File: gdb.info, Node: Source Annotations, Prev: Annotations for Running, Up: Annotations
- Reply: *Note Stop Reply Packets::, for the reply specifications.
+28.7 Displaying Source
+======================
-`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.
+The following annotation is used instead of displaying source code:
- Reply:
- `OK'
- The arguments were set.
+ ^Z^Zsource FILENAME:LINE:CHARACTER:MIDDLE:ADDR
- `E NN'
- An error occurred.
+ 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. ADDR is
+in the form `0x' followed by one or more lowercase hex digits (note
+that this does not depend on the language).
-`b BAUD'
- (Don't use this packet; its behavior is not well-defined.) Change
- the serial line speed to BAUD.
+
+File: gdb.info, Node: JIT Interface, Next: In-Process Agent, Prev: Annotations, Up: Top
- 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._
+29 JIT Compilation Interface
+****************************
- 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._
+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.
-`B ADDR,MODE'
- Set (MODE is `S') or clear (MODE is `C') a breakpoint at ADDR.
+* Menu:
- Don't use this packet. Use the `Z' and `z' packets instead (*note
- insert breakpoint or watchpoint packet::).
+* 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
-`bc'
- Backward continue. Execute the target system in reverse. No
- parameter. *Note Reverse Execution::, for more information.
+
+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;
+ };
- Reply: *Note Stop Reply Packets::, for the reply specifications.
+ 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;
+ };
-`bs'
- Backward single step. Execute one instruction in reverse. No
- parameter. *Note Reverse Execution::, for more information.
+ /* GDB puts a breakpoint in this function. */
+ void __attribute__((noinline)) __jit_debug_register_code() { };
- Reply: *Note Stop Reply Packets::, for the reply specifications.
+ /* 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 };
-`c [ADDR]'
- Continue. ADDR is address to resume. If ADDR is omitted, resume
- at current address.
+ 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.
- This packet is deprecated for multi-threading support. *Note
- vCont packet::.
+
+File: gdb.info, Node: Registering Code, Next: Unregistering Code, Prev: Declarations, Up: JIT Interface
- Reply: *Note Stop Reply Packets::, for the reply specifications.
+29.2 Registering Code
+=====================
-`C SIG[;ADDR]'
- Continue with signal SIG (hex signal number). If `;ADDR' is
- omitted, resume at same address.
+To register code with GDB, the JIT should follow this protocol:
- This packet is deprecated for multi-threading support. *Note
- vCont packet::.
+ * Generate an object file in memory with symbols and other desired
+ debug information. The file must include the virtual addresses of
+ the sections.
- Reply: *Note Stop Reply Packets::, for the reply specifications.
+ * Create a code entry for the file, which gives the start and size
+ of the symbol file.
-`d'
- Toggle debug flag.
+ * Add it to the linked list in the JIT descriptor.
- Don't use this packet; instead, define a general set packet (*note
- General Query Packets::).
+ * Point the relevant_entry field of the descriptor at the entry.
-`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.
+ * Set `action_flag' to `JIT_REGISTER' and call
+ `__jit_debug_register_code'.
- 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.
+ 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.
- Reply:
- `OK'
- for success
+
+File: gdb.info, Node: Unregistering Code, Next: Custom Debug Info, Prev: Registering Code, Up: JIT Interface
- `E NN'
- for an error
+29.3 Unregistering Code
+=======================
-`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.
+If code is freed, then the JIT should use the following protocol:
-`g'
- Read general registers.
+ * Remove the code entry corresponding to the code from the linked
+ list.
- 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.
+ * Point the `relevant_entry' field of the descriptor at the code
+ entry.
- 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:
+ * Set `action_flag' to `JIT_UNREGISTER' and call
+ `__jit_debug_register_code'.
- -> `g'
- <- `xxxxxxxx00000000xxxxxxxx00000000'
+ 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.
- `E NN'
- for an error.
+
+File: gdb.info, Node: Custom Debug Info, Prev: Unregistering Code, Up: JIT Interface
-`G XX...'
- Write general registers. *Note read registers packet::, for a
- description of the XX... data.
+29.4 Custom Debug Info
+======================
- Reply:
- `OK'
- for success
+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.
- `E NN'
- for an error
+* Menu:
-`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::.
+* Using JIT Debug Info Readers:: How to use supplied readers correctly
+* Writing JIT Debug Info Readers:: Creating a debug-info reader
- Reply:
- `OK'
- for success
+
+File: gdb.info, Node: Using JIT Debug Info Readers, Next: Writing JIT Debug Info Readers, Up: Custom Debug Info
- `E NN'
- for an error
+29.4.1 Using JIT Debug Info Readers
+-----------------------------------
-`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.
+Readers can be loaded and unloaded using the `jit-reader-load' and
+`jit-reader-unload' commands.
-`I'
- Signal, then cycle step. *Note step with signal packet::. *Note
- cycle step packet::.
+`jit-reader-load READER'
+ Load the JIT reader named READER. READER 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').
-`k'
- Kill request.
+ 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'.
- 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?)_.
+`jit-reader-unload'
+ Unload the currently loaded JIT reader.
-`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.
+
+File: gdb.info, Node: Writing JIT Debug Info Readers, Prev: Using JIT Debug Info Readers, Up: Custom Debug Info
- 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.
+29.4.2 Writing JIT Debug Info Readers
+-------------------------------------
- `E NN'
- NN is errno
+As mentioned, a reader is essentially a shared object conforming to a
+certain ABI. This ABI is described in `jit-reader.h'.
-`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.
+ `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.
- Reply:
- `OK'
- for success
+ 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.
- `E NN'
- for an error (this includes the case where only part of the
- data was written).
+ The entry point for readers is the symbol `gdb_init_reader', which
+is expected to be a function with the prototype
-`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.
+ extern struct gdb_reader_funcs *gdb_init_reader (void);
- Reply:
- `XX...'
- the register's value
+ `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
- `E NN'
- for an error
+ struct gdb_reader_funcs
+ {
+ /* Must be set to GDB_READER_INTERFACE_VERSION. */
+ int reader_version;
- `'
- Indicating an unrecognized QUERY.
+ /* For use by the reader. */
+ void *priv_data;
-`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).
+ gdb_read_debug_info *read;
+ gdb_unwind_frame *unwind;
+ gdb_get_frame_id *get_frame_id;
+ gdb_destroy_reader *destroy;
+ };
- Reply:
- `OK'
- for success
+ 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.
- `E NN'
- for an error
+
+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.
-`q NAME PARAMS...'
-`Q NAME PARAMS...'
- General query (`q') and set (`Q'). These packets are described
- fully in *Note General Query Packets::.
+ 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.
-`r'
- Reset the entire system.
+* Menu:
- Don't use this packet; use the `R' packet instead.
+* In-Process Agent Protocol::
-`R XX'
- Restart the program being debugged. XX, while needed, is ignored.
- This packet is only available in extended mode (*note extended
- mode::).
+
+File: gdb.info, Node: In-Process Agent Protocol, Up: In-Process Agent
- The `R' packet has no reply.
+30.1 In-Process Agent Protocol
+==============================
-`s [ADDR]'
- Single step. ADDR is the address at which to resume. If ADDR is
- omitted, resume at same address.
+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::).
- This packet is deprecated for multi-threading support. *Note
- vCont packet::.
+* Menu:
- Reply: *Note Stop Reply Packets::, for the reply specifications.
+* IPA Protocol Objects::
+* IPA Protocol Commands::
-`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.
+
+File: gdb.info, Node: IPA Protocol Objects, Next: IPA Protocol Commands, Up: In-Process Agent Protocol
- This packet is deprecated for multi-threading support. *Note
- vCont packet::.
+30.1.1 IPA Protocol Objects
+---------------------------
- Reply: *Note Stop Reply Packets::, for the reply specifications.
+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 expression
+ NULL object::
+ otherwise
+ length of
+ *note agent
+ expression
+ object::
+actions variable numactions number of *note
+ tracepoint action object::
-`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.
+
+File: gdb.info, Node: IPA Protocol Commands, Prev: IPA Protocol Objects, Up: In-Process Agent Protocol
-`T THREAD-ID'
- Find out if the thread THREAD-ID is alive. *Note thread-id
- syntax::.
+30.1.2 IPA Protocol Commands
+----------------------------
- Reply:
- `OK'
- thread is still alive
+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::). 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.
+ GDB_JUMP_PAD_HEAD is updated head of jumppad. Both of
+ TARGET_ADDRESS and GDB_JUMP_PAD_HEAD are 8-byte long. FJUMP
+ contains a sequence of instructions jump to jumppad entry.
+ FJUMP_SIZE, 4-byte long, is the size of FJUMP.
`E NN'
- thread is dead
+ for an error
-`v'
- Packets starting with `v' are identified by a multi-letter name,
- up to the first `;' or `?' (or the end of the packet).
-`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.
+`close'
+ Closes the in-process agent. This command is sent when GDB or
+ GDBserver is about to kill inferiors.
- This packet is only available in extended mode (*note extended
- mode::).
+`qTfSTM'
+ *Note qTfSTM::.
- Reply:
+`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
- `Any stop packet'
- for success in all-stop mode (*note Stop Reply Packets::)
+`unprobe_marker_at:ADDRESS'
+ Asks in-process agent to unprobe the marker at ADDRESS.
- `OK'
- for success in non-stop mode (*note Remote Non-Stop::)
+
+File: gdb.info, Node: GDB Bugs, Next: Command Line Editing, Prev: In-Process Agent, Up: Top
-`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::.
+31 Reporting Bugs in GDB
+************************
- Currently supported actions are:
+Your bug reports play an essential role in making GDB reliable.
- `c'
- Continue.
+ 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.
- `C SIG'
- Continue with signal SIG. The signal SIG should be two hex
- digits.
+ In order for a bug report to serve its purpose, you must include the
+information that enables us to fix the bug.
- `s'
- Step.
+* Menu:
- `S SIG'
- Step with signal SIG. The signal SIG should be two hex
- digits.
+* Bug Criteria:: Have you found a bug?
+* Bug Reporting:: How to report bugs
- `t'
- Stop.
+
+File: gdb.info, Node: Bug Criteria, Next: Bug Reporting, Up: GDB Bugs
- The optional argument ADDR normally associated with the `c', `C',
- `s', and `S' packets is not supported in `vCont'.
+31.1 Have You Found a Bug?
+==========================
- 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.
+If you are not sure whether you have found a bug, here are some
+guidelines:
- 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.
+ * If the debugger gets a fatal signal, for any input whatever, that
+ is a GDB bug. Reliable debuggers never crash.
- Reply: *Note Stop Reply Packets::, for the reply specifications.
+ * 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.)
-`vCont?'
- Request a list of actions supported by the `vCont' packet.
+ * 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".
- Reply:
- `vCont[;ACTION...]'
- The `vCont' packet is supported. Each ACTION is a supported
- command in the `vCont' packet.
+ * If you are an experienced user of debugging tools, your suggestions
+ for improvement of GDB are welcome in any case.
- `'
- The `vCont' packet is not supported.
+
+File: gdb.info, Node: Bug Reporting, Prev: Bug Criteria, Up: GDB Bugs
-`vFile:OPERATION:PARAMETER...'
- Perform a file operation on the target system. For details, see
- *Note Host I/O Packets::.
+31.2 How to Report Bugs
+=======================
-`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.
+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.
- Reply:
- `OK'
- for success
+ 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.
- `E NN'
- for an error
+ 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.
-`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.
+ 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.
- Reply:
- `OK'
- for success
+ 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.
- `E.memtype'
- for vFlashWrite addressing non-flash memory
+ * A patch for the bug.
- `E NN'
- for an error
+ 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.
-`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.
+ 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.
-`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::.
+ 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.
- Reply:
- `E NN'
- for an error
+ * A guess about what the bug is or what it depends on.
- `OK'
- for success
+ Such guesses are usually wrong. Even we cannot guess right about
+ such things without first using the debugger to find the facts.
-`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.
+
+File: gdb.info, Node: Command Line Editing, Next: Using History Interactively, Prev: GDB Bugs, Up: Top
- This packet is only available in extended mode (*note extended
- mode::).
+32 Command Line Editing
+***********************
- Reply:
- `E NN'
- for an error
+This chapter describes the basic features of the GNU command line
+editing interface.
- `Any stop packet'
- for success (*note Stop Reply Packets::)
+* Menu:
-`vStopped'
- In non-stop mode (*note Remote Non-Stop::), acknowledge a previous
- stop reply and prompt for the stub to report another one.
+* 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.
- Reply:
- `Any stop packet'
- if there is another unreported stop event (*note Stop Reply
- Packets::)
+
+File: gdb.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing
- `OK'
- if there are no unreported stop events
+32.1 Introduction to Line Editing
+=================================
-`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 following paragraphs describe the notation used to represent
+keystrokes.
- Reply:
- `OK'
- for success
+ 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.
- `E NN'
- for an error
+ 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.
-`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.
+ 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.
- Each breakpoint and watchpoint packet TYPE is documented
- separately.
+ The text `M-C-k' is read as `Meta-Control-k' and describes the
+character produced by "metafying" `C-k'.
- _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._
+ 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.
-`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.
+
+File: gdb.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing
- 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.
+32.2 Readline Interaction
+=========================
- The COND_LIST parameter is comprised of a series of expressions,
- concatenated without separators. Each expression has the following
- form:
+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.
- `X LEN,EXPR'
- LEN is the length of the bytecode expression and EXPR is the
- actual conditional expression in bytecode form.
+* 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.
- 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:
+
+File: gdb.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction
- `X LEN,EXPR'
- LEN is the length of the bytecode expression and EXPR is the
- actual conditional expression in bytecode form.
+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.
- see *Note Architecture-Specific Protocol Details::.
+ 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'.
- _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._
+ 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.
- Reply:
- `OK'
- success
+`C-b'
+ Move back one character.
- `'
- not supported
+`C-f'
+ Move forward one character.
- `E NN'
- for an error
+<DEL> or <Backspace>
+ Delete the character to the left of the cursor.
-`z1,ADDR,KIND'
-`Z1,ADDR,KIND[;COND_LIST...]'
- Insert (`Z1') or remove (`z1') a hardware breakpoint at address
- ADDR.
+`C-d'
+ Delete the character underneath the cursor.
- 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.
+Printing characters
+ Insert the character into the line at the cursor.
- _Implementation note: A hardware breakpoint is not affected by code
- movement._
+`C-_' or `C-x C-u'
+ Undo the last editing command. You can undo all the way back to an
+ empty line.
- Reply:
- `OK'
- success
+(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.)
- `'
- not supported
+
+File: gdb.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction
- `E NN'
- for an error
+32.2.2 Readline Movement Commands
+---------------------------------
-`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.
+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.
- Reply:
- `OK'
- success
+`C-a'
+ Move to the start of the line.
- `'
- not supported
+`C-e'
+ Move to the end of the line.
- `E NN'
- for an error
+`M-f'
+ Move forward a word, where a word is composed of letters and
+ digits.
-`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.
+`M-b'
+ Move backward a word.
- Reply:
- `OK'
- success
+`C-l'
+ Clear the screen, reprinting the current line at the top.
- `'
- not supported
+ 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.
- `E NN'
- for an error
+
+File: gdb.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction
-`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.
+32.2.3 Readline Killing Commands
+--------------------------------
- Reply:
- `OK'
- success
+"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'.)
- `'
- not supported
+ 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.
- `E NN'
- for an error
+ 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.
-
-File: gdb.info, Node: Stop Reply Packets, Next: General Query Packets, Prev: Packets, Up: Remote Protocol
+`C-k'
+ Kill the text from the current cursor position to the end of the
+ line.
-E.3 Stop Reply Packets
-======================
+`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'.
-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.
+`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'.
- 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.
+`C-w'
+ Kill from the cursor to the previous whitespace. This is
+ different than `M-<DEL>' because the word boundaries differ.
-`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:
+ Here is how to "yank" the text back into the line. Yanking means to
+copy the most-recently-killed text from the kill buffer.
- * 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.
+`C-y'
+ Yank the most recently killed text back into the buffer at the
+ cursor.
- * If N is `thread', then R is the THREAD-ID of the stopped
- thread, as specified in *Note thread-id syntax::.
+`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'.
- * If N is `core', then R is the hexadecimal number of the core
- on which the stop event was detected.
+
+File: gdb.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction
- * 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.
+32.2.4 Readline Arguments
+-------------------------
- * Otherwise, GDB should ignore this `N:R' pair and go on to the
- next; this allows us to extend the protocol in the future.
+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.
- The currently defined stop reasons are:
+
+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.
- `watch'
- `rwatch'
- `awatch'
- The packet indicates a watchpoint hit, and R is the data
- address, in hex.
+
+File: gdb.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing
- `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.
+32.3 Readline Init File
+=======================
- `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.
+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'.
-`W AA'
-`W AA ; process:PID'
- The process exited, and AA is the exit status. This is only
- applicable to certain targets.
+ When a program which uses the Readline library starts up, the init
+file is read, and the key bindings are set.
- 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.
+ In addition, the `C-x C-r' command re-reads this init file, thus
+incorporating any changes that you might have made to it.
-`X AA'
-`X AA ; process:PID'
- The process terminated with signal AA.
+* Menu:
- 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.
+* Readline Init File Syntax:: Syntax for the commands in the inputrc file.
-`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.
+* Conditional Init Constructs:: Conditional key bindings in the inputrc file.
-`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.
+* Sample Init File:: An example inputrc file.
- `PARAMETER...' is a list of parameters as defined for this very
- system call.
+
+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
- 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.
+ `\f'
+ form feed
+ `\n'
+ newline
-
-File: gdb.info, Node: General Query Packets, Next: Architecture-Specific Protocol Details, Prev: Stop Reply Packets, Up: Remote Protocol
+ `\r'
+ carriage return
-E.4 General Query Packets
-=========================
+ `\t'
+ horizontal tab
-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.
+ `\v'
+ vertical tab
- 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:
+ `\NNN'
+ the eight-bit character whose value is the octal value NNN
+ (one to three digits)
- * The name must not contain commas, colons or semicolons.
+ `\xHH'
+ the eight-bit character whose value is the hexadecimal value
+ HH (one or two hex digits)
- * Most GDB query and set packets have a leading upper case letter.
+ 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\\": "\\"
- * 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).
+
+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
- 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.
+
+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
- Here are the currently defined query and set packets:
+
+File: gdb.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing
-`QAgent:1'
+32.4 Bindable Readline Commands
+===============================
-`QAgent:0'
- Turn on or off the agent as a helper to perform some debugging
- operations delegated from GDB (*note Control Agent::).
+* Menu:
-`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.)
+* 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.
-`qC'
- Return the current thread ID.
+ This section describes Readline commands that may be bound to key
+sequences. Command names without an accompanying key sequence are
+unbound by default.
- Reply:
- `QC THREAD-ID'
- Where THREAD-ID is a thread ID as documented in *Note
- thread-id syntax::.
+ 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".
- `(anything else)'
- Any other reply implies the old thread ID.
+
+File: gdb.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands
-`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.
+32.4.1 Commands For Moving
+--------------------------
- _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.
+`beginning-of-line (C-a)'
+ Move to the start of the current line.
- Reply:
- `E NN'
- An error (such as memory fault)
+`end-of-line (C-e)'
+ Move to the end of the line.
- `C CRC32'
- The specified memory region's checksum is CRC32.
+`forward-char (C-f)'
+ Move forward a character.
-`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.
+`backward-char (C-b)'
+ Move back a character.
- This packet is only available in extended mode (*note extended
- mode::).
+`forward-word (M-f)'
+ Move forward to the end of the next word. Words are composed of
+ letters and digits.
- Reply:
- `OK'
- The request succeeded.
+`backward-word (M-b)'
+ Move back to the start of the current or previous word. Words are
+ composed of letters and digits.
- `E NN'
- An error occurred. NN are hex digits.
+`clear-screen (C-l)'
+ Clear the screen and redraw the current line, leaving the current
+ line at the top of the screen.
- `'
- An empty reply indicates that `QDisableRandomization' is not
- supported by the stub.
+`redraw-current-line ()'
+ Refresh the current line. By default, this is unbound.
- 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.
+
+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.
- NOTE: This packet replaces the `qL' query (see below).
- Reply:
- `m THREAD-ID'
- A single thread ID
+
+File: gdb.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands
- `m THREAD-ID,THREAD-ID...'
- a comma-separated list of thread IDs
+32.4.3 Commands For Changing Text
+---------------------------------
- `l'
- (lower case letter `L') denotes end of list.
+`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.
- 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.
+`backward-delete-char (Rubout)'
+ Delete the character behind the cursor. A numeric argument means
+ to kill the characters instead of deleting them.
-`qGetTLSAddr:THREAD-ID,OFFSET,LM'
- Fetch the address associated with thread local storage specified
- by THREAD-ID, OFFSET, and LM.
+`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.
- THREAD-ID is the thread ID associated with the thread for which to
- fetch the TLS address. *Note thread-id syntax::.
+`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.
- 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.)
+`tab-insert (M-<TAB>)'
+ Insert a tab character.
- 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.
+`self-insert (a, b, A, 1, !, ...)'
+ Insert yourself.
- Reply:
- `XX...'
- Hex encoded (big endian) bytes representing the address of
- the thread local storage requested.
+`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.
- `E NN'
- An error occurred. NN are hex digits.
+`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.
- `'
- An empty reply indicates that `qGetTLSAddr' is not supported
- by the stub.
+`upcase-word (M-u)'
+ Uppercase the current (or following) word. With a negative
+ argument, uppercase the previous word, but do not move the cursor.
-`qGetTIBAddr:THREAD-ID'
- Fetch address of the Windows OS specific Thread Information Block.
+`downcase-word (M-l)'
+ Lowercase the current (or following) word. With a negative
+ argument, lowercase the previous word, but do not move the cursor.
- THREAD-ID is the thread ID associated with the thread.
+`capitalize-word (M-c)'
+ Capitalize the current (or following) word. With a negative
+ argument, capitalize the previous word, but do not move the cursor.
- Reply:
- `XX...'
- Hex encoded (big endian) bytes representing the linear
- address of the thread information block.
+`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.
- `E NN'
- An error occured. This means that either the thread was not
- found, or the address could not be retrieved.
+ 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.
- `'
- An empty reply indicates that `qGetTIBAddr' is not supported
- by the stub.
+ By default, this command is unbound.
-`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).
+
+File: gdb.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands
- 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()'.
+32.4.4 Killing And Yanking
+--------------------------
-`qOffsets'
- Get section offsets that the target used when relocating the
- downloaded image.
+`kill-line (C-k)'
+ Kill the text from point to the end of the line.
- 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.
+`backward-kill-line (C-x Rubout)'
+ Kill backward to the beginning of the line.
- _Note: while a `Bss' offset may be included in the response,
- GDB ignores this and instead applies the `Data' offset to the
- `Bss' section._
+`unix-line-discard (C-u)'
+ Kill backward from the cursor to the beginning of the current line.
- `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.
+`kill-whole-line ()'
+ Kill all characters on the current line, no matter where point is.
+ By default, this is unbound.
-`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::).
+`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'.
- Don't use this packet; use the `qThreadExtraInfo' query instead
- (see below).
+`backward-kill-word (M-<DEL>)'
+ Kill the word behind point. Word boundaries are the same as
+ `backward-word'.
- Reply: see `remote.c:remote_unpack_thread_info_response()'.
+`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.
-`QNonStop:1'
+`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.
-`QNonStop:0'
- Enter non-stop (`QNonStop:1') or all-stop (`QNonStop:0') mode.
- *Note Remote Non-Stop::, for more information.
+`delete-horizontal-space ()'
+ Delete all spaces and tabs around point. By default, this is
+ unbound.
- Reply:
- `OK'
- The request succeeded.
+`kill-region ()'
+ Kill the text in the current region. By default, this command is
+ unbound.
- `E NN'
- An error occurred. NN are hex digits.
+`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.
- `'
- An empty reply indicates that `QNonStop' is not supported by
- the stub.
+`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.
- 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::.
+`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.
-`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'.
+`yank (C-y)'
+ Yank the top of the kill ring into the buffer at point.
- Reply:
- `OK'
- The request succeeded.
+`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'.
- `E NN'
- An error occurred. NN are hex digits.
+
+File: gdb.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands
- `'
- An empty reply indicates that `QPassSignals' is not supported
- by the stub.
+32.4.5 Specifying Numeric Arguments
+-----------------------------------
- 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::).
+`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.
-`QProgramSignals: SIGNAL [;SIGNAL]...'
- Each listed SIGNAL may be delivered to the inferior process.
- Others should be silently discarded.
+
+File: gdb.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands
- 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.
+32.4.6 Letting Readline Type For You
+------------------------------------
- This does not influence whether to deliver a signal as requested
- by a resumption packet (*note vCont packet::).
+`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.
- 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.
+
+File: gdb.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands
- `E NN'
- An error occurred. NN are hex digits.
+32.4.7 Keyboard Macros
+----------------------
- `'
- An empty reply indicates that `QProgramSignals' is not
- supported by the stub.
+`start-kbd-macro (C-x ()'
+ Begin saving the characters typed into the current keyboard macro.
- 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::).
+`end-kbd-macro (C-x ))'
+ Stop saving the characters typed into the current keyboard macro
+ and save the definition.
-`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_.
+`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.
- Reply:
- `OK'
- A command response with no output.
- `OUTPUT'
- A command response with the hex encoded output string OUTPUT.
+
+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.
- `E NN'
- Indicate a badly formed request.
- `'
- An empty reply indicates that `qRcmd' is not recognized.
+
+File: gdb.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing
- (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.)
+32.5 Readline vi Mode
+=====================
-`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.
+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.
- Reply:
- `0'
- The pattern was not found.
+ 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.
- `1,address'
- The pattern was found at ADDRESS.
+ 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.
- `E NN'
- A badly formed request or an error was encountered while
- searching memory.
+
+File: gdb.info, Node: Using History Interactively, Next: In Memoriam, Prev: Command Line Editing, Up: Top
- `'
- An empty reply indicates that `qSearch:memory' is not
- recognized.
+33 Using History Interactively
+******************************
-`QStartNoAckMode'
- Request that the remote stub disable the normal `+'/`-' protocol
- acknowledgments (*note Packet Acknowledgment::).
+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 Programming with GNU History: (history)Programming with GNU
+History.
- 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.
+* Menu:
- `'
- An empty reply indicates that the stub does not support
- no-acknowledgment mode.
+* History Interaction:: What it feels like using History as a user.
-`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.
+
+File: gdb.info, Node: History Interaction, Up: Using History Interactively
- 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).
+33.1 History Expansion
+======================
- `'
- An empty reply indicates that `qSupported' is not recognized,
- or that no features needed to be reported to GDB.
+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.
- The allowed forms for each feature (either a GDBFEATURE in the
- `qSupported' packet, or a STUBFEATURE in the response) are:
+* Menu:
- `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.
+* Event Designators:: How to specify which history line to use.
+* Word Designators:: Specifying which words are of interest.
+* Modifiers:: Modifying the results of substitution.
- `NAME+'
- The remote protocol feature NAME is supported, and does not
- need an associated value.
+
+File: gdb.info, Node: Event Designators, Next: Word Designators, Up: History Interaction
- `NAME-'
- The remote protocol feature NAME is not supported.
+33.1.1 Event Designators
+------------------------
- `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.
+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.
- 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.
+`!'
+ Start a history substitution, except when followed by a space, tab,
+ the end of the line, or `='.
- The following values of GDBFEATURE (for the packet sent by GDB)
- are defined:
+`!N'
+ Refer to command line N.
- `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.
+`!-N'
+ Refer to the command N lines back.
- `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.
+`!!'
+ Refer to the previous command. This is a synonym for `!-1'.
- `qRelocInsn'
- This feature indicates whether GDB supports the `qRelocInsn'
- packet (*note Relocate instruction reply packet: Tracepoint
- Packets.).
+`!STRING'
+ Refer to the most recent command preceding the current position in
+ the history list starting with STRING.
- 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.
+`!?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.
- Similarly, GDB will silently ignore unrecognized stub feature
- responses, as long as each response uses one of the standard forms.
+`^STRING1^STRING2^'
+ Quick Substitution. Repeat the last command, replacing STRING1
+ with STRING2. Equivalent to `!!:s/STRING1/STRING2/'.
- 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.
+`!#'
+ The entire command line typed so far.
- 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.
+
+File: gdb.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction
- These are the currently defined stub features and their properties:
+33.1.2 Word Designators
+-----------------------
- 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
+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.
- These are the currently defined stub features, in more detail:
+ For example,
- `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.
+`!!'
+ designates the preceding command. When you type this, the
+ preceding command is repeated in toto.
- `qXfer:auxv:read'
- The remote stub understands the `qXfer:auxv:read' packet
- (*note qXfer auxiliary vector read::).
+`!!:$'
+ designates the last argument of the preceding command. This may be
+ shortened to `!$'.
- `qXfer:features:read'
- The remote stub understands the `qXfer:features:read' packet
- (*note qXfer target description read::).
+`!fi:2'
+ designates the second argument of the most recent command starting
+ with the letters `fi'.
- `qXfer:libraries:read'
- The remote stub understands the `qXfer:libraries:read' packet
- (*note qXfer library list read::).
+ Here are the word designators:
- `qXfer:libraries-svr4:read'
- The remote stub understands the `qXfer:libraries-svr4:read'
- packet (*note qXfer svr4 library list read::).
+`0 (zero)'
+ The `0'th word. For many applications, this is the command word.
- `qXfer:memory-map:read'
- The remote stub understands the `qXfer:memory-map:read' packet
- (*note qXfer memory map read::).
+`N'
+ The Nth word.
- `qXfer:sdata:read'
- The remote stub understands the `qXfer:sdata:read' packet
- (*note qXfer sdata read::).
+`^'
+ The first argument; that is, word 1.
- `qXfer:spu:read'
- The remote stub understands the `qXfer:spu:read' packet
- (*note qXfer spu read::).
+`$'
+ The last argument.
- `qXfer:spu:write'
- The remote stub understands the `qXfer:spu:write' packet
- (*note qXfer spu write::).
+`%'
+ The word matched by the most recent `?STRING?' search.
- `qXfer:siginfo:read'
- The remote stub understands the `qXfer:siginfo:read' packet
- (*note qXfer siginfo read::).
+`X-Y'
+ A range of words; `-Y' abbreviates `0-Y'.
- `qXfer:siginfo:write'
- The remote stub understands the `qXfer:siginfo:write' packet
- (*note qXfer siginfo write::).
+`*'
+ 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.
- `qXfer:threads:read'
- The remote stub understands the `qXfer:threads:read' packet
- (*note qXfer threads read::).
+`X*'
+ Abbreviates `X-$'
- `qXfer:traceframe-info:read'
- The remote stub understands the `qXfer:traceframe-info:read'
- packet (*note qXfer traceframe info read::).
+`X-'
+ Abbreviates `X-$' like `X*', but omits the last word.
- `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::).
+ If a word designator is supplied without an event specification, the
+previous command is used as the event.
- `QNonStop'
- The remote stub understands the `QNonStop' packet (*note
- QNonStop::).
+
+File: gdb.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction
- `QPassSignals'
- The remote stub understands the `QPassSignals' packet (*note
- QPassSignals::).
+33.1.3 Modifiers
+----------------
- `QStartNoAckMode'
- The remote stub understands the `QStartNoAckMode' packet and
- prefers to operate in no-acknowledgment mode. *Note Packet
- Acknowledgment::.
+After the optional word designator, you can add a sequence of one or
+more of the following modifiers, each preceded by a `:'.
- `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.
+`h'
+ Remove a trailing pathname component, leaving only the head.
- `qXfer:osdata:read'
- The remote stub understands the `qXfer:osdata:read' packet
- ((*note qXfer osdata read::).
+`t'
+ Remove all leading pathname components, leaving the tail.
- `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.).
+`r'
+ Remove a trailing suffix of the form `.SUFFIX', leaving the
+ basename.
- `ConditionalTracepoints'
- The remote stub accepts and implements conditional
- expressions defined for tracepoints (*note Tracepoint
- Conditions::).
+`e'
+ Remove all but the trailing suffix.
- `ReverseContinue'
- The remote stub accepts and implements the reverse continue
- packet (*note bc::).
+`p'
+ Print the new command but do not execute it.
- `ReverseStep'
- The remote stub accepts and implements the reverse step packet
- (*note bs::).
+`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.
- `TracepointSource'
- The remote stub understands the `QTDPsrc' packet that supplies
- the source form of tracepoint definitions.
+`&'
+ Repeat the previous substitution.
- `QAgent'
- The remote stub understands the `QAgent' packet.
+`g'
+`a'
+ Cause changes to be applied over the entire event line. Used in
+ conjunction with `s', as in `gs/OLD/NEW/', or with `&'.
- `QAllow'
- The remote stub understands the `QAllow' packet.
+`G'
+ Apply the following `s' modifier once to each word in the event.
- `QDisableRandomization'
- The remote stub understands the `QDisableRandomization'
- packet.
- `StaticTracepoint'
- The remote stub supports static tracepoints.
+
+File: gdb.info, Node: In Memoriam, Next: Formatting Documentation, Prev: Using History Interactively, Up: Top
- `InstallInTrace'
- The remote stub supports installing tracepoint in tracing.
+Appendix A In Memoriam
+**********************
- `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.
+The GDB project mourns the loss of the following long-time contributors:
- `tracenz'
- The remote stub supports the `tracenz' bytecode for
- collecting strings. See *Note Bytecode Descriptions:: for
- details about the bytecode.
+`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.
- `BreakpointCommands'
- The remote stub supports running a breakpoint's command list
- itself, rather than reporting the hit to GDB.
+`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.
-`qSymbol::'
- Notify the target that GDB is prepared to serve symbol lookup
- requests. Accept requests from the target for the values of
- symbols.
+
+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.6.50.20131211-cvs/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.6.50.20131211-cvs', in the case of version
+7.6.50.20131211-cvs), 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.6.50.20131211-cvs/gdb')
+and type:
+
+ make gdb.dvi
+
+ Then give `gdb.dvi' to your DVI printing program.
- Reply:
- `OK'
- The target does not need to look up any (more) symbols.
+ ---------- Footnotes ----------
- `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.
+ (1) In `gdb-7.6.50.20131211-cvs/gdb/refcard.ps' of the version
+7.6.50.20131211-cvs release.
-`qSymbol:SYM_VALUE:SYM_NAME'
- Set the value of SYM_NAME to SYM_VALUE.
+
+File: gdb.info, Node: Installing GDB, Next: Maintenance Commands, Prev: Formatting Documentation, Up: Top
- SYM_NAME (hex encoded) is the name of a symbol whose value the
- target has previously requested.
+Appendix C Installing GDB
+*************************
- 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.
+* Menu:
- Reply:
- `OK'
- The target does not need to look up any (more) symbols.
+* 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
- `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.
+
+File: gdb.info, Node: Requirements, Next: Running Configure, Up: Installing GDB
-`qTBuffer'
+C.1 Requirements for Building GDB
+=================================
-`QTBuffer'
+Building GDB requires various tools and packages to be available.
+Other packages will be used only if they are found.
-`QTDisconnected'
-`QTDP'
-`QTDPsrc'
-`QTDV'
-`qTfP'
-`qTfV'
-`QTFrame'
-`qTMinFTPILen'
- *Note Tracepoint Packets::.
+Tools/Packages Necessary for Building GDB
+=========================================
-`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'.
+ISO C90 compiler
+ GDB is written in ISO C90. It should be buildable with any
+ working C90 compiler, e.g. GCC.
- 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.)
+Tools/Packages Optional for Building GDB
+========================================
-`QTNotes'
+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.
-`qTP'
+ Expat is used for:
-`QTSave'
+ * Remote protocol memory maps (*note Memory Map Format::)
-`qTsP'
+ * Target descriptions (*note Target Descriptions::)
-`qTsV'
-`QTStart'
-`QTStop'
-`QTEnable'
-`QTDisable'
-`QTinit'
-`QTro'
-`qTStatus'
-`qTV'
-`qTfSTM'
-`qTsSTM'
-`qTSTMat'
- *Note Tracepoint Packets::.
+ * Remote shared library lists (*Note Library List Format::, or
+ alternatively *note Library List Format for SVR4 Targets::)
-`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.
+ * MS-Windows shared libraries (*note Shared Libraries::)
- Here are the specific requests of this form defined so far. All
- `qXfer:OBJECT:read:...' requests use the same reply formats,
- listed below.
+ * Traceframe info (*note Traceframe Info Format::)
- `qXfer:auxv:read::OFFSET,LENGTH'
- Access the target's "auxiliary vector". *Note auxiliary
- vector: OS Information. Note ANNEX must be empty.
+ * Branch trace (*note Branch Trace Format::)
- This packet is not probed by default; the remote stub must
- request it, by supplying an appropriate `qSupported' response
- (*note qSupported::).
+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.
- `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.
+ 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'.
- This packet is not probed by default; the remote stub must
- request it, by supplying an appropriate `qSupported' response
- (*note qSupported::).
+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'.
- `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::).
+ 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.
- 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.
+ 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.
- This packet is not probed by default; the remote stub must
- request it, by supplying an appropriate `qSupported' response
- (*note qSupported::).
+ 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'.
- `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::).
+
+File: gdb.info, Node: Running Configure, Next: Separate Objdir, Prev: Requirements, Up: Installing GDB
- This packet is optional for better performance on SVR4
- targets. GDB uses memory read packets to read the SVR4
- library list otherwise.
+C.2 Invoking the GDB `configure' Script
+=======================================
- This packet is not probed by default; the remote stub must
- request it, by supplying an appropriate `qSupported' response
- (*note qSupported::).
+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.
- `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::).
+ 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'.
- This packet is not probed by default; the remote stub must
- request it, by supplying an appropriate `qSupported' response
- (*note qSupported::).
+ For example, the GDB version 7.6.50.20131211-cvs distribution is in
+the `gdb-7.6.50.20131211-cvs' directory. That directory contains:
- `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.
+`gdb-7.6.50.20131211-cvs/configure (and supporting files)'
+ script for configuring GDB and all its supporting libraries
- This packet is not probed by default; the remote stub must
- request it, by supplying an appropriate `qSupported' response
- (*note qSupported::).
+`gdb-7.6.50.20131211-cvs/gdb'
+ the source specific to GDB itself
- `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::).
+`gdb-7.6.50.20131211-cvs/bfd'
+ source for the Binary File Descriptor library
- This packet is not probed by default; the remote stub must
- request it, by supplying an appropriate `qSupported' response
- (*note qSupported::).
+`gdb-7.6.50.20131211-cvs/include'
+ GNU include files
- `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.
+`gdb-7.6.50.20131211-cvs/libiberty'
+ source for the `-liberty' free software library
- This packet is not probed by default; the remote stub must
- request it, by supplying an appropriate `qSupported' response
- (*note qSupported::).
+`gdb-7.6.50.20131211-cvs/opcodes'
+ source for the library of opcode tables and disassemblers
- `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::).
+`gdb-7.6.50.20131211-cvs/readline'
+ source for the GNU command-line interface
- This packet is not probed by default; the remote stub must
- request it, by supplying an appropriate `qSupported' response
- (*note qSupported::).
+`gdb-7.6.50.20131211-cvs/glob'
+ source for the GNU filename pattern-matching subroutine
- `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::).
+`gdb-7.6.50.20131211-cvs/mmalloc'
+ source for the GNU memory-mapped malloc package
- This packet is not probed by default; the remote stub must
- request it, by supplying an appropriate `qSupported' response
- (*note qSupported::).
+ 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.6.50.20131211-cvs' directory.
- `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.
+ 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.
- This packet is not probed by default.
+ For example:
- `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.
+ cd gdb-7.6.50.20131211-cvs
+ ./configure HOST
+ make
- This packet is not probed by default; the remote stub must
- request it, by supplying an appropriate `qSupported' response
- (*note qSupported::).
+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.)
- `qXfer:osdata:read::OFFSET,LENGTH'
- Access the target's "operating system information". *Note
- Operating System 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.
+ `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:
- 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.
+ sh configure HOST
- `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.
+ If you run `configure' from a directory that contains source
+directories for multiple libraries or programs, such as the
+`gdb-7.6.50.20131211-cvs' source directory for version
+7.6.50.20131211-cvs, `configure' creates configuration files for every
+directory level underneath (unless you tell it not to, with the
+`--norecursion' option).
- `E00'
- The request was malformed, or ANNEX was invalid.
+ 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'.
- `E NN'
- The offset was invalid, or there was an error encountered
- reading the data. NN is a hex-encoded `errno' value.
+ 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.
- `'
- An empty reply indicates the OBJECT string was not recognized
- by the stub, or that the object does not support reading.
+
+File: gdb.info, Node: Separate Objdir, Next: Config Names, Prev: Running Configure, Up: Installing GDB
-`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.
+C.3 Compiling GDB in Another Directory
+======================================
- Here are the specific requests of this form defined so far. All
- `qXfer:OBJECT:write:...' requests use the same reply formats,
- listed below.
+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.
- `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::).
+ 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.)
- This packet is not probed by default; the remote stub must
- request it, by supplying an appropriate `qSupported' response
- (*note qSupported::).
+ For example, with version 7.6.50.20131211-cvs, you can build GDB in a
+separate directory for a Sun 4 like this:
- `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.
+ cd gdb-7.6.50.20131211-cvs
+ mkdir ../gdb-sun4
+ cd ../gdb-sun4
+ ../gdb-7.6.50.20131211-cvs/configure sun4
+ make
- This packet is not probed by default; the remote stub must
- request it, by supplying an appropriate `qSupported' response
- (*note qSupported::).
+ 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'.
- Reply:
- `NN'
- NN (hex encoded) is the number of bytes written. This may be
- fewer bytes than supplied in the request.
+ 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.6.50.20131211-cvs/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'.
- `E00'
- The request was malformed, or ANNEX was invalid.
+ 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'.
- `E NN'
- The offset was invalid, or there was an error encountered
- writing the data. NN is a hex-encoded `errno' value.
+ 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).
- `'
- An empty reply indicates the OBJECT string was not recognized
- by the stub, or that the object does not support writing.
+ The `Makefile' that `configure' generates in each source directory
+also runs recursively. If you type `make' in a source directory such
+as `gdb-7.6.50.20131211-cvs' (or in a separate configured directory
+configured with `--srcdir=DIRNAME/gdb-7.6.50.20131211-cvs'), you will
+build all the required libraries, and then build GDB.
-`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.
+ 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.
-`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'.
+
+File: gdb.info, Node: Config Names, Next: Configure Options, Prev: Separate Objdir, Up: Installing GDB
- 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.
+C.4 Specifying Names for Hosts and Targets
+==========================================
- Reply:
- `1'
- The remote server attached to an existing process.
+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:
- `0'
- The remote server created a new process.
+ ARCHITECTURE-VENDOR-OS
- `E NN'
- A badly formed request or an error was encountered.
+ 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:
- ---------- Footnotes ----------
+ % 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
- (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.
+`config.sub' is also distributed in the GDB source directory
+(`gdb-7.6.50.20131211-cvs', for version 7.6.50.20131211-cvs).

-File: gdb.info, Node: Architecture-Specific Protocol Details, Next: Tracepoint Packets, Prev: General Query Packets, Up: Remote Protocol
-
-E.5 Architecture-Specific Protocol Details
-==========================================
+File: gdb.info, Node: Configure Options, Next: System-wide configuration, Prev: Config Names, Up: Installing GDB
-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.
+C.5 `configure' Options
+=======================
-* Menu:
+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'.
-* ARM-Specific Protocol Details::
-* MIPS-Specific Protocol Details::
+ configure [--help]
+ [--prefix=DIR]
+ [--exec-prefix=DIR]
+ [--srcdir=DIRNAME]
+ [--norecursion] [--rm]
+ [--target=TARGET]
+ HOST
-
-File: gdb.info, Node: ARM-Specific Protocol Details, Next: MIPS-Specific Protocol Details, Up: Architecture-Specific Protocol Details
+You may introduce options with a single `-' rather than `--' if you
+prefer; but you may abbreviate option names if you use `--'.
-E.5.1 ARM-specific Protocol Details
------------------------------------
+`--help'
+ Display a quick summary of how to invoke `configure'.
-* Menu:
+`--prefix=DIR'
+ Configure the source to install programs and files under directory
+ `DIR'.
-* ARM Breakpoint Kinds::
+`--exec-prefix=DIR'
+ Configure the source to install programs under directory `DIR'.
-
-File: gdb.info, Node: ARM Breakpoint Kinds, Up: ARM-Specific Protocol Details
+`--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.
-E.5.1.1 ARM Breakpoint Kinds
-............................
+`--norecursion'
+ Configure only the directory level where `configure' is executed;
+ do not propagate configuration to subdirectories.
-These breakpoint kinds are defined for the `Z0' and `Z1' packets.
+`--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.
-2
- 16-bit Thumb mode breakpoint.
+ There is no convenient way to generate a list of all available
+ targets.
-3
- 32-bit Thumb mode (Thumb-2) breakpoint.
+`HOST ...'
+ Configure GDB to run on the specified HOST.
-4
- 32-bit ARM mode breakpoint.
+ 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.

-File: gdb.info, Node: MIPS-Specific Protocol Details, Prev: ARM-Specific Protocol Details, Up: Architecture-Specific Protocol Details
+File: gdb.info, Node: System-wide configuration, Prev: Configure Options, Up: Installing GDB
-E.5.2 MIPS-specific Protocol Details
-------------------------------------
+C.6 System-wide configuration and settings
+==========================================
-* Menu:
+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.).
-* MIPS Register packet Format::
-* MIPS Breakpoint Kinds::
+ Here is the corresponding configure option:
-
-File: gdb.info, Node: MIPS Register packet Format, Next: MIPS Breakpoint Kinds, Up: MIPS-Specific Protocol Details
-
-E.5.2.1 MIPS Register Packet Format
-...................................
+`--with-system-gdbinit=FILE'
+ Specify that the default location of the system-wide init file is
+ FILE.
-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.
+ If GDB has been configured with the option `--prefix=$prefix', it
+may be subject to relocation. Two possible cases:
-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.
+ * 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'.
-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'.
+ * 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.
-
-File: gdb.info, Node: MIPS Breakpoint Kinds, Prev: MIPS Register packet Format, Up: MIPS-Specific Protocol Details
+* Menu:
-E.5.2.2 MIPS Breakpoint Kinds
-.............................
+* System-wide Configuration Scripts:: Installed System-wide Configuration Scripts
-These breakpoint kinds are defined for the `Z0' and `Z1' packets.
+
+File: gdb.info, Node: System-wide Configuration Scripts, Up: System-wide configuration
-2
- 16-bit MIPS16 mode breakpoint.
+C.6.1 Installed System-wide Configuration Scripts
+-------------------------------------------------
-3
- 16-bit microMIPS mode breakpoint.
+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.
-4
- 32-bit standard MIPS mode breakpoint.
+ 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.
-5
- 32-bit microMIPS mode breakpoint.
+ * `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.

-File: gdb.info, Node: Tracepoint Packets, Next: Host I/O Packets, Prev: Architecture-Specific Protocol Details, Up: Remote Protocol
-
-E.6 Tracepoint Packets
-======================
-
-Here we describe the packets GDB uses to implement tracepoints (*note
-Tracepoints::).
+File: gdb.info, Node: Maintenance Commands, Next: Remote Protocol, Prev: Installing GDB, Up: Top
-`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.
+Appendix D Maintenance Commands
+*******************************
- Replies:
- `OK'
- The packet was understood and carried out.
+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::.)
- `qRelocInsn'
- *Note Relocate instruction reply packet: Tracepoint Packets.
+`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.
- `'
- The packet was not recognized.
+`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::).
-`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.
+`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:
- 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.
+ `breakpoint'
+ Normal, explicitly set breakpoint.
- The `ACTION...' portion of the packet is a series of actions,
- concatenated without separators. Each action has one of the
- following forms:
+ `watchpoint'
+ Normal, explicitly set watchpoint.
- `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.
+ `longjmp'
+ Internal breakpoint, used to handle correctly stepping through
+ `longjmp' calls.
- `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).
+ `longjmp resume'
+ Internal breakpoint at the target of a `longjmp'.
- `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).
+ `until'
+ Temporary internal breakpoint used by the GDB `until' command.
+ `finish'
+ Temporary internal breakpoint used by the GDB `finish'
+ command.
- 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.)
+ `shlib events'
+ Shared library events.
- Replies:
- `OK'
- The packet was understood and carried out.
- `qRelocInsn'
- *Note Relocate instruction reply packet: Tracepoint Packets.
+`maint info bfds'
+ This prints information about each `bfd' object that is known to
+ GDB. *Note BFD: (bfd)Top.
- `'
- The packet was not recognized.
+`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.
-`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.
+ `set displaced-stepping on'
+ If the target architecture supports it, GDB will use
+ displaced stepping to step over breakpoints.
- 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.
+ `set displaced-stepping off'
+ GDB will not use displaced stepping to step over breakpoints,
+ even if such is supported by the target architecture.
- 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.
+ `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.
- 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.
+`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.
- 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.
+`maint check-symtabs'
+ Check the consistency of currently expanded symtabs.
-`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.
+`maint expand-symtabs [REGEXP]'
+ Expand symbol tables. If REGEXP is specified, only expand symbol
+ tables for file names matching REGEXP.
-`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.
+`maint cplus first_component NAME'
+ Print the first C++ class/namespace component of NAME.
- 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:
+`maint cplus namespace'
+ Print the list of possible C++ namespaces.
- `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.
+`maint demangle NAME'
+ Demangle a C++ or Objective-C mangled NAME.
- `T T'
- The selected trace frame records a hit of tracepoint number T;
- T is a hexadecimal number.
+`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.
-`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).
+`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.
-`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.
+ These commands take an optional parameter MESSAGE-TEXT that is
+ used as the text of the error or warning message.
- Replies:
+ Here's an example of using `internal-error':
- `0'
- The minimum instruction length is currently unknown.
+ (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)
- `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.
+`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.
- `E'
- An error has occurred.
+ `quit'
+ You can specify that GDB should always (yes) or never (no)
+ quit. The default is to ask the user what to do.
- `'
- An empty reply indicates that the request is not supported by
- the stub.
+ `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.
-`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.).
+`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.
-`QTStop'
- End the tracepoint experiment. Stop collecting trace frames.
+`maint print architecture [FILE]'
+ Print the entire architecture configuration. The optional argument
+ FILE names the file where the output goes.
-`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.
+`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.
-`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.
+`maint print dummy-frames'
+ Prints the contents of GDB's internal dummy-frame stack.
-`QTinit'
- Clear the table of tracepoints, and empty the trace frame buffer.
+ (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)
-`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.
+ Takes an optional file parameter.
- 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.
+`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.
-`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.
+ 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.
-`qTStatus'
- Ask the stub if there is a trace experiment running right now.
+ These commands take an optional parameter, a file name to which to
+ write the information.
- The reply has the form:
+`maint print reggroups [FILE]'
+ Print GDB's internal register group data structures. The optional
+ argument FILE tells to what file to write the information.
- `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.
+ 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
- If the trace is not running, the agent may report any of several
- explanations as one of the optional fields:
+`flushregs'
+ This command forces GDB to flush its internal register cache.
- `tnotrun:0'
- No trace has been run yet.
+`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.
- `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.
+`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::.
- `tfull:0'
- The trace stopped because the trace buffer filled up.
+`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.
- `tdisconnected:0'
- The trace stopped because GDB disconnected from the target.
+`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.
- `tpasscount:TPNUM'
- The trace stopped because tracepoint TPNUM exceeded its pass
- count.
+ 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.
- `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.
+`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.
- `tunknown:0'
- The trace stopped for some other reason.
+`maint set dwarf2 always-disassemble'
+`maint show dwarf2 always-disassemble'
+ Control the behavior of `info address' when using DWARF debugging
+ information.
- 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.
+ 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.
- `tframes:N'
- The number of trace frames in the buffer.
+ Here is an example of the resulting disassembly:
- `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.
+ (gdb) info addr argc
+ Symbol "argc" is a complex DWARF expression:
+ 1: DW_OP_fbreg 0
- `tsize:N'
- The total size of the trace buffer, in bytes.
+ For more information on these expressions, see the DWARF standard
+ (http://www.dwarfstd.org/).
- `tfree:N'
- The number of bytes still unused in the buffer.
+`maint set dwarf2 max-cache-age'
+`maint show dwarf2 max-cache-age'
+ Control the DWARF 2 compilation unit cache.
- `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.
+ 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.
- `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.
+`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.
-`qTP:TP:ADDR'
- Ask the stub for the current state of tracepoint number TP at
- address ADDR.
+ Configuring with `--enable-profiling' arranges for GDB to be
+ compiled with the `-pg' compiler option.
- 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.
+`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.
-`qTV:VAR'
- Ask the stub for the value of the trace state variable number VAR.
+`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.
- 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.
+`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.
- `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.
+ 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.
-`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.
+ The following command is useful for non-interactive invocations of
+GDB, such as in the test suite.
-`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:
+`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.
- Reply:
- `m ADDRESS:ID:EXTRA'
- A single marker
+`show watchdog'
+ Show the current setting of the target wait timeout.
- `m ADDRESS:ID:EXTRA,ADDRESS:ID:EXTRA...'
- a comma-separated list of markers
+
+File: gdb.info, Node: Remote Protocol, Next: Agent Expressions, Prev: Maintenance Commands, Up: Top
- `l'
- (lower case letter `L') denotes end of list.
+Appendix E GDB Remote Serial Protocol
+*************************************
- `E NN'
- An error occurred. NN are hex digits.
+* Menu:
- `'
- An empty reply indicates that the request is not supported by
- the stub.
+* 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::
+* Branch Trace Format::
- ADDRESS is encoded in hex. ID and EXTRA are strings encoded in
- hex.
+
+File: gdb.info, Node: Overview, Next: Packets, Up: Remote Protocol
- 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").
+E.1 Overview
+============
-`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.
+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.
-`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.
+ In the examples below, `->' and `<-' are used to indicate
+transmitted and received data, respectively.
-`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.
+ 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:
-`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.
+ `$'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).
-`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.
+ 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
-E.6.1 Relocate instruction reply packet
----------------------------------------
+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 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.
+ 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):
- 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:
+ -> `$'PACKET-DATA`#'CHECKSUM
+ <- `+'
+ The `+'/`-' acknowledgments can be disabled once a connection is
+established. *Note Packet Acknowledgment::, for details.
-`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.
+ 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.
- Replies:
-`qRelocInsn:ADJUSTED_SIZE'
- Informs the stub the relocation is complete. ADJUSTED_SIZE is the
- length in bytes of resulting relocated instruction sequence.
+ PACKET-DATA consists of a sequence of characters with the exception
+of `#' and `$' (see `X' packet for additional exceptions).
-`E NN'
- A badly formed request was detected, or an error was encountered
- while relocating the instruction.
+ Fields within the packet should be separated using `,' `;' or `:'.
+Except where otherwise noted all numbers are represented in HEX with
+leading zeros suppressed.
-
-File: gdb.info, Node: Host I/O Packets, Next: Interrupts, Prev: Tracepoint Packets, Up: Remote Protocol
+ 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).
-E.7 Host I/O Packets
-====================
+ 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 "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 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.
+
+
+File: gdb.info, Node: Packets, Next: Stop Reply Packets, Prev: Overview, Up: Remote Protocol
+
+E.2 Packets
+===========
+
+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.
+
+ 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.
+
+`!'
+ 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::.
+
+ Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`C SIG[;ADDR]'
+ Continue with signal SIG (hex signal number). If `;ADDR' is
+ omitted, resume at same address.
+
+ This packet is deprecated for multi-threading support. *Note
+ vCont packet::.
+
+ Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`d'
+ Toggle debug flag.
+
+ Don't use this packet; instead, define a general set packet (*note
+ General Query Packets::).
+
+`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 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.
+
+ Reply:
+ `OK'
+ for success
+
+ `E NN'
+ for an error
+
+`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
+
+`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::.
+
+ Reply:
+ `OK'
+ for success
+
+ `E NN'
+ for an error
+
+`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
+
+ `'
+ Indicating an unrecognized QUERY.
+
+`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).
+
+ Reply:
+ `OK'
+ for success
+
+ `E NN'
+ for an error
+
+`q NAME PARAMS...'
+`Q NAME PARAMS...'
+ General query (`q') and set (`Q'). These packets are described
+ fully in *note General Query Packets::.
+
+`r'
+ Reset the entire system.
+
+ Don't use this packet; use the `R' packet instead.
+
+`R XX'
+ Restart the program being debugged. XX, while needed, is ignored.
+ This packet is only available in extended mode (*note extended
+ mode::).
+
+ The `R' packet has no reply.
+
+`s [ADDR]'
+ Single step. ADDR is the address at which to resume. If ADDR is
+ omitted, resume at same address.
+
+ This packet is deprecated for multi-threading support. *Note
+ vCont packet::.
+
+ Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`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.
+
+ This packet is deprecated for multi-threading support. *Note
+ vCont packet::.
+
+ Reply: *Note Stop Reply Packets::, for the reply specifications.
+
+`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.
+
+`T THREAD-ID'
+ Find out if the thread THREAD-ID is alive. *Note thread-id
+ syntax::.
+
+ Reply:
+ `OK'
+ thread is still alive
+
+ `E NN'
+ thread is dead
+
+`v'
+ Packets starting with `v' are identified by a multi-letter name,
+ up to the first `;' or `?' (or the end of the packet).
+
+`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.
+
+ This packet is only available in extended mode (*note extended
+ mode::).
+
+ Reply:
+ `E NN'
+ for an error
+
+ `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.
+
+ `r START,END'
+ Step once, and then keep stepping as long as the thread stops
+ at addresses between START (inclusive) and END (exclusive).
+ The remote stub reports a stop reply when either the thread
+ goes out of the range or is stopped due to an unrelated
+ reason, such as hitting a breakpoint. *Note range stepping::.
+
+ If the range is empty (START == END), then the action becomes
+ equivalent to the `s' action. In other words, single-step
+ once, and report the stop (even if the stepped instruction
+ jumps to START).
+
+ (A stop reply may be sent at any point even if the PC is
+ still within the stepping range; for example, it is valid to
+ implement this packet in a degenerate way as a single
+ instruction step operation.)
+
+
+ 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
+
+`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
+
+`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
+
+ `OK'
+ for success
+
+`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.
+
+ This packet is only available in extended mode (*note extended
+ mode::).
+
+ Reply:
+ `E NN'
+ for an error
+
+ `Any stop packet'
+ for success (*note Stop Reply Packets::)
+
+`vStopped'
+ *Note Notification Packets::.
+
+`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::).
+
+ Reply:
+ `OK'
+ for success
+
+ `E NN'
+ for an error
+
+`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
+
+`z1,ADDR,KIND'
+`Z1,ADDR,KIND[;COND_LIST...]'
+ Insert (`Z1') or remove (`z1') a hardware breakpoint at address
+ ADDR.
+
+ 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.
+
+ _Implementation note: A hardware breakpoint is not affected by code
+ movement._
+
+ Reply:
+ `OK'
+ success
+
+ `'
+ not supported
+
+ `E NN'
+ for an error
+
+`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.
+
+ Reply:
+ `OK'
+ success
+
+ `'
+ not supported
+
+ `E NN'
+ for an error
+
+`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.
+
+ Reply:
+ `OK'
+ success
+
+ `'
+ not supported
+
+ `E NN'
+ for an error
+
+`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.
+
+ Reply:
+ `OK'
+ success
+
+ `'
+ not supported
+
+ `E NN'
+ for an error
+
+
+
+File: gdb.info, Node: Stop Reply Packets, Next: General Query Packets, Prev: Packets, Up: Remote Protocol
+
+E.3 Stop Reply Packets
+======================
+
+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.
+
+
+
+File: gdb.info, Node: General Query Packets, Next: Architecture-Specific Protocol Details, Prev: Stop Reply Packets, Up: Remote Protocol
+
+E.4 General Query Packets
+=========================
+
+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.)
- The Host I/O request packets all encode a single operation along with
-its arguments. They have this format:
+`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.
-`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::).
+ 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.
+
+ 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:btrace:read' No `-' Yes
+ `qXfer:features:read' No `-' Yes
+ `qXfer:libraries:read' No `-' Yes
+ `qXfer:libraries-svr4:read'No `-' Yes
+ `augmented-libraries-svr4-read'No `-' No
+ `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
+ `Qbtrace:off' Yes `-' Yes
+ `Qbtrace:bts' Yes `-' 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
+ `QTBuffer:size' 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:btrace:read'
+ The remote stub understands the `qXfer:btrace:read' packet
+ (*note qXfer btrace 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::).
+
+ `augmented-libraries-svr4-read'
+ The remote stub understands the augmented form of 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::).
- The valid responses to Host I/O packets are:
+ `QPassSignals'
+ The remote stub understands the `QPassSignals' packet (*note
+ QPassSignals::).
-`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.
+ `QStartNoAckMode'
+ The remote stub understands the `QStartNoAckMode' packet and
+ prefers to operate in no-acknowledgment mode. *Note Packet
+ Acknowledgment::.
-`'
- An empty response indicates that this operation is not recognized.
+ `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::).
- These are the supported Host I/O operations:
+ `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.).
-`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.
+ `ConditionalTracepoints'
+ The remote stub accepts and implements conditional
+ expressions defined for tracepoints (*note Tracepoint
+ Conditions::).
-`vFile:close: FD'
- Close the open file corresponding to FD and return 0, or -1 if an
- error occurs.
+ `ReverseContinue'
+ The remote stub accepts and implements the reverse continue
+ packet (*note bc::).
-`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.
+ `ReverseStep'
+ The remote stub accepts and implements the reverse step packet
+ (*note bs::).
- 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.
+ `TracepointSource'
+ The remote stub understands the `QTDPsrc' packet that supplies
+ the source form of tracepoint definitions.
-`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.
+ `QAgent'
+ The remote stub understands the `QAgent' packet.
-`vFile:unlink: PATHNAME'
- Delete the file at PATHNAME on the target. Return 0, or -1 if an
- error occurs. PATHNAME is a string.
+ `QAllow'
+ The remote stub understands the `QAllow' packet.
-`vFile:readlink: FILENAME'
- Read value of symbolic link FILENAME on the target. Return the
- number of bytes read, or -1 if an error occurs.
+ `QDisableRandomization'
+ The remote stub understands the `QDisableRandomization'
+ packet.
- 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.
+ `StaticTracepoint'
+ The remote stub supports static tracepoints.
+ `InstallInTrace'
+ The remote stub supports installing tracepoint in tracing.
-
-File: gdb.info, Node: Interrupts, Next: Notification Packets, Prev: Host I/O Packets, Up: Remote Protocol
+ `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.
-E.8 Interrupts
-==============
+ `QTBuffer:size'
+ The remote stub supports the `QTBuffer:size' (*note
+ QTBuffer-size::) packet that allows to change the size of the
+ trace buffer.
-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'.
+ `tracenz'
+ The remote stub supports the `tracenz' bytecode for
+ collecting strings. See *note Bytecode Descriptions:: for
+ details about the bytecode.
- 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.
+ `BreakpointCommands'
+ The remote stub supports running a breakpoint's command list
+ itself, rather than reporting the hit to GDB.
- `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.
+ `Qbtrace:off'
+ The remote stub understands the `Qbtrace:off' 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.
+ `Qbtrace:bts'
+ The remote stub understands the `Qbtrace:bts' packet.
- 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.
-
-File: gdb.info, Node: Notification Packets, Next: Remote Non-Stop, Prev: Interrupts, Up: Remote Protocol
+`qSymbol::'
+ Notify the target that GDB is prepared to serve symbol lookup
+ requests. Accept requests from the target for the values of
+ symbols.
-E.9 Notification Packets
-========================
+ Reply:
+ `OK'
+ The target does not need to look up any (more) symbols.
-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.
+ `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.
- 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.
+`qSymbol:SYM_VALUE:SYM_NAME'
+ Set the value of SYM_NAME to SYM_VALUE.
- Every notification's DATA begins with a name, which contains no
-colon characters, followed by a colon character.
+ SYM_NAME (hex encoded) is the name of a symbol whose value the
+ target has previously requested.
- 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.
+ 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.
- 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.
+ Reply:
+ `OK'
+ The target does not need to look up any (more) symbols.
- (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.)
+ `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.
- The following notification packets from the stub to GDB are defined:
+`qTBuffer'
+`QTBuffer'
+`QTDisconnected'
+`QTDP'
+`QTDPsrc'
+`QTDV'
+`qTfP'
+`qTfV'
+`QTFrame'
+`qTMinFTPILen'
+ *Note Tracepoint Packets::.
-`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.
+`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'.
-
-File: gdb.info, Node: Remote Non-Stop, Next: Packet Acknowledgment, Prev: Notification Packets, Up: Remote Protocol
+ Reply:
+ `XX...'
+ Where `XX...' is a hex encoding of ASCII data, comprising the
+ printable string containing the extra information about the
+ thread's attributes.
-E.10 Remote Protocol Support for Non-Stop Mode
-==============================================
+ (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.)
-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::).
+`QTNotes'
+`qTP'
+`QTSave'
+`qTsP'
+`qTsV'
+`QTStart'
+`QTStop'
+`QTEnable'
+`QTDisable'
+`QTinit'
+`QTro'
+`qTStatus'
+`qTV'
+`qTfSTM'
+`qTsSTM'
+`qTSTMat'
+ *Note Tracepoint Packets::.
- 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.
+`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.
- 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.
+ Here are the specific requests of this form defined so far. All
+ `qXfer:OBJECT:read:...' requests use the same reply formats,
+ listed below.
- 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.
+ `qXfer:auxv:read::OFFSET,LENGTH'
+ Access the target's "auxiliary vector". *Note auxiliary
+ vector: OS Information. Note ANNEX must be empty.
- 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.
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
- 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.
+ `qXfer:btrace:read:ANNEX:OFFSET,LENGTH'
+ Return a description of the current branch trace. *Note
+ Branch Trace Format::. The annex part of the generic `qXfer'
+ packet may have one of the following values:
- 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.
+ `all'
+ Returns all available branch trace.
- 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'.
+ `new'
+ Returns all available branch trace if the branch trace
+ changed since the last read request.
-
-File: gdb.info, Node: Packet Acknowledgment, Next: Examples, Prev: Remote Non-Stop, Up: Remote Protocol
+ This packet is not probed by default; the remote stub must
+ request it by supplying an appropriate `qSupported' response
+ (*note qSupported::).
-E.11 Packet Acknowledgment
-==========================
+ `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.
-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.
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
- 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::.
+ `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::).
- 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.
+ 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.
- 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.
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
- 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.
+ `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 unless the remote stub indicated it supports the
+ augmented form of this packet by supplying an appropriate
+ `qSupported' response (*note qXfer read::, *note
+ qSupported::).
-
-File: gdb.info, Node: Examples, Next: File-I/O Remote Protocol Extension, Prev: Packet Acknowledgment, Up: Remote Protocol
+ This packet is optional for better performance on SVR4
+ targets. GDB uses memory read packets to read the SVR4
+ library list otherwise.
-E.12 Examples
-=============
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
-Example sequence of a target being re-started. Notice how the restart
-does not get any direct output:
+ If the remote stub indicates it supports the augmented form
+ of this packet then the annex part of the generic `qXfer'
+ packet may contain a semicolon-separated list of `NAME=VALUE'
+ arguments. The currently supported arguments are:
- -> `R00'
- <- `+'
- _target restarts_
- -> `?'
- <- `+'
- <- `T001:1234123412341234'
- -> `+'
+ `start=ADDRESS'
+ A hexadecimal number specifying the address of the
+ `struct link_map' to start reading the library list
+ from. If unset or zero then the first `struct link_map'
+ in the library list will be chosen as the starting point.
- Example sequence of a target being stepped by a single instruction:
+ `prev=ADDRESS'
+ A hexadecimal number specifying the address of the
+ `struct link_map' immediately preceding the `struct
+ link_map' specified by the `start' argument. If unset
+ or zero then the remote stub will expect that no `struct
+ link_map' exists prior to the starting point.
- -> `G1445...'
- <- `+'
- -> `s'
- <- `+'
- _time passes_
- <- `T001:1234123412341234'
- -> `+'
- -> `g'
- <- `+'
- <- `1455...'
- -> `+'
-
-File: gdb.info, Node: File-I/O Remote Protocol Extension, Next: Library List Format, Prev: Examples, Up: Remote Protocol
+ Arguments that are not understood by the remote stub will be
+ silently ignored.
-E.13 File-I/O Remote Protocol Extension
-=======================================
+ `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::).
-* Menu:
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
-* 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::
+ `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.
-
-File: gdb.info, Node: File-I/O Overview, Next: Protocol Basics, Up: File-I/O Remote Protocol Extension
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
-E.13.1 File-I/O Overview
-------------------------
+ `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::).
-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.
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
- 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.
+ `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.
- 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.
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
- 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.
+ `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::).
- (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
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
- 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.
+ `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::).
- File I/O is not supported in non-stop mode.
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
-
-File: gdb.info, Node: Protocol Basics, Next: The F Request Packet, Prev: File-I/O Overview, Up: File-I/O Remote Protocol Extension
+ `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.
-E.13.2 Protocol Basics
-----------------------
+ This packet is not probed by default.
-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:
+ `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.
- * A unique identifier for the requested system call.
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
- * 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.
+ `qXfer:osdata:read::OFFSET,LENGTH'
+ Access the target's "operating system information". *Note
+ Operating System Information::.
- At this point, GDB has to perform the following actions.
+ 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.
- * 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.
+ `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.
- * GDB translates all value from protocol representation to host
- representation as needed. Datatypes are coerced into the host
- types.
+ `l'
+ The OFFSET in the request is at the end of the data. There
+ is no more data to be read.
- * GDB calls the system call.
+ `E00'
+ The request was malformed, or ANNEX was invalid.
- * It then coerces datatypes back to protocol representation.
+ `E NN'
+ The offset was invalid, or there was an error encountered
+ reading the data. NN is a hex-encoded `errno' value.
- * 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.
+ `'
+ 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.
- Eventually GDB replies with another `F' packet which contains all
-necessary information for the target to continue. This at least
-contains
+ Here are the specific requests of this form defined so far. All
+ `qXfer:OBJECT:write:...' requests use the same reply formats,
+ listed below.
- * Return value.
+ `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::).
- * `errno', if has been changed by the system call.
+ This packet is not probed by default; the remote stub must
+ request it, by supplying an appropriate `qSupported' response
+ (*note qSupported::).
- * "Ctrl-C" flag.
+ `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::).
- After having done the needed type and value coercion, the target
-continues the latest continue or step action.
+ Reply:
+ `NN'
+ NN (hex encoded) is the number of bytes written. This may be
+ fewer bytes than supplied in the request.
-
-File: gdb.info, Node: The F Request Packet, Next: The F Reply Packet, Prev: Protocol Basics, Up: File-I/O Remote Protocol Extension
+ `E00'
+ The request was malformed, or ANNEX was invalid.
-E.13.3 The `F' Request Packet
------------------------------
+ `E NN'
+ The offset was invalid, or there was an error encountered
+ writing the data. NN is a hex-encoded `errno' value.
-The `F' request packet has the following format:
+ `'
+ An empty reply indicates the OBJECT string was not recognized
+ by the stub, or that the object does not support writing.
-`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.
+`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.
- 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.
+`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.
-
-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
+ Reply:
+ `1'
+ The remote server attached to an existing process.
-E.13.4 The `F' Reply Packet
----------------------------
+ `0'
+ The remote server created a new process.
-The `F' reply packet has the following format:
+ `E NN'
+ A badly formed request or an error was encountered.
-`FRETCODE,ERRNO,CTRL-C FLAG;CALL-SPECIFIC ATTACHMENT'
- RETCODE is the return code of the system call as hexadecimal value.
+`Qbtrace:bts'
+ Enable branch tracing for the current thread using bts tracing.
- ERRNO is the `errno' set by the call, in protocol-specific
- representation. This parameter can be omitted if the call was
- successful.
+ Reply:
+ `OK'
+ Branch tracing has been enabled.
- 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':
+ `E.errtext'
+ A badly formed request or an error was encountered.
- F0,0,C
+`Qbtrace:off'
+ Disable branch tracing for the current thread.
- or, if the call was interrupted before the host call has been
- performed:
+ Reply:
+ `OK'
+ Branch tracing has been disabled.
- F-1,4,C
+ `E.errtext'
+ A badly formed request or an error was encountered.
- assuming 4 is the protocol-specific representation of `EINTR'.
+ ---------- Footnotes ----------
+
+ (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.

-File: gdb.info, Node: The Ctrl-C Message, Next: Console I/O, Prev: The F Reply Packet, Up: File-I/O Remote Protocol Extension
+File: gdb.info, Node: Architecture-Specific Protocol Details, Next: Tracepoint Packets, Prev: General Query Packets, Up: Remote Protocol
-E.13.5 The `Ctrl-C' Message
----------------------------
+E.5 Architecture-Specific Protocol Details
+==========================================
-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.
+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.
- It's important for the target to know in which state the system call
-was interrupted. There are two possible cases:
+* Menu:
- * The system call hasn't been performed on the host yet.
+* ARM-Specific Protocol Details::
+* MIPS-Specific Protocol Details::
- * The system call on the host has been finished.
+
+File: gdb.info, Node: ARM-Specific Protocol Details, Next: MIPS-Specific Protocol Details, Up: Architecture-Specific Protocol Details
+E.5.1 ARM-specific Protocol Details
+-----------------------------------
- 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.
+* Menu:
- 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.
+* ARM Breakpoint Kinds::

-File: gdb.info, Node: Console I/O, Next: List of Supported Calls, Prev: The Ctrl-C Message, Up: File-I/O Remote Protocol Extension
-
-E.13.6 Console I/O
-------------------
+File: gdb.info, Node: ARM Breakpoint Kinds, Up: ARM-Specific Protocol Details
-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:
+E.5.1.1 ARM Breakpoint Kinds
+............................
- * The user types `Ctrl-c'. The behaviour is as explained above, and
- the `read' system call is treated as finished.
+These breakpoint kinds are defined for the `Z0' and `Z1' packets.
- * The user presses <RET>. This is treated as end of input with a
- trailing newline.
+2
+ 16-bit Thumb mode breakpoint.
- * 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.
+3
+ 32-bit Thumb mode (Thumb-2) breakpoint.
+4
+ 32-bit ARM mode breakpoint.
- 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.

-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
+File: gdb.info, Node: MIPS-Specific Protocol Details, Prev: ARM-Specific Protocol Details, Up: Architecture-Specific Protocol Details
-E.13.7 List of Supported Calls
-------------------------------
+E.5.2 MIPS-specific Protocol Details
+------------------------------------
* Menu:
-* open::
-* close::
-* read::
-* write::
-* lseek::
-* rename::
-* unlink::
-* stat/fstat::
-* gettimeofday::
-* isatty::
-* system::
+* MIPS Register packet Format::
+* MIPS Breakpoint Kinds::

-File: gdb.info, Node: open, Next: close, Up: List of Supported Calls
-
-open
-....
-
-Synopsis:
- int open(const char *pathname, int flags);
- int open(const char *pathname, int flags, mode_t mode);
-
-Request:
- `Fopen,PATHPTR/LEN,FLAGS,MODE'
+File: gdb.info, Node: MIPS Register packet Format, Next: MIPS Breakpoint Kinds, Up: MIPS-Specific Protocol Details
- FLAGS is the bitwise `OR' of the following values:
+E.5.2.1 MIPS Register Packet Format
+...................................
- `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.
+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.
- `O_EXCL'
- When used with `O_CREAT', if the file already exists it is an
- error and open() fails.
+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.
- `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.
+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'.
- `O_APPEND'
- The file is opened in append mode.
- `O_RDONLY'
- The file is opened for reading only.
+
+File: gdb.info, Node: MIPS Breakpoint Kinds, Prev: MIPS Register packet Format, Up: MIPS-Specific Protocol Details
- `O_WRONLY'
- The file is opened for writing only.
+E.5.2.2 MIPS Breakpoint Kinds
+.............................
- `O_RDWR'
- The file is opened for reading and writing.
+These breakpoint kinds are defined for the `Z0' and `Z1' packets.
- Other bits are silently ignored.
+2
+ 16-bit MIPS16 mode breakpoint.
- MODE is the bitwise `OR' of the following values:
+3
+ 16-bit microMIPS mode breakpoint.
- `S_IRUSR'
- User has read permission.
+4
+ 32-bit standard MIPS mode breakpoint.
- `S_IWUSR'
- User has write permission.
+5
+ 32-bit microMIPS mode breakpoint.
- `S_IRGRP'
- Group has read permission.
- `S_IWGRP'
- Group has write permission.
+
+File: gdb.info, Node: Tracepoint Packets, Next: Host I/O Packets, Prev: Architecture-Specific Protocol Details, Up: Remote Protocol
- `S_IROTH'
- Others have read permission.
+E.6 Tracepoint Packets
+======================
- `S_IWOTH'
- Others have write permission.
+Here we describe the packets GDB uses to implement tracepoints (*note
+Tracepoints::).
- Other bits are silently ignored.
+`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.
-Return value:
- `open' returns the new file descriptor or -1 if an error occurred.
+ Replies:
+ `OK'
+ The packet was understood and carried out.
-Errors:
+ `qRelocInsn'
+ *Note Relocate instruction reply packet: Tracepoint Packets.
- `EEXIST'
- PATHNAME already exists and `O_CREAT' and `O_EXCL' were used.
+ `'
+ The packet was not recognized.
- `EISDIR'
- PATHNAME refers to a directory.
+`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.
- `EACCES'
- The requested access is not allowed.
+ 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.
- `ENAMETOOLONG'
- PATHNAME was too long.
+ The `ACTION...' portion of the packet is a series of actions,
+ concatenated without separators. Each action has one of the
+ following forms:
- `ENOENT'
- A directory component in PATHNAME does not exist.
+ `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.
- `ENODEV'
- PATHNAME refers to a device, pipe, named pipe or socket.
+ `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).
- `EROFS'
- PATHNAME refers to a file on a read-only filesystem and write
- access was requested.
+ `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).
- `EFAULT'
- PATHNAME is an invalid pointer value.
- `ENOSPC'
- No space on device to create the file.
+ 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.)
- `EMFILE'
- The process already has the maximum number of files open.
+ Replies:
+ `OK'
+ The packet was understood and carried out.
- `ENFILE'
- The limit on the total number of files open on the system has
- been reached.
+ `qRelocInsn'
+ *Note Relocate instruction reply packet: Tracepoint Packets.
- `EINTR'
- The call was interrupted by the user.
+ `'
+ 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.
-
-File: gdb.info, Node: close, Next: read, Prev: open, Up: List of Supported Calls
+ 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.
-close
-.....
+ 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.
-Synopsis:
- int close(int fd);
+ 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.
-Request:
- `Fclose,FD'
+ 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.
-Return value:
- `close' returns zero on success, or -1 if an error occurred.
+`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.
-Errors:
+`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.
- `EBADF'
- FD isn't a valid open file descriptor.
+ 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:
- `EINTR'
- The call was interrupted by the user.
+ `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.
-
-File: gdb.info, Node: read, Next: write, Prev: close, Up: List of Supported Calls
-read
-....
+`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.
-Synopsis:
- int read(int fd, void *buf, unsigned int count);
+`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.
-Request:
- `Fread,FD,BUFPTR,COUNT'
+`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.
-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.
+`QTFrame:outside:START:END'
+ Like `QTFrame:range:START:END', but select the first frame
+ _outside_ the given range of addresses (exclusive).
-Errors:
+`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.
- `EBADF'
- FD is not a valid file descriptor or is not open for reading.
+ Replies:
- `EFAULT'
- BUFPTR is an invalid pointer value.
+ `0'
+ The minimum instruction length is currently unknown.
- `EINTR'
- The call was interrupted by the user.
+ `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.
+ `E'
+ An error has occurred.
-
-File: gdb.info, Node: write, Next: lseek, Prev: read, Up: List of Supported Calls
+ `'
+ An empty reply indicates that the request is not supported by
+ the stub.
-write
-.....
+`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:
- int write(int fd, const void *buf, unsigned int count);
+`QTStop'
+ End the tracepoint experiment. Stop collecting trace frames.
-Request:
- `Fwrite,FD,BUFPTR,COUNT'
+`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.
-Return value:
- On success, the number of bytes written are returned. Zero
- indicates nothing was written. On error, -1 is returned.
+`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.
-Errors:
+`QTinit'
+ Clear the table of tracepoints, and empty the trace frame buffer.
- `EBADF'
- FD is not a valid file descriptor or is not open for writing.
+`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.
- `EFAULT'
- BUFPTR is an invalid pointer value.
+ 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.
- `EFBIG'
- An attempt was made to write a file that exceeds the
- host-specific maximum file size allowed.
+`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.
- `ENOSPC'
- No space on device to write the data.
+`qTStatus'
+ Ask the stub if there is a trace experiment running right now.
- `EINTR'
- The call was interrupted by the user.
+ The reply has the form:
+ `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.
-
-File: gdb.info, Node: lseek, Next: rename, Prev: write, Up: List of Supported Calls
-lseek
-.....
+ If the trace is not running, the agent may report any of several
+ explanations as one of the optional fields:
-Synopsis:
- long lseek (int fd, long offset, int flag);
+ `tnotrun:0'
+ No trace has been run yet.
-Request:
- `Flseek,FD,OFFSET,FLAG'
+ `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.
- FLAG is one of:
+ `tfull:0'
+ The trace stopped because the trace buffer filled up.
- `SEEK_SET'
- The offset is set to OFFSET bytes.
+ `tdisconnected:0'
+ The trace stopped because GDB disconnected from the target.
- `SEEK_CUR'
- The offset is set to its current location plus OFFSET bytes.
+ `tpasscount:TPNUM'
+ The trace stopped because tracepoint TPNUM exceeded its pass
+ count.
- `SEEK_END'
- The offset is set to the size of the file plus OFFSET bytes.
+ `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.
-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.
+ `tunknown:0'
+ The trace stopped for some other reason.
-Errors:
- `EBADF'
- FD is not a valid open file descriptor.
+ 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.
- `ESPIPE'
- FD is associated with the GDB console.
+ `tframes:N'
+ The number of trace frames in the buffer.
- `EINVAL'
- FLAG is not a proper value.
+ `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.
- `EINTR'
- The call was interrupted by the user.
+ `tsize:N'
+ The total size of the trace buffer, in bytes.
+ `tfree:N'
+ The number of bytes still unused in the buffer.
-
-File: gdb.info, Node: rename, Next: unlink, Prev: lseek, Up: List of Supported Calls
+ `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.
-rename
-......
+ `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.
-Synopsis:
- int rename(const char *oldpath, const char *newpath);
-Request:
- `Frename,OLDPATHPTR/LEN,NEWPATHPTR/LEN'
+`qTP:TP:ADDR'
+ Ask the stub for the current state of tracepoint number TP at
+ address ADDR.
-Return value:
- On success, zero is returned. On error, -1 is returned.
+ 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.
-Errors:
- `EISDIR'
- NEWPATH is an existing directory, but OLDPATH is not a
- directory.
+`qTV:VAR'
+ Ask the stub for the value of the trace state variable number VAR.
- `EEXIST'
- NEWPATH is a non-empty directory.
+ 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.
- `EBUSY'
- OLDPATH or NEWPATH is a directory that is in use by some
- process.
+ `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.
- `EINVAL'
- An attempt was made to make a directory a subdirectory of
- itself.
+`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)
- `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.
+`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.
- `EFAULT'
- OLDPATHPTR or NEWPATHPTR are invalid pointer values.
+`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:
- `EACCES'
- No access to the file or the path of the file.
+ Reply:
+ `m ADDRESS:ID:EXTRA'
+ A single marker
- `ENAMETOOLONG'
- OLDPATH or NEWPATH was too long.
+ `m ADDRESS:ID:EXTRA,ADDRESS:ID:EXTRA...'
+ a comma-separated list of markers
- `ENOENT'
- A directory component in OLDPATH or NEWPATH does not exist.
+ `l'
+ (lower case letter `L') denotes end of list.
- `EROFS'
- The file is on a read-only filesystem.
+ `E NN'
+ An error occurred. NN are hex digits.
+
+ `'
+ An empty reply indicates that the request is not supported by
+ the stub.
- `ENOSPC'
- The device containing the file has no room for the new
- directory entry.
+ ADDRESS is encoded in hex. ID and EXTRA are strings encoded in
+ hex.
- `EINTR'
- The call was interrupted by the user.
+ 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.
-
-File: gdb.info, Node: unlink, Next: stat/fstat, Prev: rename, Up: List of Supported Calls
+`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.
-unlink
-......
+`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.
-Synopsis:
- int unlink(const char *pathname);
+`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.
-Request:
- `Funlink,PATHNAMEPTR/LEN'
+`QTBuffer:size:SIZE'
+ This packet directs the target to make the trace buffer be of size
+ SIZE if possible. A value of `-1' tells the target to use
+ whatever size it prefers.
-Return value:
- On success, zero is returned. On error, -1 is returned.
+`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.
-Errors:
- `EACCES'
- No access to the file or the path of the file.
+E.6.1 Relocate instruction reply packet
+---------------------------------------
- `EPERM'
- The system does not allow unlinking of directories.
+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.
- `EBUSY'
- The file PATHNAME cannot be unlinked because it's being used
- by another process.
+ 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:
- `EFAULT'
- PATHNAMEPTR is an invalid pointer value.
+`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.
- `ENAMETOOLONG'
- PATHNAME was too long.
+ Replies:
+`qRelocInsn:ADJUSTED_SIZE'
+ Informs the stub the relocation is complete. ADJUSTED_SIZE is the
+ length in bytes of resulting relocated instruction sequence.
- `ENOENT'
- A directory component in PATHNAME does not exist.
+`E NN'
+ A badly formed request was detected, or an error was encountered
+ while relocating the instruction.
- `ENOTDIR'
- A component of the path is not a directory.
+
+File: gdb.info, Node: Host I/O Packets, Next: Interrupts, Prev: Tracepoint Packets, Up: Remote Protocol
- `EROFS'
- The file is on a read-only filesystem.
+E.7 Host I/O Packets
+====================
- `EINTR'
- The call was interrupted by the user.
+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:
-
-File: gdb.info, Node: stat/fstat, Next: gettimeofday, Prev: unlink, Up: List of Supported Calls
+`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::).
-stat/fstat
-..........
-Synopsis:
- int stat(const char *pathname, struct stat *buf);
- int fstat(int fd, struct stat *buf);
+ The valid responses to Host I/O packets are:
-Request:
- `Fstat,PATHNAMEPTR/LEN,BUFPTR'
- `Ffstat,FD,BUFPTR'
+`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.
-Return value:
- On success, zero is returned. On error, -1 is returned.
+`'
+ An empty response indicates that this operation is not recognized.
-Errors:
- `EBADF'
- FD is not a valid open file.
+ These are the supported Host I/O operations:
- `ENOENT'
- A directory component in PATHNAME does not exist or the path
- is an empty string.
+`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.
- `ENOTDIR'
- A component of the path is not a directory.
+`vFile:close: FD'
+ Close the open file corresponding to FD and return 0, or -1 if an
+ error occurs.
- `EFAULT'
- PATHNAMEPTR is an invalid pointer value.
+`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.
- `EACCES'
- No access to the file or the path of the file.
+ 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.
- `ENAMETOOLONG'
- PATHNAME was too long.
+`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.
- `EINTR'
- The call was interrupted by the user.
+`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.
-
-File: gdb.info, Node: gettimeofday, Next: isatty, Prev: stat/fstat, Up: List of Supported Calls
+ 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.
-gettimeofday
-............
-Synopsis:
- int gettimeofday(struct timeval *tv, void *tz);
+
+File: gdb.info, Node: Interrupts, Next: Notification Packets, Prev: Host I/O Packets, Up: Remote Protocol
-Request:
- `Fgettimeofday,TVPTR,TZPTR'
+E.8 Interrupts
+==============
-Return value:
- On success, 0 is returned, -1 otherwise.
+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'.
-Errors:
+ 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.
- `EINVAL'
- TZ is a non-NULL pointer.
+ `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.
- `EFAULT'
- TVPTR and/or TZPTR is an invalid pointer value.
+ `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.

-File: gdb.info, Node: isatty, Next: system, Prev: gettimeofday, Up: List of Supported Calls
+File: gdb.info, Node: Notification Packets, Next: Remote Non-Stop, Prev: Interrupts, Up: Remote Protocol
-isatty
-......
+E.9 Notification Packets
+========================
+
+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.
-Synopsis:
- int isatty(int fd);
+ 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.
-Request:
- `Fisatty,FD'
+ Every notification's DATA begins with a name, which contains no
+colon characters, followed by a colon character.
-Return value:
- Returns 1 if FD refers to the GDB console, 0 otherwise.
+ 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.
-Errors:
+ 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.
- `EINTR'
- The call was interrupted by the user.
+ (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.)
+ Each notification is comprised of three parts:
+`NAME:EVENT'
+ The notification packet is sent by the side that initiates the
+ exchange (currently, only the stub does that), with EVENT carrying
+ the specific information about the notification. NAME is the name
+ of the notification.
+
+`ACK'
+ The acknowledge sent by the other side, usually GDB, to
+ acknowledge the exchange and request the event.
+
+ The purpose of an asynchronous notification mechanism is to report to
+GDB that something interesting happened in the remote stub.
+
+ The remote stub may send notification NAME:EVENT at any time, but
+GDB acknowledges the notification when appropriate. The notification
+event is pending before GDB acknowledges. Only one notification at a
+time may be pending; if additional events occur before GDB has
+acknowledged the previous notification, they must be queued by the stub
+for later synchronous transmission in response to ACK packets from GDB.
+Because the notification mechanism is unreliable, the stub is permitted
+to resend a notification if it believes GDB may not have received it.
+
+ Specifically, notifications 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.
- 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.
+ After receiving a notification, GDB shall acknowledge it by sending
+a ACK 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 ACK packet, if the stub has other queued events to
+report to GDB, it shall respond by sending a normal EVENT. GDB shall
+then send another ACK 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 ACK packet and there are no additional EVENT
+to report, the stub shall return an `OK' response. At this point, GDB
+has finished processing a notification and the stub has completed
+sending any queued events. GDB won't accept any new notifications
+until the final `OK' is received . If further notification events
+occur, the stub shall send a new notification, GDB shall accept the
+notification, and the process shall be repeated.
+
+ The process of asynchronous notification can be illustrated by the
+following example:
+ <- `%%Stop:T0505:98e7ffbf;04:4ce6ffbf;08:b1b6e54c;thread:p7526.7526;core:0;'
+ `...'
+ -> `vStopped'
+ <- `T0505:68f37db7;04:40f37db7;08:63850408;thread:p7526.7528;core:0;'
+ -> `vStopped'
+ <- `T0505:68e3fdb6;04:40e3fdb6;08:63850408;thread:p7526.7529;core:0;'
+ -> `vStopped'
+ <- `OK'
+
+ The following notifications are defined:
+NotificationAck Event Description
+Stop vStopped REPLY. The REPLY has the Report an asynchronous
+ form of a stop reply, as stop event in non-stop
+ described in *note Stop mode.
+ Reply Packets::. Refer to
+ *note Remote Non-Stop::,
+ for information on how
+ these notifications are
+ acknowledged by GDB.

-File: gdb.info, Node: system, Prev: isatty, Up: List of Supported Calls
-
-system
-......
+File: gdb.info, Node: Remote Non-Stop, Next: Packet Acknowledgment, Prev: Notification Packets, Up: Remote Protocol
-Synopsis:
- int system(const char *command);
+E.10 Remote Protocol Support for Non-Stop Mode
+==============================================
-Request:
- `Fsystem,COMMANDPTR/LEN'
+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::).
-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.
+ 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.
-Errors:
+ 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.
- `EINTR'
- The call was interrupted by the user.
+ 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'.
+
+File: gdb.info, Node: Packet Acknowledgment, Next: Examples, Prev: Remote Non-Stop, Up: Remote Protocol
- 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.
+E.11 Packet Acknowledgment
+==========================
- 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.
+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.
-`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).
+ 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::.
-`show remote system-call-allowed'
- Show whether the `system' calls are allowed in the File I/O
- protocol.
+ 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.
-
-File: gdb.info, Node: Protocol-specific Representation of Datatypes, Next: Constants, Prev: List of Supported Calls, Up: File-I/O Remote Protocol Extension
+ 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.
-E.13.8 Protocol-specific Representation of Datatypes
-----------------------------------------------------
+ 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.
-* Menu:
+
+File: gdb.info, Node: Examples, Next: File-I/O Remote Protocol Extension, Prev: Packet Acknowledgment, Up: Remote Protocol
-* Integral Datatypes::
-* Pointer Values::
-* Memory Transfer::
-* struct stat::
-* struct timeval::
+E.12 Examples
+=============
-
-File: gdb.info, Node: Integral Datatypes, Next: Pointer Values, Up: Protocol-specific Representation of Datatypes
+Example sequence of a target being re-started. Notice how the restart
+does not get any direct output:
-Integral Datatypes
-..................
+ -> `R00'
+ <- `+'
+ _target restarts_
+ -> `?'
+ <- `+'
+ <- `T001:1234123412341234'
+ -> `+'
-The integral datatypes used in the system calls are `int', `unsigned
-int', `long', `unsigned long', `mode_t', and `time_t'.
+ Example sequence of a target being stepped by a single instruction:
- `int', `unsigned int', `mode_t' and `time_t' are implemented as 32
-bit values in this protocol.
+ -> `G1445...'
+ <- `+'
+ -> `s'
+ <- `+'
+ _time passes_
+ <- `T001:1234123412341234'
+ -> `+'
+ -> `g'
+ <- `+'
+ <- `1455...'
+ -> `+'
- `long' and `unsigned long' are implemented as 64 bit types.
+
+File: gdb.info, Node: File-I/O Remote Protocol Extension, Next: Library List Format, Prev: Examples, Up: Remote Protocol
- *Note Limits::, for corresponding MIN and MAX values (similar to
-those in `limits.h') to allow range checking on host and target.
+E.13 File-I/O Remote Protocol Extension
+=======================================
- `time_t' datatypes are defined as seconds since the Epoch.
+* Menu:
- 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.
+* 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::

-File: gdb.info, Node: Pointer Values, Next: Memory Transfer, Prev: Integral Datatypes, Up: Protocol-specific Representation of Datatypes
-
-Pointer Values
-..............
+File: gdb.info, Node: File-I/O Overview, Next: Protocol Basics, Up: File-I/O Remote Protocol Extension
-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.
+E.13.1 File-I/O Overview
+------------------------
- `1aaf/12'
+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.
-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
+ 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.
- `123456/d'
+ 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.
-
-File: gdb.info, Node: Memory Transfer, Next: struct stat, Prev: Pointer Values, Up: Protocol-specific Representation of Datatypes
+ 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.
-Memory Transfer
-...............
+ (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
-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.
+ 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.

-File: gdb.info, Node: struct stat, Next: struct timeval, Prev: Memory Transfer, Up: Protocol-specific Representation of Datatypes
+File: gdb.info, Node: Protocol Basics, Next: The F Request Packet, Prev: File-I/O Overview, Up: File-I/O Remote Protocol Extension
-struct stat
-...........
+E.13.2 Protocol Basics
+----------------------
-The buffer of type `struct stat' used by the target and GDB is defined
-as follows:
+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:
- 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 */
- };
+ * A unique identifier for the requested system call.
- 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.
+ * 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.
- The values of several fields have a restricted meaning and/or range
-of values.
-`st_dev'
- A value of 0 represents a file, 1 the console.
+ At this point, GDB has to perform the following actions.
-`st_ino'
- No valid meaning for the target. Transmitted unchanged.
+ * 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.
-`st_mode'
- Valid mode bits are described in *Note Constants::. Any other
- bits have currently no meaning for the target.
+ * GDB translates all value from protocol representation to host
+ representation as needed. Datatypes are coerced into the host
+ types.
-`st_uid'
-`st_gid'
-`st_rdev'
- No valid meaning for the target. Transmitted unchanged.
+ * GDB calls the system call.
-`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.
+ * It then coerces datatypes back to protocol representation.
- The target gets a `struct stat' of the above representation and is
-responsible for coercing it to the target representation before
-continuing.
+ * 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.
- 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.
-
-File: gdb.info, Node: struct timeval, Prev: struct stat, Up: Protocol-specific Representation of Datatypes
+ Eventually GDB replies with another `F' packet which contains all
+necessary information for the target to continue. This at least
+contains
-struct timeval
-..............
+ * Return value.
-The buffer of type `struct timeval' used by the File-I/O protocol is
-defined as follows:
+ * `errno', if has been changed by the system call.
- struct timeval {
- time_t tv_sec; /* second */
- long tv_usec; /* microsecond */
- };
+ * "Ctrl-C" flag.
- 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.
+
+ After having done the needed type and value coercion, the target
+continues the latest continue or step action.

-File: gdb.info, Node: Constants, Next: File-I/O Examples, Prev: Protocol-specific Representation of Datatypes, Up: File-I/O Remote Protocol Extension
+File: gdb.info, Node: The F Request Packet, Next: The F Reply Packet, Prev: Protocol Basics, Up: File-I/O Remote Protocol Extension
-E.13.9 Constants
-----------------
+E.13.3 The `F' Request Packet
+-----------------------------
-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.
+The `F' request packet has the following format:
-* Menu:
+`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.
+
+ 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.
-* Open Flags::
-* mode_t Values::
-* Errno Values::
-* Lseek Flags::
-* Limits::

-File: gdb.info, Node: Open Flags, Next: mode_t Values, Up: Constants
+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
-Open Flags
-..........
+E.13.4 The `F' Reply Packet
+---------------------------
-All values are given in hexadecimal representation.
+The `F' reply packet has the following format:
- O_RDONLY 0x0
- O_WRONLY 0x1
- O_RDWR 0x2
- O_APPEND 0x8
- O_CREAT 0x200
- O_TRUNC 0x400
- O_EXCL 0x800
+`FRETCODE,ERRNO,CTRL-C FLAG;CALL-SPECIFIC ATTACHMENT'
+ RETCODE is the return code of the system call as hexadecimal value.
-
-File: gdb.info, Node: mode_t Values, Next: Errno Values, Prev: Open Flags, Up: Constants
+ ERRNO is the `errno' set by the call, in protocol-specific
+ representation. This parameter can be omitted if the call was
+ successful.
-mode_t Values
-.............
+ 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':
-All values are given in octal representation.
+ F0,0,C
- 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
+ or, if the call was interrupted before the host call has been
+ performed:
-
-File: gdb.info, Node: Errno Values, Next: Lseek Flags, Prev: mode_t Values, Up: Constants
+ F-1,4,C
-Errno Values
-............
+ assuming 4 is the protocol-specific representation of `EINTR'.
-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
+
+File: gdb.info, Node: The Ctrl-C Message, Next: Console I/O, Prev: The F Reply Packet, Up: File-I/O Remote Protocol Extension
- `EUNKNOWN' is used as a fallback error value if a host system returns
- any error value not in the list of supported error numbers.
+E.13.5 The `Ctrl-C' Message
+---------------------------
-
-File: gdb.info, Node: Lseek Flags, Next: Limits, Prev: Errno Values, Up: Constants
+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.
-Lseek Flags
-...........
+ It's important for the target to know in which state the system call
+was interrupted. There are two possible cases:
- SEEK_SET 0
- SEEK_CUR 1
- SEEK_END 2
+ * The system call hasn't been performed on the host yet.
-
-File: gdb.info, Node: Limits, Prev: Lseek Flags, Up: Constants
+ * The system call on the host has been finished.
-Limits
-......
-All values are given in decimal representation.
+ 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.
- INT_MIN -2147483648
- INT_MAX 2147483647
- UINT_MAX 4294967295
- LONG_MIN -9223372036854775808
- LONG_MAX 9223372036854775807
- ULONG_MAX 18446744073709551615
+ 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.

-File: gdb.info, Node: File-I/O Examples, Prev: Constants, Up: File-I/O Remote Protocol Extension
+File: gdb.info, Node: Console I/O, Next: List of Supported Calls, Prev: The Ctrl-C Message, Up: File-I/O Remote Protocol Extension
-E.13.10 File-I/O Examples
--------------------------
+E.13.6 Console I/O
+------------------
-Example sequence of a write call, file descriptor 3, buffer is at target
-address 0x1234, 6 bytes should be written:
+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:
- <- `Fwrite,3,1234,6'
- _request memory read from target_
- -> `m1234,6'
- <- XXXXXX
- _return "6 bytes written"_
- -> `F6'
+ * The user types `Ctrl-c'. The behaviour is as explained above, and
+ the `read' system call is treated as finished.
- Example sequence of a read call, file descriptor 3, buffer is at
-target address 0x1234, 6 bytes should be read:
+ * The user presses <RET>. This is treated as end of input with a
+ trailing newline.
- <- `Fread,3,1234,6'
- _request memory write to target_
- -> `X1234,6:XXXXXX'
- _return "6 bytes read"_
- -> `F6'
+ * 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.
- Example sequence of a read call, call fails on the host due to
-invalid file descriptor (`EBADF'):
- <- `Fread,3,1234,6'
- -> `F-1,9'
+ 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.
- Example sequence of a read call, user presses `Ctrl-c' before
-syscall on host is called:
+
+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
- <- `Fread,3,1234,6'
- -> `F-1,4,C'
- <- `T02'
+E.13.7 List of Supported Calls
+------------------------------
- Example sequence of a read call, user presses `Ctrl-c' after syscall
-on host is called:
+* Menu:
- <- `Fread,3,1234,6'
- -> `X1234,6:XXXXXX'
- <- `T02'
+* open::
+* close::
+* read::
+* write::
+* lseek::
+* rename::
+* unlink::
+* stat/fstat::
+* gettimeofday::
+* isatty::
+* system::

-File: gdb.info, Node: Library List Format, Next: Library List Format for SVR4 Targets, Prev: File-I/O Remote Protocol Extension, Up: Remote Protocol
+File: gdb.info, Node: open, Next: close, Up: List of Supported Calls
-E.14 Library List Format
-========================
+open
+....
-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.
+Synopsis:
+ int open(const char *pathname, int flags);
+ int open(const char *pathname, int flags, mode_t mode);
- 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.
+Request:
+ `Fopen,PATHPTR/LEN,FLAGS,MODE'
- 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.
+ FLAGS is the bitwise `OR' of the following values:
- GDB must be linked with the Expat library to support XML library
-lists. *Note Expat::.
+ `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.
- A simple memory map, with one loaded library relocated by a single
-offset, looks like this:
+ `O_EXCL'
+ When used with `O_CREAT', if the file already exists it is an
+ error and open() fails.
- <library-list>
- <library name="/lib/libc.so.6">
- <segment address="0x10000000"/>
- </library>
- </library-list>
+ `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.
- Another simple memory map, with one loaded library with three
-allocated sections (.text, .data, .bss), looks like this:
+ `O_APPEND'
+ The file is opened in append mode.
- <library-list>
- <library name="sharedlib.o">
- <section address="0x10000000"/>
- <section address="0x20000000"/>
- <section address="0x30000000"/>
- </library>
- </library-list>
+ `O_RDONLY'
+ The file is opened for reading only.
- The format of a library list is described by this DTD:
+ `O_WRONLY'
+ The file is opened for writing only.
- <!-- 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>
+ `O_RDWR'
+ The file is opened for reading and writing.
- 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.
+ Other bits are silently ignored.
-
-File: gdb.info, Node: Library List Format for SVR4 Targets, Next: Memory Map Format, Prev: Library List Format, Up: Remote Protocol
+ MODE is the bitwise `OR' of the following values:
-E.15 Library List Format for SVR4 Targets
-=========================================
+ `S_IRUSR'
+ User has read permission.
-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.
+ `S_IWUSR'
+ User has write permission.
- 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:
+ `S_IRGRP'
+ Group has read permission.
- - `name', the absolute file name from the `l_name' field of `struct
- link_map'.
+ `S_IWGRP'
+ Group has write permission.
- - `lm' with address of `struct link_map' used for TLS (Thread Local
- Storage) access.
+ `S_IROTH'
+ Others have read permission.
- - `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.
+ `S_IWOTH'
+ Others have write permission.
- - `l_ld', which is memory address of the `PT_DYNAMIC' segment
+ Other bits are silently ignored.
- 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.
+Return value:
+ `open' returns the new file descriptor or -1 if an error occurred.
- GDB must be linked with the Expat library to support XML SVR4
-library lists. *Note Expat::.
+Errors:
- A simple memory map, with two loaded libraries (which do not use
-prelink), looks like this:
+ `EEXIST'
+ PATHNAME already exists and `O_CREAT' and `O_EXCL' were used.
- <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>
+ `EISDIR'
+ PATHNAME refers to a directory.
- The format of an SVR4 library list is described by this DTD:
+ `EACCES'
+ The requested access is not allowed.
- <!-- 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>
+ `ENAMETOOLONG'
+ PATHNAME was too long.
-
-File: gdb.info, Node: Memory Map Format, Next: Thread List Format, Prev: Library List Format for SVR4 Targets, Up: Remote Protocol
+ `ENOENT'
+ A directory component in PATHNAME does not exist.
-E.16 Memory Map Format
-======================
+ `ENODEV'
+ PATHNAME refers to a device, pipe, named pipe or socket.
-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.
+ `EROFS'
+ PATHNAME refers to a file on a read-only filesystem and write
+ access was requested.
- 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.
+ `EFAULT'
+ PATHNAME is an invalid pointer value.
- GDB must be linked with the Expat library to support XML memory
-maps. *Note Expat::.
+ `ENOSPC'
+ No space on device to create the file.
- The top-level structure of the document is shown below:
+ `EMFILE'
+ The process already has the maximum number of files open.
- <?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>
+ `ENFILE'
+ The limit on the total number of files open on the system has
+ been reached.
- Each region can be either:
+ `EINTR'
+ The call was interrupted by the user.
- * A region of RAM starting at ADDR and extending for LENGTH bytes
- from there:
- <memory type="ram" start="ADDR" length="LENGTH"/>
+
+File: gdb.info, Node: close, Next: read, Prev: open, Up: List of Supported Calls
- * A region of read-only memory:
+close
+.....
- <memory type="rom" start="ADDR" length="LENGTH"/>
+Synopsis:
+ int close(int fd);
- * A region of flash memory, with erasure blocks BLOCKSIZE bytes in
- length:
+Request:
+ `Fclose,FD'
- <memory type="flash" start="ADDR" length="LENGTH">
- <property name="blocksize">BLOCKSIZE</property>
- </memory>
+Return value:
+ `close' returns zero on success, or -1 if an error occurred.
+Errors:
- 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.
+ `EBADF'
+ FD isn't a valid open file descriptor.
- The formal DTD for memory map format is given below:
+ `EINTR'
+ The call was interrupted by the user.
- <!-- ................................................... -->
- <!-- 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>

-File: gdb.info, Node: Thread List Format, Next: Traceframe Info Format, Prev: Memory Map Format, Up: Remote Protocol
-
-E.17 Thread List Format
-=======================
-
-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:
-
- <?xml version="1.0"?>
- <threads>
- <thread id="id" core="0">
- ... description ...
- </thread>
- </threads>
+File: gdb.info, Node: read, Next: write, Prev: close, Up: List of Supported Calls
- 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.
+read
+....
-
-File: gdb.info, Node: Traceframe Info Format, Prev: Thread List Format, Up: Remote Protocol
+Synopsis:
+ int read(int fd, void *buf, unsigned int count);
-E.18 Traceframe Info Format
-===========================
+Request:
+ `Fread,FD,BUFPTR,COUNT'
-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.
+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.
- This list is obtained using the `qXfer:traceframe-info:read' (*note
-qXfer traceframe info read::) packet and is an XML document.
+Errors:
- GDB must be linked with the Expat library to support XML traceframe
-info discovery. *Note Expat::.
+ `EBADF'
+ FD is not a valid file descriptor or is not open for reading.
- The top-level structure of the document is shown below:
+ `EFAULT'
+ BUFPTR is an invalid pointer value.
- <?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>
+ `EINTR'
+ The call was interrupted by the user.
- Each traceframe block can be either:
- * A region of collected memory starting at ADDR and extending for
- LENGTH bytes from there:
+
+File: gdb.info, Node: write, Next: lseek, Prev: read, Up: List of Supported Calls
- <memory start="ADDR" length="LENGTH"/>
+write
+.....
+Synopsis:
+ int write(int fd, const void *buf, unsigned int count);
- The formal DTD for the traceframe info format is given below:
+Request:
+ `Fwrite,FD,BUFPTR,COUNT'
- <!ELEMENT traceframe-info (memory)* >
- <!ATTLIST traceframe-info version CDATA #FIXED "1.0">
+Return value:
+ On success, the number of bytes written are returned. Zero
+ indicates nothing was written. On error, -1 is returned.
- <!ELEMENT memory EMPTY>
- <!ATTLIST memory start CDATA #REQUIRED
- length CDATA #REQUIRED>
+Errors:
-
-File: gdb.info, Node: Agent Expressions, Next: Target Descriptions, Prev: Remote Protocol, Up: Top
+ `EBADF'
+ FD is not a valid file descriptor or is not open for writing.
-Appendix F The GDB Agent Expression Mechanism
-*********************************************
+ `EFAULT'
+ BUFPTR is an invalid pointer value.
-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.
+ `EFBIG'
+ An attempt was made to write a file that exceeds the
+ host-specific maximum file size allowed.
- 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.
+ `ENOSPC'
+ No space on device to write the data.
-* Menu:
+ `EINTR'
+ The call was interrupted by the user.
-* 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.

-File: gdb.info, Node: General Bytecode Design, Next: Bytecode Descriptions, Up: Agent Expressions
+File: gdb.info, Node: lseek, Next: rename, Prev: write, Up: List of Supported Calls
-F.1 General Bytecode Design
-===========================
+lseek
+.....
-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.
+Synopsis:
+ long lseek (int fd, long offset, int flag);
+Request:
+ `Flseek,FD,OFFSET,FLAG'
-
-File: gdb.info, Node: Bytecode Descriptions, Next: Using Agent Expressions, Prev: General Bytecode Design, Up: Agent Expressions
+ FLAG is one of:
-F.2 Bytecode Descriptions
-=========================
+ `SEEK_SET'
+ The offset is set to OFFSET bytes.
-Each bytecode description has the following form:
+ `SEEK_CUR'
+ The offset is set to its current location plus OFFSET bytes.
-`add' (0x02): A B => A+B
- Pop the top two stack items, A and B, as integers; push their sum,
- as an integer.
+ `SEEK_END'
+ The offset is set to the size of the file plus OFFSET bytes.
+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.
- 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.
+Errors:
+ `EBADF'
+ FD is not a valid open file descriptor.
-
-File: gdb.info, Node: Using Agent Expressions, Next: Varying Target Capabilities, Prev: Bytecode Descriptions, Up: Agent Expressions
+ `ESPIPE'
+ FD is associated with the GDB console.
-F.3 Using Agent Expressions
-===========================
+ `EINVAL'
+ FLAG is not a proper value.
-Agent expressions can be used in several different ways by GDB, and the
-debugger can generate different bytecode sequences as appropriate.
+ `EINTR'
+ The call was interrupted by the user.
- 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.
- 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.
+
+File: gdb.info, Node: rename, Next: unlink, Prev: lseek, Up: List of Supported Calls
- * The user selects trace points in the program's code at which GDB
- should collect data.
+rename
+......
- * 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.
+Synopsis:
+ int rename(const char *oldpath, const char *newpath);
- * GDB transmits the tracepoints and their associated expressions to
- the GDB agent, running on the debugging target.
+Request:
+ `Frename,OLDPATHPTR/LEN,NEWPATHPTR/LEN'
- * The agent arranges to be notified when a trace point is hit.
+Return value:
+ On success, zero is returned. On error, -1 is returned.
- * 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.
+Errors:
- * 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.
+ `EISDIR'
+ NEWPATH is an existing directory, but OLDPATH is not a
+ directory.
+ `EEXIST'
+ NEWPATH is a non-empty directory.
-
-File: gdb.info, Node: Varying Target Capabilities, Next: Rationale, Prev: Using Agent Expressions, Up: Agent Expressions
+ `EBUSY'
+ OLDPATH or NEWPATH is a directory that is in use by some
+ process.
-F.4 Varying Target Capabilities
-===============================
+ `EINVAL'
+ An attempt was made to make a directory a subdirectory of
+ itself.
-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.
+ `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.
- 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:
+ `EFAULT'
+ OLDPATHPTR or NEWPATHPTR are invalid pointer values.
- * whether floating point is supported
+ `EACCES'
+ No access to the file or the path of the file.
- * whether `long long' is supported
+ `ENAMETOOLONG'
+ OLDPATH or NEWPATH was too long.
- * maximum acceptable size of bytecode stack
+ `ENOENT'
+ A directory component in OLDPATH or NEWPATH does not exist.
- * maximum acceptable length of bytecode expressions
+ `EROFS'
+ The file is on a read-only filesystem.
- * which registers are actually available for collection
+ `ENOSPC'
+ The device containing the file has no room for the new
+ directory entry.
- * whether the target supports disabled tracepoints
+ `EINTR'
+ The call was interrupted by the user.

-File: gdb.info, Node: Rationale, Prev: Varying Target Capabilities, Up: Agent Expressions
+File: gdb.info, Node: unlink, Next: stat/fstat, Prev: rename, Up: List of Supported Calls
-F.5 Rationale
-=============
+unlink
+......
-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.
+Synopsis:
+ int unlink(const char *pathname);
+Request:
+ `Funlink,PATHNAMEPTR/LEN'
-
-File: gdb.info, Node: Target Descriptions, Next: Operating System Information, Prev: Agent Expressions, Up: Top
+Return value:
+ On success, zero is returned. On error, -1 is returned.
-Appendix G Target Descriptions
-******************************
+Errors:
-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:
+ `EACCES'
+ No access to the file or the path of the file.
- * With so many different customized processors, it is difficult for
- the GDB maintainers to keep up with the changes.
+ `EPERM'
+ The system does not allow unlinking of directories.
- * 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.
+ `EBUSY'
+ The file PATHNAME cannot be unlinked because it's being used
+ by another process.
- * 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.
+ `EFAULT'
+ PATHNAMEPTR is an invalid pointer value.
- 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.
+ `ENAMETOOLONG'
+ PATHNAME was too long.
- GDB must be linked with the Expat library to support XML target
-descriptions. *Note Expat::.
+ `ENOENT'
+ A directory component in PATHNAME does not exist.
-* Menu:
+ `ENOTDIR'
+ A component of the path is not a directory.
+
+ `EROFS'
+ The file is on a read-only filesystem.
+
+ `EINTR'
+ The call was interrupted by the user.
-* 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.

-File: gdb.info, Node: Retrieving Descriptions, Next: Target Description Format, Up: Target Descriptions
+File: gdb.info, Node: stat/fstat, Next: gettimeofday, Prev: unlink, Up: List of Supported Calls
-G.1 Retrieving Descriptions
-===========================
+stat/fstat
+..........
-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::.
+Synopsis:
+ int stat(const char *pathname, struct stat *buf);
+ int fstat(int fd, struct stat *buf);
- 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:
+Request:
+ `Fstat,PATHNAMEPTR/LEN,BUFPTR'
+ `Ffstat,FD,BUFPTR'
-`set tdesc filename PATH'
- Read the target description from PATH.
+Return value:
+ On success, zero is returned. On error, -1 is returned.
-`unset tdesc filename'
- Do not read the XML target description from a file. GDB will use
- the description supplied by the current target.
+Errors:
-`show tdesc filename'
- Show the filename to read for a target description, if any.
+ `EBADF'
+ FD is not a valid open file.
-
-File: gdb.info, Node: Target Description Format, Next: Predefined Target Types, Prev: Retrieving Descriptions, Up: Target Descriptions
+ `ENOENT'
+ A directory component in PATHNAME does not exist or the path
+ is an empty string.
-G.2 Target Description Format
-=============================
+ `ENOTDIR'
+ A component of the path is not a directory.
-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
-------------------
+ `EFAULT'
+ PATHNAMEPTR is an invalid pointer value.
-An `<architecture>' element has this form:
+ `EACCES'
+ No access to the file or the path of the file.
- <architecture>ARCH</architecture>
+ `ENAMETOOLONG'
+ PATHNAME was too long.
- ARCH is one of the architectures from the set accepted by `set
-architecture' (*note Specifying a Debugging Target: Targets.).
+ `EINTR'
+ The call was interrupted by the user.
-G.2.3 OS ABI
-------------
-This optional field was introduced in GDB version 7.0. Previous
-versions of GDB ignore it.
+
+File: gdb.info, Node: gettimeofday, Next: isatty, Prev: stat/fstat, Up: List of Supported Calls
- An `<osabi>' element has this form:
+gettimeofday
+............
- <osabi>ABI-NAME</osabi>
+Synopsis:
+ int gettimeofday(struct timeval *tv, void *tz);
- ABI-NAME is an OS ABI name from the same selection accepted by
-`set osabi' (*note Configuring the Current ABI: ABI.).
+Request:
+ `Fgettimeofday,TVPTR,TZPTR'
-G.2.4 Compatible Architecture
------------------------------
+Return value:
+ On success, 0 is returned, -1 otherwise.
-This optional field was introduced in GDB version 7.0. Previous
-versions of GDB ignore it.
+Errors:
- A `<compatible>' element has this form:
+ `EINVAL'
+ TZ is a non-NULL pointer.
- <compatible>ARCH</compatible>
+ `EFAULT'
+ TVPTR and/or TZPTR is an invalid pointer value.
- ARCH is one of the architectures from the set accepted by `set
-architecture' (*note Specifying a Debugging Target: Targets.).
- 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:
+
+File: gdb.info, Node: isatty, Next: system, Prev: gettimeofday, Up: List of Supported Calls
- <architecture>powerpc:common</architecture>
- <compatible>spu</compatible>
+isatty
+......
-G.2.5 Features
---------------
+Synopsis:
+ int isatty(int fd);
-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:
+Request:
+ `Fisatty,FD'
- <feature name="NAME">
- [TYPE...]
- REG...
- </feature>
+Return value:
+ Returns 1 if FD refers to the GDB console, 0 otherwise.
-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::.
+Errors:
-G.2.6 Types
------------
+ `EINTR'
+ The call was interrupted by the user.
-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:
-
-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.
-
-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'.
-
-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'.
+ 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.

-File: gdb.info, Node: Predefined Target Types, Next: Standard Target Features, Prev: Target Description Format, Up: Target Descriptions
-
-G.3 Predefined Target Types
-===========================
+File: gdb.info, Node: system, Prev: isatty, Up: List of Supported Calls
-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:
+system
+......
-`int8'
-`int16'
-`int32'
-`int64'
-`int128'
- Signed integer types holding the specified number of bits.
+Synopsis:
+ int system(const char *command);
-`uint8'
-`uint16'
-`uint32'
-`uint64'
-`uint128'
- Unsigned integer types holding the specified number of bits.
+Request:
+ `Fsystem,COMMANDPTR/LEN'
-`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.
+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.
-`ieee_single'
- Single precision IEEE floating point.
+Errors:
-`ieee_double'
- Double precision IEEE floating point.
+ `EINTR'
+ The call was interrupted by the user.
-`arm_fpa_ext'
- The 12-byte extended precision format used by ARM FPA registers.
-`i387_ext'
- The 10-byte extended precision format used by x87 registers.
+ 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.
-`i386_eflags'
- 32bit EFLAGS register used by x86.
+ 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.
-`i386_mxcsr'
- 32bit MXCSR register used by x86.
+`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).
+`show remote system-call-allowed'
+ Show whether the `system' calls are allowed in the File I/O
+ protocol.

-File: gdb.info, Node: Standard Target Features, Prev: Predefined Target Types, Up: Target Descriptions
-
-G.4 Standard Target Features
-============================
-
-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.
+File: gdb.info, Node: Protocol-specific Representation of Datatypes, Next: Constants, Prev: List of Supported Calls, Up: File-I/O Remote Protocol Extension
+
+E.13.8 Protocol-specific Representation of Datatypes
+----------------------------------------------------
* Menu:
-* ARM Features::
-* i386 Features::
-* MIPS Features::
-* M68K Features::
-* PowerPC Features::
-* TIC6x Features::
+* Integral Datatypes::
+* Pointer Values::
+* Memory Transfer::
+* struct stat::
+* struct timeval::

-File: gdb.info, Node: ARM Features, Next: i386 Features, Up: Standard Target Features
+File: gdb.info, Node: Integral Datatypes, Next: Pointer Values, Up: Protocol-specific Representation of Datatypes
-G.4.1 ARM Features
-------------------
+Integral Datatypes
+..................
-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 integral datatypes used in the system calls are `int', `unsigned
+int', `long', `unsigned long', `mode_t', and `time_t'.
- 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'.
+ `int', `unsigned int', `mode_t' and `time_t' are implemented as 32
+bit values in this protocol.
- The `org.gnu.gdb.arm.fpa' feature is optional. If present, it
-should contain registers `f0' through `f7' and `fps'.
+ `long' and `unsigned long' are implemented as 64 bit types.
- 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.
+ *Note Limits::, for corresponding MIN and MAX values (similar to
+those in `limits.h') to allow range checking on host and 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.
+ `time_t' datatypes are defined as seconds since the Epoch.
- 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.
+ 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.

-File: gdb.info, Node: i386 Features, Next: MIPS Features, Prev: ARM Features, Up: Standard Target Features
-
-G.4.2 i386 Features
--------------------
-
-The `org.gnu.gdb.i386.core' feature is required for i386/amd64 targets.
-It should describe the following registers:
+File: gdb.info, Node: Pointer Values, Next: Memory Transfer, Prev: Integral Datatypes, Up: Protocol-specific Representation of Datatypes
- - `eax' through `edi' plus `eip' for i386
+Pointer Values
+..............
- - `rax' through `r15' plus `rip' for amd64
+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.
- - `eflags', `cs', `ss', `ds', `es', `fs', `gs'
+ `1aaf/12'
- - `st0' through `st7'
+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
- - `fctrl', `fstat', `ftag', `fiseg', `fioff', `foseg', `fooff' and
- `fop'
+ `123456/d'
- The register sets may be different, depending on the target.
+
+File: gdb.info, Node: Memory Transfer, Next: struct stat, Prev: Pointer Values, Up: Protocol-specific Representation of Datatypes
- The `org.gnu.gdb.i386.sse' feature is optional. It should describe
-registers:
+Memory Transfer
+...............
- - `xmm0' through `xmm7' for i386
+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.
- - `xmm0' through `xmm15' for amd64
+
+File: gdb.info, Node: struct stat, Next: struct timeval, Prev: Memory Transfer, Up: Protocol-specific Representation of Datatypes
- - `mxcsr'
+struct stat
+...........
- 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:
+The buffer of type `struct stat' used by the target and GDB is defined
+as follows:
- - `ymm0h' through `ymm7h' for i386
+ 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 */
+ };
- - `ymm0h' through `ymm15h' for amd64
+ 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 `org.gnu.gdb.i386.linux' feature is optional. It should
-describe a single register, `orig_eax'.
+ The values of several fields have a restricted meaning and/or range
+of values.
-
-File: gdb.info, Node: MIPS Features, Next: M68K Features, Prev: i386 Features, Up: Standard Target Features
+`st_dev'
+ A value of 0 represents a file, 1 the console.
-G.4.3 MIPS Features
--------------------
+`st_ino'
+ No valid meaning for the target. Transmitted unchanged.
-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.
+`st_mode'
+ Valid mode bits are described in *note Constants::. Any other
+ bits have currently no meaning for the target.
- 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.
+`st_uid'
+`st_gid'
+`st_rdev'
+ No valid meaning for the target. Transmitted unchanged.
- 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.
+`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.
- 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.
+ The target gets a `struct stat' of the above representation and is
+responsible for coercing it to the target representation before
+continuing.
- 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.
+ 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.

-File: gdb.info, Node: M68K Features, Next: PowerPC Features, Prev: MIPS Features, Up: Standard Target Features
-
-G.4.4 M68K Features
--------------------
+File: gdb.info, Node: struct timeval, Prev: struct stat, Up: Protocol-specific Representation of Datatypes
-``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'.
+struct timeval
+..............
-``org.gnu.gdb.coldfire.fp''
- This feature is optional. If present, it should contain registers
- `fp0' through `fp7', `fpcontrol', `fpstatus' and `fpiaddr'.
+The buffer of type `struct timeval' used by the File-I/O protocol is
+defined as follows:
-
-File: gdb.info, Node: PowerPC Features, Next: TIC6x Features, Prev: M68K Features, Up: Standard Target Features
+ struct timeval {
+ time_t tv_sec; /* second */
+ long tv_usec; /* microsecond */
+ };
-G.4.5 PowerPC Features
-----------------------
+ 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.
-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
-target.
+
+File: gdb.info, Node: Constants, Next: File-I/O Examples, Prev: Protocol-specific Representation of Datatypes, Up: File-I/O Remote Protocol Extension
- The `org.gnu.gdb.power.fpu' feature is optional. It should contain
-registers `f0' through `f31' and `fpscr'.
+E.13.9 Constants
+----------------
- The `org.gnu.gdb.power.altivec' feature is optional. It should
-contain registers `vr0' through `vr31', `vscr', and `vrsave'.
+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.
- 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.
+* Menu:
- 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.
+* Open Flags::
+* mode_t Values::
+* Errno Values::
+* Lseek Flags::
+* Limits::

-File: gdb.info, Node: TIC6x Features, Prev: PowerPC Features, Up: Standard Target Features
-
-G.4.6 TMS320C6x Features
-------------------------
+File: gdb.info, Node: Open Flags, Next: mode_t Values, Up: Constants
-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'.
+Open Flags
+..........
- The `org.gnu.gdb.tic6x.gp' feature is optional. It should contain
-registers `A16' through `A31' and `B16' through `B31'.
+All values are given in hexadecimal representation.
- The `org.gnu.gdb.tic6x.c6xp' feature is optional. It should contain
-registers `TSR', `ILC' and `RILC'.
+ O_RDONLY 0x0
+ O_WRONLY 0x1
+ O_RDWR 0x2
+ O_APPEND 0x8
+ O_CREAT 0x200
+ O_TRUNC 0x400
+ O_EXCL 0x800

-File: gdb.info, Node: Operating System Information, Next: Trace File Format, Prev: Target Descriptions, Up: Top
-
-Appendix H Operating System Information
-***************************************
-
-* Menu:
+File: gdb.info, Node: mode_t Values, Next: Errno Values, Prev: Open Flags, Up: Constants
-* Process list::
+mode_t Values
+.............
- 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.
+All values are given in octal representation.
- 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.
+ 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

-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: Errno Values, Next: Lseek Flags, Prev: mode_t Values, Up: Constants
-
-File: gdb.info, Node: Trace File Format, Next: Index Section Format, Prev: Operating System Information, Up: Top
+Errno Values
+............
-Appendix I Trace File Format
-****************************
+All values are given in decimal representation.
-The trace file comes in three parts: a header, a textual description
-section, and a trace frame section with binary data.
+ 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
- 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.
+ `EUNKNOWN' is used as a fallback error value if a host system returns
+ any error value not in the list of supported error numbers.
- 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.
+
+File: gdb.info, Node: Lseek Flags, Next: Limits, Prev: Errno Values, Up: Constants
- 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.
+Lseek Flags
+...........
-`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.
+ SEEK_SET 0
+ SEEK_CUR 1
+ SEEK_END 2
-`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.
+
+File: gdb.info, Node: Limits, Prev: Lseek Flags, Up: Constants
-`V NUMBER VALUE'
- Trace state variable block. This records the 8-byte signed value
- VALUE of trace state variable numbered NUMBER.
+Limits
+......
+All values are given in decimal representation.
- Future enhancements of the trace file format may include additional
-types of blocks.
+ INT_MIN -2147483648
+ INT_MAX 2147483647
+ UINT_MAX 4294967295
+ LONG_MIN -9223372036854775808
+ LONG_MAX 9223372036854775807
+ ULONG_MAX 18446744073709551615

-File: gdb.info, Node: Index Section Format, Next: Copying, Prev: Trace File Format, Up: Top
-
-Appendix J `.gdb_index' section format
-**************************************
-
-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.
+File: gdb.info, Node: File-I/O Examples, Prev: Constants, Up: File-I/O Remote Protocol Extension
- 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.
+E.13.10 File-I/O Examples
+-------------------------
- A mapped index consists of several areas, laid out in order.
+Example sequence of a write call, file descriptor 3, buffer is at target
+address 0x1234, 6 bytes should be written:
- 1. The file header. This is a sequence of values, of `offset_type'
- unless otherwise noted:
+ <- `Fwrite,3,1234,6'
+ _request memory read from target_
+ -> `m1234,6'
+ <- XXXXXX
+ _return "6 bytes written"_
+ -> `F6'
- 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'.
+ Example sequence of a read call, file descriptor 3, buffer is at
+target address 0x1234, 6 bytes should be read:
- 2. The offset, from the start of the file, of the CU list.
+ <- `Fread,3,1234,6'
+ _request memory write to target_
+ -> `X1234,6:XXXXXX'
+ _return "6 bytes read"_
+ -> `F6'
- 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.
+ Example sequence of a read call, call fails on the host due to
+invalid file descriptor (`EBADF'):
- 4. The offset, from the start of the file, of the address area.
+ <- `Fread,3,1234,6'
+ -> `F-1,9'
- 5. The offset, from the start of the file, of the symbol table.
+ Example sequence of a read call, user presses `Ctrl-c' before
+syscall on host is called:
- 6. The offset, from the start of the file, of the constant pool.
+ <- `Fread,3,1234,6'
+ -> `F-1,4,C'
+ <- `T02'
- 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.
+ Example sequence of a read call, user presses `Ctrl-c' after syscall
+on host is called:
- 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.
+ <- `Fread,3,1234,6'
+ -> `X1234,6:XXXXXX'
+ <- `T02'
- 4. The address area. The address area consists of a sequence of
- address entries. Each address entry has three elements:
+
+File: gdb.info, Node: Library List Format, Next: Library List Format for SVR4 Targets, Prev: File-I/O Remote Protocol Extension, Up: Remote Protocol
- 1. The low address. This is a 64-bit little-endian value.
+E.14 Library List Format
+========================
- 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.
+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.
- 3. The CU index. This is an `offset_type' value.
+ 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.
- 5. The symbol table. This is an open-addressed hash table. The size
- of the hash table is always a power of 2.
+ 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.
- 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.
+ GDB must be linked with the Expat library to support XML library
+lists. *Note Expat::.
- 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.
+ A simple memory map, with one loaded library relocated by a single
+offset, looks like this:
- 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);
- }
+ <library-list>
+ <library name="/lib/libc.so.6">
+ <segment address="0x10000000"/>
+ </library>
+ </library-list>
-
-File: gdb.info, Node: Copying, Next: GNU Free Documentation License, Prev: Index Section Format, Up: Top
+ Another simple memory map, with one loaded library with three
+allocated sections (.text, .data, .bss), looks like this:
-Appendix K GNU GENERAL PUBLIC LICENSE
-*************************************
+ <library-list>
+ <library name="sharedlib.o">
+ <section address="0x10000000"/>
+ <section address="0x20000000"/>
+ <section address="0x30000000"/>
+ </library>
+ </library-list>
- 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
-====================
+ The format of a library list is described by this DTD:
- 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
-===========================
+ <!-- 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>
-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'.
+ 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.
« no previous file with comments | « gdb/doc/gdb.info-4 ('k') | gdb/doc/gdb.info-6 » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698