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. |