4270 lines
		
	
	
	
		
			167 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			4270 lines
		
	
	
	
		
			167 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <HTML>
 | |
| <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 | |
| <!-- Created on March, 27  2008 by texi2html 1.64 -->
 | |
| <!-- 
 | |
| Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
 | |
|             Karl Berry  <karl@freefriends.org>
 | |
|             Olaf Bachmann <obachman@mathematik.uni-kl.de>
 | |
|             and many others.
 | |
| Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de>
 | |
| Send bugs and suggestions to <texi2html@mathematik.uni-kl.de>
 | |
|  
 | |
| -->
 | |
| <HEAD>
 | |
| <TITLE>Debugging with GDB: Remote Protocol</TITLE>
 | |
| 
 | |
| <META NAME="description" CONTENT="Debugging with GDB: Remote Protocol">
 | |
| <META NAME="keywords" CONTENT="Debugging with GDB: Remote Protocol">
 | |
| <META NAME="resource-type" CONTENT="document">
 | |
| <META NAME="distribution" CONTENT="global">
 | |
| <META NAME="Generator" CONTENT="texi2html 1.64">
 | |
| 
 | |
| </HEAD>
 | |
| 
 | |
| <BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000">
 | |
| 
 | |
| <A NAME="SEC694"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_32.html#SEC693"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC695"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H1> D. GDB Remote Serial Protocol </H1>
 | |
| <!--docid::SEC694::-->
 | |
| <P>
 | |
| 
 | |
| <BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC695">D.1 Overview</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC696">D.2 Packets</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC697">D.3 Stop Reply Packets</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC698">D.4 General Query Packets</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC699">D.5 Register Packet Format</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC700">D.6 Tracepoint Packets</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC701">D.7 Host I/O Packets</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC702">D.8 Interrupts</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC703">D.9 Examples</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC704">D.10 File-I/O Remote Protocol Extension</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC736">D.11 Library List Format</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC737">D.12 Memory Map Format</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| </TABLE></BLOCKQUOTE>
 | |
| <P>
 | |
| 
 | |
| <A NAME="Overview"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC695"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC696"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H2> D.1 Overview </H2>
 | |
| <!--docid::SEC695::-->
 | |
| <P>
 | |
| 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| In the examples below, <SAMP>`->'</SAMP> and <SAMP>`<-'</SAMP> are used to indicate
 | |
| transmitted and received data, respectively.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="IDX1561"></A>
 | |
| <A NAME="IDX1562"></A>
 | |
| <A NAME="IDX1563"></A>
 | |
| All GDB commands and responses (other than acknowledgments) are
 | |
| sent as a <VAR>packet</VAR>.  A <VAR>packet</VAR> is introduced with the character
 | |
| <SAMP>`$'</SAMP>, the actual <VAR>packet-data</VAR>, and the terminating character
 | |
| <SAMP>`#'</SAMP> followed by a two-digit <VAR>checksum</VAR>:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><CODE>$</CODE><VAR>packet-data</VAR><CODE>#</CODE><VAR>checksum</VAR>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| <A NAME="IDX1564"></A>
 | |
| The two-digit <VAR>checksum</VAR> is computed as the modulo 256 sum of all
 | |
| characters between the leading <SAMP>`$'</SAMP> and the trailing <SAMP>`#'</SAMP> (an
 | |
| eight bit unsigned checksum).
 | |
| </P><P>
 | |
| 
 | |
| Implementors should note that prior to GDB 5.0 the protocol
 | |
| specification also included an optional two-digit <VAR>sequence-id</VAR>:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><CODE>$</CODE><VAR>sequence-id</VAR><CODE>:</CODE><VAR>packet-data</VAR><CODE>#</CODE><VAR>checksum</VAR>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| <A NAME="IDX1565"></A>
 | |
| That <VAR>sequence-id</VAR> was appended to the acknowledgment.  GDB
 | |
| has never output <VAR>sequence-id</VAR>s.  Stubs that handle packets added
 | |
| since GDB 5.0 must not accept <VAR>sequence-id</VAR>.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="IDX1566"></A>
 | |
| When either the host or the target machine receives a packet, the first
 | |
| response expected is an acknowledgment: either <SAMP>`+'</SAMP> (to indicate
 | |
| the package was received correctly) or <SAMP>`-'</SAMP> (to request
 | |
| retransmission):
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-> <CODE>$</CODE><VAR>packet-data</VAR><CODE>#</CODE><VAR>checksum</VAR>
 | |
| <- <CODE>+</CODE>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| The host (GDB) sends <VAR>command</VAR>s, and the target (the
 | |
| debugging stub incorporated in your program) sends a <VAR>response</VAR>.  In
 | |
| the case of step and continue <VAR>command</VAR>s, the response is only sent
 | |
| when the operation has completed (the target has again stopped).
 | |
| </P><P>
 | |
| 
 | |
| <VAR>packet-data</VAR> consists of a sequence of characters with the
 | |
| exception of <SAMP>`#'</SAMP> and <SAMP>`$'</SAMP> (see <SAMP>`X'</SAMP> packet for additional
 | |
| exceptions).
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="IDX1567"></A>
 | |
| Fields within the packet should be separated using <SAMP>`,'</SAMP> <SAMP>`;'</SAMP> or
 | |
| <SAMP>`:'</SAMP>.  Except where otherwise noted all numbers are represented in
 | |
| HEX with leading zeros suppressed.
 | |
| </P><P>
 | |
| 
 | |
| Implementors should note that prior to GDB 5.0, the character
 | |
| <SAMP>`:'</SAMP> could not appear as the third character in a packet (as it
 | |
| would potentially conflict with the <VAR>sequence-id</VAR>).
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="IDX1568"></A>
 | |
| <A NAME="Binary Data"></A>
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| The binary data representation uses <CODE>7d</CODE> (ASCII <SAMP>`}'</SAMP>)
 | |
| as an escape character.  Any escaped byte is transmitted as the escape
 | |
| character followed by the original character XORed with <CODE>0x20</CODE>.
 | |
| For example, the byte <CODE>0x7d</CODE> would be transmitted as the two
 | |
| bytes <CODE>0x7d 0x5d</CODE>.  The bytes <CODE>0x23</CODE> (ASCII <SAMP>`#'</SAMP>),
 | |
| <CODE>0x24</CODE> (ASCII <SAMP>`$'</SAMP>), and <CODE>0x7d</CODE> (ASCII
 | |
| <SAMP>`}'</SAMP>) must always be escaped.  Responses sent by the stub
 | |
| must also escape <CODE>0x2a</CODE> (ASCII <SAMP>`*'</SAMP>), so that it
 | |
| is not interpreted as the start of a run-length encoded sequence
 | |
| (described next).
 | |
| </P><P>
 | |
| 
 | |
| Response <VAR>data</VAR> 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 <SAMP>`*'</SAMP> and a
 | |
| repeat count.  The repeat count is itself sent encoded, to avoid
 | |
| binary characters in <VAR>data</VAR>: a value of <VAR>n</VAR> is sent as
 | |
| <CODE><VAR>n</VAR>+29</CODE>.  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,
 | |
| <SAMP>`0* '</SAMP> is a run-length encoding of "0000": the space character
 | |
| after <SAMP>`*'</SAMP> means repeat the leading <CODE>0</CODE> <CODE>32 - 29 =
 | |
| 3</CODE> more times.
 | |
| </P><P>
 | |
| 
 | |
| The printable characters <SAMP>`#'</SAMP> and <SAMP>`$'</SAMP> or with a numeric value
 | |
| greater than 126 must not be used.  Runs of six repeats (<SAMP>`#'</SAMP>) or
 | |
| seven repeats (<SAMP>`$'</SAMP>) can be expanded using a repeat count of only
 | |
| five (<SAMP>`"'</SAMP>).  For example, <SAMP>`00000000'</SAMP> can be encoded as
 | |
| <SAMP>`0*"00'</SAMP>.
 | |
| </P><P>
 | |
| 
 | |
| The error response returned for some packets includes a two character
 | |
| error number.  That number is not well defined.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="IDX1569"></A>
 | |
| For any <VAR>command</VAR> not supported by the stub, an empty response
 | |
| (<SAMP>`$#00'</SAMP>) 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.
 | |
| </P><P>
 | |
| 
 | |
| A stub is required to support the <SAMP>`g'</SAMP>, <SAMP>`G'</SAMP>, <SAMP>`m'</SAMP>, <SAMP>`M'</SAMP>,
 | |
| <SAMP>`c'</SAMP>, and <SAMP>`s'</SAMP> <VAR>command</VAR>s.  All other <VAR>command</VAR>s are
 | |
| optional.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="Packets"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC696"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC695"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC697"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC697"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H2> D.2 Packets </H2>
 | |
| <!--docid::SEC696::-->
 | |
| <P>
 | |
| 
 | |
| The following table provides a complete list of all currently defined
 | |
| <VAR>command</VAR>s and their corresponding response <VAR>data</VAR>.
 | |
| See section <A HREF="gdb_33.html#SEC704">D.10 File-I/O Remote Protocol Extension</A>, for details about the File
 | |
| I/O extension of the remote protocol.
 | |
| </P><P>
 | |
| 
 | |
| 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 <SAMP>`foo
 | |
| <VAR>bar</VAR> <VAR>baz</VAR>'</SAMP> describes a packet beginning with the three ASCII
 | |
| bytes <SAMP>`foo'</SAMP>, followed by a <VAR>bar</VAR>, followed directly by a
 | |
| <VAR>baz</VAR>.  GDB does not transmit a space character between the
 | |
| <SAMP>`foo'</SAMP> and the <VAR>bar</VAR>, or between the <VAR>bar</VAR> and the
 | |
| <VAR>baz</VAR>.
 | |
| </P><P>
 | |
| 
 | |
| Note that all packet forms beginning with an upper- or lower-case
 | |
| letter, other than those described here, are reserved for future use.
 | |
| </P><P>
 | |
| 
 | |
| Here are the packet descriptions.
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| 
 | |
| <DT><SAMP>`!'</SAMP>
 | |
| <DD><A NAME="IDX1570"></A>
 | |
| <A NAME="extended mode"></A>
 | |
| Enable extended mode.  In extended mode, the remote server is made
 | |
| persistent.  The <SAMP>`R'</SAMP> packet is used to restart the program being
 | |
| debugged.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>The remote target both supports and has enabled extended mode.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`?'</SAMP>
 | |
| <DD><A NAME="IDX1571"></A>
 | |
| Indicate the reason the target halted.  The reply is the same as for
 | |
| step and continue.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| See section <A HREF="gdb_33.html#SEC697">D.3 Stop Reply Packets</A>, for the reply specifications.
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`A <VAR>arglen</VAR>,<VAR>argnum</VAR>,<VAR>arg</VAR>,<small>...</small>'</SAMP>
 | |
| <DD><A NAME="IDX1572"></A>
 | |
| Initialized <CODE>argv[]</CODE> array passed into program. <VAR>arglen</VAR>
 | |
| specifies the number of bytes in the hex encoded byte stream
 | |
| <VAR>arg</VAR>.  See <CODE>gdbserver</CODE> for more details.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>The arguments were set.
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>An error occurred.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`b <VAR>baud</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1573"></A>
 | |
| (Don't use this packet; its behavior is not well-defined.)
 | |
| Change the serial line speed to <VAR>baud</VAR>.
 | |
| <P>
 | |
| 
 | |
| JTC: <EM>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.</EM>
 | |
| </P><P>
 | |
| 
 | |
| Stan: <EM>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.</EM>
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`B <VAR>addr</VAR>,<VAR>mode</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1574"></A>
 | |
| Set (<VAR>mode</VAR> is <SAMP>`S'</SAMP>) or clear (<VAR>mode</VAR> is <SAMP>`C'</SAMP>) a
 | |
| breakpoint at <VAR>addr</VAR>.
 | |
| <P>
 | |
| 
 | |
| Don't use this packet.  Use the <SAMP>`Z'</SAMP> and <SAMP>`z'</SAMP> packets instead
 | |
| (see  <A HREF="gdb_33.html#insert breakpoint or watchpoint packet">insert breakpoint or watchpoint packet</A>).
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`c [<VAR>addr</VAR>]'</SAMP>
 | |
| <DD><A NAME="IDX1575"></A>
 | |
| Continue.  <VAR>addr</VAR> is address to resume.  If <VAR>addr</VAR> is omitted,
 | |
| resume at current address.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| See section <A HREF="gdb_33.html#SEC697">D.3 Stop Reply Packets</A>, for the reply specifications.
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`C <VAR>sig</VAR>[;<VAR>addr</VAR>]'</SAMP>
 | |
| <DD><A NAME="IDX1576"></A>
 | |
| Continue with signal <VAR>sig</VAR> (hex signal number).  If
 | |
| <SAMP>`;<VAR>addr</VAR>'</SAMP> is omitted, resume at same address.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| See section <A HREF="gdb_33.html#SEC697">D.3 Stop Reply Packets</A>, for the reply specifications.
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`d'</SAMP>
 | |
| <DD><A NAME="IDX1577"></A>
 | |
| Toggle debug flag.
 | |
| <P>
 | |
| 
 | |
| Don't use this packet; instead, define a general set packet
 | |
| (see section <A HREF="gdb_33.html#SEC698">D.4 General Query Packets</A>).
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`D'</SAMP>
 | |
| <DD><A NAME="IDX1578"></A>
 | |
| Detach GDB from the remote system.  Sent to the remote target
 | |
| before GDB disconnects via the <CODE>detach</CODE> command.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>for success
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`F <VAR>RC</VAR>,<VAR>EE</VAR>,<VAR>CF</VAR>;<VAR>XX</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1579"></A>
 | |
| A reply from GDB to an <SAMP>`F'</SAMP> packet sent by the target.
 | |
| This is part of the File-I/O protocol extension.  See section <A HREF="gdb_33.html#SEC704">D.10 File-I/O Remote Protocol Extension</A>, for the specification.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`g'</SAMP>
 | |
| <DD><A NAME="read registers packet"></A>
 | |
| <A NAME="IDX1580"></A>
 | |
| Read general registers.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`<VAR>XX<small>...</small></VAR>'</SAMP>
 | |
| <DD>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 <SAMP>`g'</SAMP> packet are
 | |
| determined by the GDB internal gdbarch functions
 | |
| <CODE>DEPRECATED_REGISTER_RAW_SIZE</CODE> and <CODE>gdbarch_register_name</CODE>.  The
 | |
| specification of several standard <SAMP>`g'</SAMP> packets is specified below.
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`G <VAR>XX<small>...</small></VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1581"></A>
 | |
| Write general registers.  See  <A HREF="gdb_33.html#read registers packet">read registers packet</A>, for a
 | |
| description of the <VAR>XX<small>...</small></VAR> data.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>for success
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`H <VAR>c</VAR> <VAR>t</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1582"></A>
 | |
| Set thread for subsequent operations (<SAMP>`m'</SAMP>, <SAMP>`M'</SAMP>, <SAMP>`g'</SAMP>,
 | |
| <SAMP>`G'</SAMP>, et.al.).  <VAR>c</VAR> depends on the operation to be performed: it
 | |
| should be <SAMP>`c'</SAMP> for step and continue operations, <SAMP>`g'</SAMP> for other
 | |
| operations.  The thread designator <VAR>t</VAR> may be <SAMP>`-1'</SAMP>, meaning all
 | |
| the threads, a thread number, or <SAMP>`0'</SAMP> which means pick any thread.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>for success
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`i [<VAR>addr</VAR>[,<VAR>nnn</VAR>]]'</SAMP>
 | |
| <DD><A NAME="cycle step packet"></A>
 | |
| <A NAME="IDX1583"></A>
 | |
| Step the remote target by a single clock cycle.  If <SAMP>`,<VAR>nnn</VAR>'</SAMP> is
 | |
| present, cycle step <VAR>nnn</VAR> cycles.  If <VAR>addr</VAR> is present, cycle
 | |
| step starting at that address.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`I'</SAMP>
 | |
| <DD><A NAME="IDX1584"></A>
 | |
| Signal, then cycle step.  See  <A HREF="gdb_33.html#step with signal packet">step with signal packet</A>.  See  <A HREF="gdb_33.html#cycle step packet">cycle step packet</A>.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`k'</SAMP>
 | |
| <DD><A NAME="IDX1585"></A>
 | |
| Kill request.
 | |
| <P>
 | |
| 
 | |
| FIXME: <EM>There is no description of how to operate when a specific
 | |
| thread context has been selected (i.e. does 'k' kill only that
 | |
| thread?)</EM>.
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`m <VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1586"></A>
 | |
| Read <VAR>length</VAR> bytes of memory starting at address <VAR>addr</VAR>.
 | |
| Note that <VAR>addr</VAR> may not be aligned to any particular boundary.
 | |
| <P>
 | |
| 
 | |
| The stub need not use any particular size or alignment when gathering
 | |
| data from memory for the response; even if <VAR>addr</VAR> is word-aligned
 | |
| and <VAR>length</VAR> 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.
 | |
| <A NAME="IDX1587"></A>
 | |
| <A NAME="IDX1588"></A>
 | |
| <A NAME="IDX1589"></A>
 | |
| </P><P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`<VAR>XX<small>...</small></VAR>'</SAMP>
 | |
| <DD>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.
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD><VAR>NN</VAR> is errno
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`M <VAR>addr</VAR>,<VAR>length</VAR>:<VAR>XX<small>...</small></VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1590"></A>
 | |
| Write <VAR>length</VAR> bytes of memory starting at address <VAR>addr</VAR>.
 | |
| <VAR>XX<small>...</small></VAR> is the data; each byte is transmitted as a two-digit
 | |
| hexadecimal number.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>for success
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error (this includes the case where only part of the data was
 | |
| written).
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`p <VAR>n</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1591"></A>
 | |
| Read the value of register <VAR>n</VAR>; <VAR>n</VAR> is in hex.
 | |
| See  <A HREF="gdb_33.html#read registers packet">read registers packet</A>, for a description of how the returned
 | |
| register value is encoded.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`<VAR>XX<small>...</small></VAR>'</SAMP>
 | |
| <DD>the register's value
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>Indicating an unrecognized <VAR>query</VAR>.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`P <VAR>n<small>...</small></VAR>=<VAR>r<small>...</small></VAR>'</SAMP>
 | |
| <DD><A NAME="write register packet"></A>
 | |
| <A NAME="IDX1592"></A>
 | |
| Write register <VAR>n<small>...</small></VAR> with value <VAR>r<small>...</small></VAR>.  The register
 | |
| number <VAR>n</VAR> is in hexadecimal, and <VAR>r<small>...</small></VAR> contains two hex
 | |
| digits for each byte in the register (target byte order).
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>for success
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`q <VAR>name</VAR> <VAR>params</VAR><small>...</small>'</SAMP>
 | |
| <DD><DT><SAMP>`Q <VAR>name</VAR> <VAR>params</VAR><small>...</small>'</SAMP>
 | |
| <DD><A NAME="IDX1593"></A>
 | |
| <A NAME="IDX1594"></A>
 | |
| General query (<SAMP>`q'</SAMP>) and set (<SAMP>`Q'</SAMP>).  These packets are
 | |
| described fully in <A HREF="gdb_33.html#SEC698">D.4 General Query Packets</A>.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`r'</SAMP>
 | |
| <DD><A NAME="IDX1595"></A>
 | |
| Reset the entire system.
 | |
| <P>
 | |
| 
 | |
| Don't use this packet; use the <SAMP>`R'</SAMP> packet instead.
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`R <VAR>XX</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1596"></A>
 | |
| Restart the program being debugged.  <VAR>XX</VAR>, while needed, is ignored.
 | |
| This packet is only available in extended mode (see  <A HREF="gdb_33.html#extended mode">extended mode</A>).
 | |
| <P>
 | |
| 
 | |
| The <SAMP>`R'</SAMP> packet has no reply.
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`s [<VAR>addr</VAR>]'</SAMP>
 | |
| <DD><A NAME="IDX1597"></A>
 | |
| Single step.  <VAR>addr</VAR> is the address at which to resume.  If
 | |
| <VAR>addr</VAR> is omitted, resume at same address.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| See section <A HREF="gdb_33.html#SEC697">D.3 Stop Reply Packets</A>, for the reply specifications.
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`S <VAR>sig</VAR>[;<VAR>addr</VAR>]'</SAMP>
 | |
| <DD><A NAME="step with signal packet"></A>
 | |
| <A NAME="IDX1598"></A>
 | |
| Step with signal.  This is analogous to the <SAMP>`C'</SAMP> packet, but
 | |
| requests a single-step, rather than a normal resumption of execution.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| See section <A HREF="gdb_33.html#SEC697">D.3 Stop Reply Packets</A>, for the reply specifications.
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`t <VAR>addr</VAR>:<VAR>PP</VAR>,<VAR>MM</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1599"></A>
 | |
| Search backwards starting at address <VAR>addr</VAR> for a match with pattern
 | |
| <VAR>PP</VAR> and mask <VAR>MM</VAR>.  <VAR>PP</VAR> and <VAR>MM</VAR> are 4 bytes.
 | |
| <VAR>addr</VAR> must be at least 3 digits.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`T <VAR>XX</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1600"></A>
 | |
| Find out if the thread XX is alive.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>thread is still alive
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>thread is dead
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`v'</SAMP>
 | |
| <DD>Packets starting with <SAMP>`v'</SAMP> are identified by a multi-letter name,
 | |
| up to the first <SAMP>`;'</SAMP> or <SAMP>`?'</SAMP> (or the end of the packet).
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`vAttach;<VAR>pid</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1601"></A>
 | |
| Attach to a new process with the specified process ID.  <VAR>pid</VAR> is a
 | |
| hexadecimal integer identifying the process.  The attached process is
 | |
| stopped.
 | |
| <P>
 | |
| 
 | |
| This packet is only available in extended mode (see  <A HREF="gdb_33.html#extended mode">extended mode</A>).
 | |
| </P><P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`E <VAR>nn</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| <DT><SAMP>`Any stop packet'</SAMP>
 | |
| <DD>for success (see section <A HREF="gdb_33.html#SEC697">D.3 Stop Reply Packets</A>)
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`vCont[;<VAR>action</VAR>[:<VAR>tid</VAR>]]<small>...</small>'</SAMP>
 | |
| <DD><A NAME="IDX1602"></A>
 | |
| Resume the inferior, specifying different actions for each thread.
 | |
| If an action is specified with no <VAR>tid</VAR>, 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.  Specifying multiple
 | |
| default actions is an error; specifying no actions is also an error.
 | |
| Thread IDs are specified in hexadecimal.  Currently supported actions are:
 | |
| <P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`c'</SAMP>
 | |
| <DD>Continue.
 | |
| <DT><SAMP>`C <VAR>sig</VAR>'</SAMP>
 | |
| <DD>Continue with signal <VAR>sig</VAR>.  <VAR>sig</VAR> should be two hex digits.
 | |
| <DT><SAMP>`s'</SAMP>
 | |
| <DD>Step.
 | |
| <DT><SAMP>`S <VAR>sig</VAR>'</SAMP>
 | |
| <DD>Step with signal <VAR>sig</VAR>.  <VAR>sig</VAR> should be two hex digits.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| The optional <VAR>addr</VAR> argument normally associated with these packets is
 | |
| not supported in <SAMP>`vCont'</SAMP>.
 | |
| </P><P>
 | |
| 
 | |
| Reply:
 | |
| See section <A HREF="gdb_33.html#SEC697">D.3 Stop Reply Packets</A>, for the reply specifications.
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`vCont?'</SAMP>
 | |
| <DD><A NAME="IDX1603"></A>
 | |
| Request a list of actions supported by the <SAMP>`vCont'</SAMP> packet.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`vCont[;<VAR>action</VAR><small>...</small>]'</SAMP>
 | |
| <DD>The <SAMP>`vCont'</SAMP> packet is supported.  Each <VAR>action</VAR> is a supported
 | |
| command in the <SAMP>`vCont'</SAMP> packet.
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>The <SAMP>`vCont'</SAMP> packet is not supported.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`vFile:<VAR>operation</VAR>:<VAR>parameter</VAR><small>...</small>'</SAMP>
 | |
| <DD><A NAME="IDX1604"></A>
 | |
| Perform a file operation on the target system.  For details,
 | |
| see <A HREF="gdb_33.html#SEC701">D.7 Host I/O Packets</A>.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`vFlashErase:<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1605"></A>
 | |
| Direct the stub to erase <VAR>length</VAR> bytes of flash starting at
 | |
| <VAR>addr</VAR>.  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 (see section <A HREF="gdb_33.html#SEC737">D.12 Memory Map Format</A>).  GDB groups flash memory programming operations
 | |
| together, and sends a <SAMP>`vFlashDone'</SAMP> request after each group; the
 | |
| stub is allowed to delay erase operation until the <SAMP>`vFlashDone'</SAMP>
 | |
| packet is received.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>for success
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`vFlashWrite:<VAR>addr</VAR>:<VAR>XX<small>...</small></VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1606"></A>
 | |
| Direct the stub to write data to flash address <VAR>addr</VAR>.  The data
 | |
| is passed in binary form using the same encoding as for the <SAMP>`X'</SAMP>
 | |
| packet (see  <A HREF="gdb_33.html#Binary Data">Binary Data</A>).  The memory ranges specified by
 | |
| <SAMP>`vFlashWrite'</SAMP> packets preceding a <SAMP>`vFlashDone'</SAMP> packet must
 | |
| not overlap, and must appear in order of increasing addresses
 | |
| (although <SAMP>`vFlashErase'</SAMP> packets for higher addresses may already
 | |
| have been received; the ordering is guaranteed only between
 | |
| <SAMP>`vFlashWrite'</SAMP> packets).  If a packet writes to an address that was
 | |
| neither erased by a preceding <SAMP>`vFlashErase'</SAMP> packet nor by some other
 | |
| target-specific method, the results are unpredictable.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>for success
 | |
| <DT><SAMP>`E.memtype'</SAMP>
 | |
| <DD>for vFlashWrite addressing non-flash memory
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`vFlashDone'</SAMP>
 | |
| <DD><A NAME="IDX1607"></A>
 | |
| Indicate to the stub that flash programming operation is finished.
 | |
| The stub is permitted to delay or batch the effects of a group of
 | |
| <SAMP>`vFlashErase'</SAMP> and <SAMP>`vFlashWrite'</SAMP> packets until a
 | |
| <SAMP>`vFlashDone'</SAMP> packet is received.  The contents of the affected
 | |
| regions of flash memory are unpredictable until the <SAMP>`vFlashDone'</SAMP>
 | |
| request is completed.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`vRun;<VAR>filename</VAR>[;<VAR>argument</VAR>]<small>...</small>'</SAMP>
 | |
| <DD><A NAME="IDX1608"></A>
 | |
| Run the program <VAR>filename</VAR>, passing it each <VAR>argument</VAR> on its
 | |
| command line.  The file and arguments are hex-encoded strings.  If
 | |
| <VAR>filename</VAR> 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.
 | |
| <P>
 | |
| 
 | |
| This packet is only available in extended mode (see  <A HREF="gdb_33.html#extended mode">extended mode</A>).
 | |
| </P><P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`E <VAR>nn</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| <DT><SAMP>`Any stop packet'</SAMP>
 | |
| <DD>for success (see section <A HREF="gdb_33.html#SEC697">D.3 Stop Reply Packets</A>)
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`X <VAR>addr</VAR>,<VAR>length</VAR>:<VAR>XX<small>...</small></VAR>'</SAMP>
 | |
| <DD><A NAME="X packet"></A>
 | |
| <A NAME="IDX1609"></A>
 | |
| Write data to memory, where the data is transmitted in binary.
 | |
| <VAR>addr</VAR> is address, <VAR>length</VAR> is number of bytes,
 | |
| <SAMP>`<VAR>XX</VAR><small>...</small>'</SAMP> is binary data (see  <A HREF="gdb_33.html#Binary Data">Binary Data</A>).
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>for success
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`z <VAR>type</VAR>,<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><DT><SAMP>`Z <VAR>type</VAR>,<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="insert breakpoint or watchpoint packet"></A>
 | |
| <A NAME="IDX1610"></A>
 | |
| <A NAME="IDX1611"></A>
 | |
| Insert (<SAMP>`Z'</SAMP>) or remove (<SAMP>`z'</SAMP>) a <VAR>type</VAR> breakpoint or
 | |
| watchpoint starting at address <VAR>address</VAR> and covering the next
 | |
| <VAR>length</VAR> bytes.
 | |
| <P>
 | |
| 
 | |
| Each breakpoint and watchpoint packet <VAR>type</VAR> is documented
 | |
| separately.
 | |
| </P><P>
 | |
| 
 | |
| <EM>Implementation notes: A remote target shall return an empty string
 | |
| for an unrecognized breakpoint or watchpoint packet <VAR>type</VAR>.  A
 | |
| remote target shall support either both or neither of a given
 | |
| <SAMP>`Z<VAR>type</VAR><small>...</small>'</SAMP> and <SAMP>`z<VAR>type</VAR><small>...</small>'</SAMP> packet pair.  To
 | |
| avoid potential problems with duplicate packets, the operations should
 | |
| be implemented in an idempotent way.</EM>
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`z0,<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><DT><SAMP>`Z0,<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1612"></A>
 | |
| <A NAME="IDX1613"></A>
 | |
| Insert (<SAMP>`Z0'</SAMP>) or remove (<SAMP>`z0'</SAMP>) a memory breakpoint at address
 | |
| <VAR>addr</VAR> of size <VAR>length</VAR>.
 | |
| <P>
 | |
| 
 | |
| A memory breakpoint is implemented by replacing the instruction at
 | |
| <VAR>addr</VAR> with a software breakpoint or trap instruction.  The
 | |
| <VAR>length</VAR> is used by targets that 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).
 | |
| </P><P>
 | |
| 
 | |
| <EM>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.</EM>
 | |
| </P><P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>success
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>not supported
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`z1,<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><DT><SAMP>`Z1,<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1614"></A>
 | |
| <A NAME="IDX1615"></A>
 | |
| Insert (<SAMP>`Z1'</SAMP>) or remove (<SAMP>`z1'</SAMP>) a hardware breakpoint at
 | |
| address <VAR>addr</VAR> of size <VAR>length</VAR>.
 | |
| <P>
 | |
| 
 | |
| A hardware breakpoint is implemented using a mechanism that is not
 | |
| dependant on being able to modify the target's memory.
 | |
| </P><P>
 | |
| 
 | |
| <EM>Implementation note: A hardware breakpoint is not affected by code
 | |
| movement.</EM>
 | |
| </P><P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>success
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>not supported
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`z2,<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><DT><SAMP>`Z2,<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1616"></A>
 | |
| <A NAME="IDX1617"></A>
 | |
| Insert (<SAMP>`Z2'</SAMP>) or remove (<SAMP>`z2'</SAMP>) a write watchpoint.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>success
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>not supported
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`z3,<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><DT><SAMP>`Z3,<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1618"></A>
 | |
| <A NAME="IDX1619"></A>
 | |
| Insert (<SAMP>`Z3'</SAMP>) or remove (<SAMP>`z3'</SAMP>) a read watchpoint.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>success
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>not supported
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`z4,<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><DT><SAMP>`Z4,<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1620"></A>
 | |
| <A NAME="IDX1621"></A>
 | |
| Insert (<SAMP>`Z4'</SAMP>) or remove (<SAMP>`z4'</SAMP>) an access watchpoint.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>success
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>not supported
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>for an error
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="Stop Reply Packets"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC697"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC696"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC698"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC698"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H2> D.3 Stop Reply Packets </H2>
 | |
| <!--docid::SEC697::-->
 | |
| <P>
 | |
| 
 | |
| The <SAMP>`C'</SAMP>, <SAMP>`c'</SAMP>, <SAMP>`S'</SAMP>, <SAMP>`s'</SAMP> and <SAMP>`?'</SAMP> packets can
 | |
| receive any of the below as a reply.  In the case of the <SAMP>`C'</SAMP>,
 | |
| <SAMP>`c'</SAMP>, <SAMP>`S'</SAMP> and <SAMP>`s'</SAMP> packets, that reply is only returned
 | |
| when the target halts.  In the below the exact meaning of <EM>signal
 | |
| number</EM> is defined by the header <TT>`include/gdb/signals.h'</TT> in the
 | |
| GDB source code.
 | |
| </P><P>
 | |
| 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| 
 | |
| <DT><SAMP>`S <VAR>AA</VAR>'</SAMP>
 | |
| <DD>The program received signal number <VAR>AA</VAR> (a two-digit hexadecimal
 | |
| number).  This is equivalent to a <SAMP>`T'</SAMP> response with no
 | |
| <VAR>n</VAR>:<VAR>r</VAR> pairs.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`T <VAR>AA</VAR> <VAR>n1</VAR>:<VAR>r1</VAR>;<VAR>n2</VAR>:<VAR>r2</VAR>;<small>...</small>'</SAMP>
 | |
| <DD><A NAME="IDX1622"></A>
 | |
| The program received signal number <VAR>AA</VAR> (a two-digit hexadecimal
 | |
| number).  This is equivalent to an <SAMP>`S'</SAMP> response, except that the
 | |
| <SAMP>`<VAR>n</VAR>:<VAR>r</VAR>'</SAMP> 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 <SAMP>`<VAR>n</VAR>:<VAR>r</VAR>'</SAMP> pair is interpreted as follows:
 | |
| <P>
 | |
| 
 | |
| <UL>
 | |
| <LI>
 | |
| If <VAR>n</VAR> is a hexadecimal number, it is a register number, and the
 | |
| corresponding <VAR>r</VAR> gives that register's value.  <VAR>r</VAR> is a
 | |
| series of bytes in target byte order, with each byte given by a
 | |
| two-digit hex number.
 | |
| <P>
 | |
| 
 | |
| <LI>
 | |
| If <VAR>n</VAR> is <SAMP>`thread'</SAMP>, then <VAR>r</VAR> is the thread process ID, in
 | |
| hex.
 | |
| <P>
 | |
| 
 | |
| <LI>
 | |
| If <VAR>n</VAR> is a recognized <EM>stop reason</EM>, it describes a more
 | |
| specific event that stopped the target.  The currently defined stop
 | |
| reasons are listed below.  <VAR>aa</VAR> should be <SAMP>`05'</SAMP>, the trap
 | |
| signal.  At most one stop reason should be present.
 | |
| <P>
 | |
| 
 | |
| <LI>
 | |
| Otherwise, GDB should ignore this <SAMP>`<VAR>n</VAR>:<VAR>r</VAR>'</SAMP> pair
 | |
| and go on to the next; this allows us to extend the protocol in the
 | |
| future.
 | |
| </UL>
 | |
| <P>
 | |
| 
 | |
| The currently defined stop reasons are:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`watch'</SAMP>
 | |
| <DD><DT><SAMP>`rwatch'</SAMP>
 | |
| <DD><DT><SAMP>`awatch'</SAMP>
 | |
| <DD>The packet indicates a watchpoint hit, and <VAR>r</VAR> is the data address, in
 | |
| hex.
 | |
| <P>
 | |
| 
 | |
| <A NAME="IDX1623"></A>
 | |
| <DT><SAMP>`library'</SAMP>
 | |
| <DD>The packet indicates that the loaded libraries have changed.
 | |
| GDB should use <SAMP>`qXfer:libraries:read'</SAMP> to fetch a new
 | |
| list of loaded libraries.  <VAR>r</VAR> is ignored.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`W <VAR>AA</VAR>'</SAMP>
 | |
| <DD>The process exited, and <VAR>AA</VAR> is the exit status.  This is only
 | |
| applicable to certain targets.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`X <VAR>AA</VAR>'</SAMP>
 | |
| <DD>The process terminated with signal <VAR>AA</VAR>.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`O <VAR>XX</VAR><small>...</small>'</SAMP>
 | |
| <DD><SAMP>`<VAR>XX</VAR><small>...</small>'</SAMP> 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 <SAMP>`W'</SAMP>, <SAMP>`T'</SAMP>, etc.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`F <VAR>call-id</VAR>,<VAR>parameter</VAR><small>...</small>'</SAMP>
 | |
| <DD><VAR>call-id</VAR> 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.
 | |
| See section <A HREF="gdb_33.html#SEC704">D.10 File-I/O Remote Protocol Extension</A>, for a list of implemented
 | |
| system calls.
 | |
| <P>
 | |
| 
 | |
| <SAMP>`<VAR>parameter</VAR><small>...</small>'</SAMP> is a list of parameters as defined for
 | |
| this very system call.
 | |
| </P><P>
 | |
| 
 | |
| 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 <SAMP>`F'</SAMP> packet and keeps up waiting for the next
 | |
| reply packet from the target.  The latest <SAMP>`C'</SAMP>, <SAMP>`c'</SAMP>, <SAMP>`S'</SAMP>
 | |
| or <SAMP>`s'</SAMP> action is expected to be continued.  See section <A HREF="gdb_33.html#SEC704">D.10 File-I/O Remote Protocol Extension</A>, for more details.
 | |
| </P><P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="General Query Packets"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC698"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC697"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC699"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC699"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H2> D.4 General Query Packets </H2>
 | |
| <!--docid::SEC698::-->
 | |
| <P>
 | |
| 
 | |
| Packets starting with <SAMP>`q'</SAMP> are <EM>general query packets</EM>;
 | |
| packets starting with <SAMP>`Q'</SAMP> are <EM>general set packets</EM>.  General
 | |
| query and set packets are a semi-unified form for retrieving and
 | |
| sending information to and from the stub.
 | |
| </P><P>
 | |
| 
 | |
| 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 <SAMP>`qSymbol'</SAMP> packet to exchange symbol
 | |
| definitions with the stub.  These packet names follow some
 | |
| conventions:
 | |
| </P><P>
 | |
| 
 | |
| <UL>
 | |
| <LI>
 | |
| The name must not contain commas, colons or semicolons.
 | |
| <LI>
 | |
| Most GDB query and set packets have a leading upper case
 | |
| letter.
 | |
| <LI>
 | |
| 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 <SAMP>`qacme.foo'</SAMP> (for querying
 | |
| foos) or <SAMP>`Qacme.bar'</SAMP> (for setting bars).
 | |
| </UL>
 | |
| <P>
 | |
| 
 | |
| The name of a query or set packet should be separated from any
 | |
| parameters by a <SAMP>`:'</SAMP>; the parameters themselves should be
 | |
| separated by <SAMP>`,'</SAMP> or <SAMP>`;'</SAMP>.  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 <SAMP>`qC'</SAMP>, <SAMP>`qP'</SAMP>, or <SAMP>`qL'</SAMP><A NAME="DOCF9" HREF="gdb_fot.html#FOOT9">(9)</A>.
 | |
| </P><P>
 | |
| 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| Here are the currently defined query and set packets:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| 
 | |
| <DT><SAMP>`qC'</SAMP>
 | |
| <DD><A NAME="IDX1624"></A>
 | |
| <A NAME="IDX1625"></A>
 | |
| Return the current thread id.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`QC <VAR>pid</VAR>'</SAMP>
 | |
| <DD>Where <VAR>pid</VAR> is an unsigned hexadecimal process id.
 | |
| <DT><SAMP>`(anything else)'</SAMP>
 | |
| <DD>Any other reply implies the old pid.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qCRC:<VAR>addr</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1626"></A>
 | |
| <A NAME="IDX1627"></A>
 | |
| Compute the CRC checksum of a block of memory.
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>An error (such as memory fault)
 | |
| <DT><SAMP>`C <VAR>crc32</VAR>'</SAMP>
 | |
| <DD>The specified memory region's checksum is <VAR>crc32</VAR>.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qfThreadInfo'</SAMP>
 | |
| <DD><DT><SAMP>`qsThreadInfo'</SAMP>
 | |
| <DD><A NAME="IDX1628"></A>
 | |
| <A NAME="IDX1629"></A>
 | |
| <A NAME="IDX1630"></A>
 | |
| 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 <SAMP>`qfThreadInfo'</SAMP> query; subsequent queries in the
 | |
| sequence will be the <SAMP>`qsThreadInfo'</SAMP> query.
 | |
| <P>
 | |
| 
 | |
| NOTE: This packet replaces the <SAMP>`qL'</SAMP> query (see below).
 | |
| </P><P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`m <VAR>id</VAR>'</SAMP>
 | |
| <DD>A single thread id
 | |
| <DT><SAMP>`m <VAR>id</VAR>,<VAR>id</VAR><small>...</small>'</SAMP>
 | |
| <DD>a comma-separated list of thread ids
 | |
| <DT><SAMP>`l'</SAMP>
 | |
| <DD>(lower case letter <SAMP>`L'</SAMP>) denotes end of list.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| In response to each query, the target will reply with a list of one or
 | |
| more thread ids, in big-endian unsigned hex, separated by commas.
 | |
| GDB will respond to each reply with a request for more thread
 | |
| ids (using the <SAMP>`qs'</SAMP> form of the query), until the target responds
 | |
| with <SAMP>`l'</SAMP> (lower-case el, for <EM>last</EM>).
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`qGetTLSAddr:<VAR>thread-id</VAR>,<VAR>offset</VAR>,<VAR>lm</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1631"></A>
 | |
| <A NAME="IDX1632"></A>
 | |
| Fetch the address associated with thread local storage specified
 | |
| by <VAR>thread-id</VAR>, <VAR>offset</VAR>, and <VAR>lm</VAR>.
 | |
| <P>
 | |
| 
 | |
| <VAR>thread-id</VAR> is the (big endian, hex encoded) thread id associated with the
 | |
| thread for which to fetch the TLS address.
 | |
| </P><P>
 | |
| 
 | |
| <VAR>offset</VAR> 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.)
 | |
| </P><P>
 | |
| 
 | |
| <VAR>lm</VAR> is the (big endian, hex encoded) OS/ABI-specific encoding of the
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`<VAR>XX</VAR><small>...</small>'</SAMP>
 | |
| <DD>Hex encoded (big endian) bytes representing the address of the thread
 | |
| local storage requested.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`E <VAR>nn</VAR>'</SAMP>
 | |
| <DD>An error occurred.  <VAR>nn</VAR> are hex digits.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>An empty reply indicates that <SAMP>`qGetTLSAddr'</SAMP> is not supported by the stub.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qL <VAR>startflag</VAR> <VAR>threadcount</VAR> <VAR>nextthread</VAR>'</SAMP>
 | |
| <DD>Obtain thread information from RTOS.  Where: <VAR>startflag</VAR> (one hex
 | |
| digit) is one to indicate the first query and zero to indicate a
 | |
| subsequent query; <VAR>threadcount</VAR> (two hex digits) is the maximum
 | |
| number of threads the response packet can contain; and <VAR>nextthread</VAR>
 | |
| (eight hex digits), for subsequent queries (<VAR>startflag</VAR> is zero), is
 | |
| returned in the response as <VAR>argthread</VAR>.
 | |
| <P>
 | |
| 
 | |
| Don't use this packet; use the <SAMP>`qfThreadInfo'</SAMP> query instead (see above).
 | |
| </P><P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`qM <VAR>count</VAR> <VAR>done</VAR> <VAR>argthread</VAR> <VAR>thread</VAR><small>...</small>'</SAMP>
 | |
| <DD>Where: <VAR>count</VAR> (two hex digits) is the number of threads being
 | |
| returned; <VAR>done</VAR> (one hex digit) is zero to indicate more threads
 | |
| and one indicates no further threads; <VAR>argthreadid</VAR> (eight hex
 | |
| digits) is <VAR>nextthread</VAR> from the request packet; <VAR>thread</VAR><small>...</small>
 | |
| is a sequence of thread IDs from the target.  <VAR>threadid</VAR> (eight hex
 | |
| digits).  See <CODE>remote.c:parse_threadlist_response()</CODE>.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qOffsets'</SAMP>
 | |
| <DD><A NAME="IDX1633"></A>
 | |
| <A NAME="IDX1634"></A>
 | |
| Get section offsets that the target used when relocating the downloaded
 | |
| image.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`Text=<VAR>xxx</VAR>;Data=<VAR>yyy</VAR>[;Bss=<VAR>zzz</VAR>]'</SAMP>
 | |
| <DD>Relocate the <CODE>Text</CODE> section by <VAR>xxx</VAR> from its original address.
 | |
| Relocate the <CODE>Data</CODE> section by <VAR>yyy</VAR> from its original address.
 | |
| If the object file format provides segment information (e.g. ELF
 | |
| <SAMP>`PT_LOAD'</SAMP> program headers), GDB will relocate entire
 | |
| segments by the supplied offsets.
 | |
| <P>
 | |
| 
 | |
| <EM>Note: while a <CODE>Bss</CODE> offset may be included in the response,
 | |
| GDB ignores this and instead applies the <CODE>Data</CODE> offset
 | |
| to the <CODE>Bss</CODE> section.</EM>
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`TextSeg=<VAR>xxx</VAR>[;DataSeg=<VAR>yyy</VAR>]'</SAMP>
 | |
| <DD>Relocate the first segment of the object file, which conventionally
 | |
| contains program code, to a starting address of <VAR>xxx</VAR>.  If
 | |
| <SAMP>`DataSeg'</SAMP> is specified, relocate the second segment, which
 | |
| conventionally contains modifiable data, to a starting address of
 | |
| <VAR>yyy</VAR>.  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.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qP <VAR>mode</VAR> <VAR>threadid</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1635"></A>
 | |
| <A NAME="IDX1636"></A>
 | |
| Returns information on <VAR>threadid</VAR>.  Where: <VAR>mode</VAR> is a hex
 | |
| encoded 32 bit mode; <VAR>threadid</VAR> is a hex encoded 64 bit thread ID.
 | |
| <P>
 | |
| 
 | |
| Don't use this packet; use the <SAMP>`qThreadExtraInfo'</SAMP> query instead
 | |
| (see below).
 | |
| </P><P>
 | |
| 
 | |
| Reply: see <CODE>remote.c:remote_unpack_thread_info_response()</CODE>.
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`QPassSignals: <VAR>signal</VAR> [;<VAR>signal</VAR>]<small>...</small>'</SAMP>
 | |
| <DD><A NAME="IDX1637"></A>
 | |
| <A NAME="IDX1638"></A>
 | |
| <A NAME="QPassSignals"></A>
 | |
| Each listed <VAR>signal</VAR> should be passed directly to the inferior process. 
 | |
| Signals are numbered identically to continue packets and stop replies
 | |
| (see section <A HREF="gdb_33.html#SEC697">D.3 Stop Reply Packets</A>).  Each <VAR>signal</VAR> 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 <SAMP>`QPassSignals'</SAMP> packets do not
 | |
| combine; any earlier <SAMP>`QPassSignals'</SAMP> list is completely replaced by the
 | |
| new list.  This packet improves performance when using <SAMP>`handle
 | |
| <VAR>signal</VAR> nostop noprint pass'</SAMP>.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>The request succeeded.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`E <VAR>nn</VAR>'</SAMP>
 | |
| <DD>An error occurred.  <VAR>nn</VAR> are hex digits.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>An empty reply indicates that <SAMP>`QPassSignals'</SAMP> is not supported by
 | |
| the stub.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| Use of this packet is controlled by the <CODE>set remote pass-signals</CODE>
 | |
| command (see section <A HREF="gdb_18.html#SEC172">set remote pass-signals</A>).
 | |
| This packet is not probed by default; the remote stub must request it,
 | |
| by supplying an appropriate <SAMP>`qSupported'</SAMP> response (see  <A HREF="gdb_33.html#qSupported">qSupported</A>).
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`qRcmd,<VAR>command</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1639"></A>
 | |
| <A NAME="IDX1640"></A>
 | |
| <VAR>command</VAR> (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 <SAMP>`O<VAR>output</VAR>'</SAMP> console output
 | |
| packets.  <EM>Implementors should note that providing access to a
 | |
| stubs's interpreter may have security implications</EM>.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>A command response with no output.
 | |
| <DT><SAMP>`<VAR>OUTPUT</VAR>'</SAMP>
 | |
| <DD>A command response with the hex encoded output string <VAR>OUTPUT</VAR>.
 | |
| <DT><SAMP>`E <VAR>NN</VAR>'</SAMP>
 | |
| <DD>Indicate a badly formed request.
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>An empty reply indicates that <SAMP>`qRcmd'</SAMP> is not recognized.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| (Note that the <CODE>qRcmd</CODE> packet's name is separated from the
 | |
| command by a <SAMP>`,'</SAMP>, not a <SAMP>`:'</SAMP>, contrary to the naming
 | |
| conventions above.  Please don't use this packet as a model for new
 | |
| packets.)
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`qSupported [:<VAR>gdbfeature</VAR> [;<VAR>gdbfeature</VAR>]<small>...</small> ]'</SAMP>
 | |
| <DD><A NAME="IDX1641"></A>
 | |
| <A NAME="IDX1642"></A>
 | |
| <A NAME="IDX1643"></A>
 | |
| <A NAME="qSupported"></A>
 | |
| 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.  <SAMP>`qSupported'</SAMP> 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.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`<VAR>stubfeature</VAR> [;<VAR>stubfeature</VAR>]<small>...</small>'</SAMP>
 | |
| <DD>The stub supports or does not support each returned <VAR>stubfeature</VAR>,
 | |
| depending on the form of each <VAR>stubfeature</VAR> (see below for the
 | |
| possible forms).
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>An empty reply indicates that <SAMP>`qSupported'</SAMP> is not recognized,
 | |
| or that no features needed to be reported to GDB.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| The allowed forms for each feature (either a <VAR>gdbfeature</VAR> in the
 | |
| <SAMP>`qSupported'</SAMP> packet, or a <VAR>stubfeature</VAR> in the response)
 | |
| are:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`<VAR>name</VAR>=<VAR>value</VAR>'</SAMP>
 | |
| <DD>The remote protocol feature <VAR>name</VAR> is supported, and associated
 | |
| with the specified <VAR>value</VAR>.  The format of <VAR>value</VAR> depends
 | |
| on the feature, but it must not include a semicolon.
 | |
| <DT><SAMP>`<VAR>name</VAR>+'</SAMP>
 | |
| <DD>The remote protocol feature <VAR>name</VAR> is supported, and does not
 | |
| need an associated value.
 | |
| <DT><SAMP>`<VAR>name</VAR>-'</SAMP>
 | |
| <DD>The remote protocol feature <VAR>name</VAR> is not supported.
 | |
| <DT><SAMP>`<VAR>name</VAR>?'</SAMP>
 | |
| <DD>The remote protocol feature <VAR>name</VAR> may be supported, and
 | |
| GDB should auto-detect support in some other way when it is
 | |
| needed.  This form will not be used for <VAR>gdbfeature</VAR> notifications,
 | |
| but may be used for <VAR>stubfeature</VAR> responses.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| Whenever the stub receives a <SAMP>`qSupported'</SAMP> 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.
 | |
| </P><P>
 | |
| 
 | |
| No values of <VAR>gdbfeature</VAR> (for the packet sent by GDB)
 | |
| are defined yet.  Stubs should ignore any unknown values for
 | |
| <VAR>gdbfeature</VAR>.  Any GDB which sends a <SAMP>`qSupported'</SAMP>
 | |
| packet supports receiving packets of unlimited length (earlier
 | |
| versions of GDB may reject overly long responses).  Values
 | |
| for <VAR>gdbfeature</VAR> 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--support for unlimited length
 | |
| responses would be a <VAR>gdbfeature</VAR> example, if it were not implied by
 | |
| the <SAMP>`qSupported'</SAMP> query.  The stub's reply should be independent
 | |
| of the <VAR>gdbfeature</VAR> entries sent by GDB; first GDB
 | |
| describes all the features it supports, and then the stub replies with
 | |
| all the features it supports.
 | |
| </P><P>
 | |
| 
 | |
| Similarly, GDB will silently ignore unrecognized stub feature
 | |
| responses, as long as each response uses one of the standard forms.
 | |
| </P><P>
 | |
| 
 | |
| Some features are flags.  A stub which supports a flag feature
 | |
| should respond with a <SAMP>`+'</SAMP> form response.  Other features
 | |
| require values, and the stub should respond with an <SAMP>`='</SAMP>
 | |
| form response.
 | |
| </P><P>
 | |
| 
 | |
| Each feature has a default value, which GDB will use if
 | |
| <SAMP>`qSupported'</SAMP> is not available or if the feature is not mentioned
 | |
| in the <SAMP>`qSupported'</SAMP> response.  The default values are fixed; a
 | |
| stub is free to omit any feature responses that match the defaults.
 | |
| </P><P>
 | |
| 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| These are the currently defined stub features and their properties:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE>
 | |
| <TR><TD>Feature Name</TD>
 | |
| </TD><TD> Value Required
 | |
| </TD><TD> Default
 | |
| </TD><TD> Probe Allowed
 | |
| 
 | |
| </TR>
 | |
| <TR><TD><SAMP>`PacketSize'</SAMP></TD>
 | |
| </TD><TD> Yes
 | |
| </TD><TD> <SAMP>`-'</SAMP>
 | |
| </TD><TD> No
 | |
| 
 | |
| </TR>
 | |
| <TR><TD><SAMP>`qXfer:auxv:read'</SAMP></TD>
 | |
| </TD><TD> No
 | |
| </TD><TD> <SAMP>`-'</SAMP>
 | |
| </TD><TD> Yes
 | |
| 
 | |
| </TR>
 | |
| <TR><TD><SAMP>`qXfer:features:read'</SAMP></TD>
 | |
| </TD><TD> No
 | |
| </TD><TD> <SAMP>`-'</SAMP>
 | |
| </TD><TD> Yes
 | |
| 
 | |
| </TR>
 | |
| <TR><TD><SAMP>`qXfer:libraries:read'</SAMP></TD>
 | |
| </TD><TD> No
 | |
| </TD><TD> <SAMP>`-'</SAMP>
 | |
| </TD><TD> Yes
 | |
| 
 | |
| </TR>
 | |
| <TR><TD><SAMP>`qXfer:memory-map:read'</SAMP></TD>
 | |
| </TD><TD> No
 | |
| </TD><TD> <SAMP>`-'</SAMP>
 | |
| </TD><TD> Yes
 | |
| 
 | |
| </TR>
 | |
| <TR><TD><SAMP>`qXfer:spu:read'</SAMP></TD>
 | |
| </TD><TD> No
 | |
| </TD><TD> <SAMP>`-'</SAMP>
 | |
| </TD><TD> Yes
 | |
| 
 | |
| </TR>
 | |
| <TR><TD><SAMP>`qXfer:spu:write'</SAMP></TD>
 | |
| </TD><TD> No
 | |
| </TD><TD> <SAMP>`-'</SAMP>
 | |
| </TD><TD> Yes
 | |
| 
 | |
| </TR>
 | |
| <TR><TD><SAMP>`QPassSignals'</SAMP></TD>
 | |
| </TD><TD> No
 | |
| </TD><TD> <SAMP>`-'</SAMP>
 | |
| </TD><TD> Yes
 | |
| 
 | |
| </TR></TABLE>
 | |
| <P>
 | |
| 
 | |
| These are the currently defined stub features, in more detail:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <A NAME="IDX1644"></A>
 | |
| <DT><SAMP>`PacketSize=<VAR>bytes</VAR>'</SAMP>
 | |
| <DD>The remote stub can accept packets up to at least <VAR>bytes</VAR> 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 <SAMP>`g'</SAMP> packet response.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qXfer:auxv:read'</SAMP>
 | |
| <DD>The remote stub understands the <SAMP>`qXfer:auxv:read'</SAMP> packet
 | |
| (see  <A HREF="gdb_33.html#qXfer auxiliary vector read">qXfer auxiliary vector read</A>).
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qXfer:features:read'</SAMP>
 | |
| <DD>The remote stub understands the <SAMP>`qXfer:features:read'</SAMP> packet
 | |
| (see  <A HREF="gdb_33.html#qXfer target description read">qXfer target description read</A>).
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qXfer:libraries:read'</SAMP>
 | |
| <DD>The remote stub understands the <SAMP>`qXfer:libraries:read'</SAMP> packet
 | |
| (see  <A HREF="gdb_33.html#qXfer library list read">qXfer library list read</A>).
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qXfer:memory-map:read'</SAMP>
 | |
| <DD>The remote stub understands the <SAMP>`qXfer:memory-map:read'</SAMP> packet
 | |
| (see  <A HREF="gdb_33.html#qXfer memory map read">qXfer memory map read</A>).
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qXfer:spu:read'</SAMP>
 | |
| <DD>The remote stub understands the <SAMP>`qXfer:spu:read'</SAMP> packet
 | |
| (see  <A HREF="gdb_33.html#qXfer spu read">qXfer spu read</A>).
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qXfer:spu:write'</SAMP>
 | |
| <DD>The remote stub understands the <SAMP>`qXfer:spu:write'</SAMP> packet
 | |
| (see  <A HREF="gdb_33.html#qXfer spu write">qXfer spu write</A>).
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`QPassSignals'</SAMP>
 | |
| <DD>The remote stub understands the <SAMP>`QPassSignals'</SAMP> packet
 | |
| (see  <A HREF="gdb_33.html#QPassSignals">QPassSignals</A>).
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qSymbol::'</SAMP>
 | |
| <DD><A NAME="IDX1645"></A>
 | |
| <A NAME="IDX1646"></A>
 | |
| Notify the target that GDB is prepared to serve symbol lookup
 | |
| requests.  Accept requests from the target for the values of symbols.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>The target does not need to look up any (more) symbols.
 | |
| <DT><SAMP>`qSymbol:<VAR>sym_name</VAR>'</SAMP>
 | |
| <DD>The target requests the value of symbol <VAR>sym_name</VAR> (hex encoded).
 | |
| GDB may provide the value by using the
 | |
| <SAMP>`qSymbol:<VAR>sym_value</VAR>:<VAR>sym_name</VAR>'</SAMP> message, described
 | |
| below.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qSymbol:<VAR>sym_value</VAR>:<VAR>sym_name</VAR>'</SAMP>
 | |
| <DD>Set the value of <VAR>sym_name</VAR> to <VAR>sym_value</VAR>.
 | |
| <P>
 | |
| 
 | |
| <VAR>sym_name</VAR> (hex encoded) is the name of a symbol whose value the
 | |
| target has previously requested.
 | |
| </P><P>
 | |
| 
 | |
| <VAR>sym_value</VAR> (hex) is the value for symbol <VAR>sym_name</VAR>.  If
 | |
| GDB cannot supply a value for <VAR>sym_name</VAR>, then this field
 | |
| will be empty.
 | |
| </P><P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>The target does not need to look up any (more) symbols.
 | |
| <DT><SAMP>`qSymbol:<VAR>sym_name</VAR>'</SAMP>
 | |
| <DD>The target requests the value of a new symbol <VAR>sym_name</VAR> (hex
 | |
| encoded).  GDB will continue to supply the values of symbols
 | |
| (if available), until the target ceases to request them.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`QTDP'</SAMP>
 | |
| <DD><DT><SAMP>`QTFrame'</SAMP>
 | |
| <DD>See section <A HREF="gdb_33.html#SEC700">D.6 Tracepoint Packets</A>.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qThreadExtraInfo,<VAR>id</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1647"></A>
 | |
| <A NAME="IDX1648"></A>
 | |
| Obtain a printable string description of a thread's attributes from
 | |
| the target OS.  <VAR>id</VAR> is a thread-id in big-endian hex.  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 <CODE>info threads</CODE> display.  Some
 | |
| examples of possible thread extra info strings are <SAMP>`Runnable'</SAMP>, or
 | |
| <SAMP>`Blocked on Mutex'</SAMP>.
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`<VAR>XX</VAR><small>...</small>'</SAMP>
 | |
| <DD>Where <SAMP>`<VAR>XX</VAR><small>...</small>'</SAMP> is a hex encoding of ASCII data,
 | |
| comprising the printable string containing the extra information about
 | |
| the thread's attributes.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| (Note that the <CODE>qThreadExtraInfo</CODE> packet's name is separated from
 | |
| the command by a <SAMP>`,'</SAMP>, not a <SAMP>`:'</SAMP>, contrary to the naming
 | |
| conventions above.  Please don't use this packet as a model for new
 | |
| packets.)
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`QTStart'</SAMP>
 | |
| <DD><DT><SAMP>`QTStop'</SAMP>
 | |
| <DD><DT><SAMP>`QTinit'</SAMP>
 | |
| <DD><DT><SAMP>`QTro'</SAMP>
 | |
| <DD><DT><SAMP>`qTStatus'</SAMP>
 | |
| <DD>See section <A HREF="gdb_33.html#SEC700">D.6 Tracepoint Packets</A>.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qXfer:<VAR>object</VAR>:read:<VAR>annex</VAR>:<VAR>offset</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="IDX1649"></A>
 | |
| <A NAME="IDX1650"></A>
 | |
| <A NAME="qXfer read"></A>
 | |
| Read uninterpreted bytes from the target's special data area
 | |
| identified by the keyword <VAR>object</VAR>.  Request <VAR>length</VAR> bytes
 | |
| starting at <VAR>offset</VAR> bytes into the data.  The content and
 | |
| encoding of <VAR>annex</VAR> is specific to <VAR>object</VAR>; it can supply
 | |
| additional details about what data to access.
 | |
| <P>
 | |
| 
 | |
| Here are the specific requests of this form defined so far.  All
 | |
| <SAMP>`qXfer:<VAR>object</VAR>:read:<small>...</small>'</SAMP> requests use the same reply
 | |
| formats, listed below.
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`qXfer:auxv:read::<VAR>offset</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="qXfer auxiliary vector read"></A>
 | |
| Access the target's <EM>auxiliary vector</EM>.  See section <A HREF="gdb_9.html#SEC72">auxiliary vector</A>.  Note <VAR>annex</VAR> must be empty.
 | |
| <P>
 | |
| 
 | |
| This packet is not probed by default; the remote stub must request it,
 | |
| by supplying an appropriate <SAMP>`qSupported'</SAMP> response (see  <A HREF="gdb_33.html#qSupported">qSupported</A>).
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`qXfer:features:read:<VAR>annex</VAR>:<VAR>offset</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="qXfer target description read"></A>
 | |
| Access the <EM>target description</EM>.  See section <A HREF="gdb_35.html#SEC745">F. Target Descriptions</A>.  The
 | |
| annex specifies which XML document to access.  The main description is
 | |
| always loaded from the <SAMP>`target.xml'</SAMP> annex.
 | |
| <P>
 | |
| 
 | |
| This packet is not probed by default; the remote stub must request it,
 | |
| by supplying an appropriate <SAMP>`qSupported'</SAMP> response (see  <A HREF="gdb_33.html#qSupported">qSupported</A>).
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`qXfer:libraries:read:<VAR>annex</VAR>:<VAR>offset</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="qXfer library list read"></A>
 | |
| Access the target's list of loaded libraries.  See section <A HREF="gdb_33.html#SEC736">D.11 Library List Format</A>.
 | |
| The annex part of the generic <SAMP>`qXfer'</SAMP> packet must be empty
 | |
| (see  <A HREF="gdb_33.html#qXfer read">qXfer read</A>).
 | |
| <P>
 | |
| 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| This packet is not probed by default; the remote stub must request it,
 | |
| by supplying an appropriate <SAMP>`qSupported'</SAMP> response (see  <A HREF="gdb_33.html#qSupported">qSupported</A>).
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`qXfer:memory-map:read::<VAR>offset</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="qXfer memory map read"></A>
 | |
| Access the target's <EM>memory-map</EM>.  See section <A HREF="gdb_33.html#SEC737">D.12 Memory Map Format</A>.  The
 | |
| annex part of the generic <SAMP>`qXfer'</SAMP> packet must be empty
 | |
| (see  <A HREF="gdb_33.html#qXfer read">qXfer read</A>).
 | |
| <P>
 | |
| 
 | |
| This packet is not probed by default; the remote stub must request it,
 | |
| by supplying an appropriate <SAMP>`qSupported'</SAMP> response (see  <A HREF="gdb_33.html#qSupported">qSupported</A>).
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`qXfer:spu:read:<VAR>annex</VAR>:<VAR>offset</VAR>,<VAR>length</VAR>'</SAMP>
 | |
| <DD><A NAME="qXfer spu read"></A>
 | |
| Read contents of an <CODE>spufs</CODE> file on the target system.  The
 | |
| annex specifies which file to read; it must be of the form 
 | |
| <TT>`<VAR>id</VAR>/<VAR>name</VAR>'</TT>, where <VAR>id</VAR> specifies an SPU context ID
 | |
| in the target process, and <VAR>name</VAR> identifes the <CODE>spufs</CODE> file
 | |
| in that context to be accessed.
 | |
| <P>
 | |
| 
 | |
| This packet is not probed by default; the remote stub must request it,
 | |
| by supplying an appropriate <SAMP>`qSupported'</SAMP> response (see  <A HREF="gdb_33.html#qSupported">qSupported</A>).
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`m <VAR>data</VAR>'</SAMP>
 | |
| <DD>Data <VAR>data</VAR> (see  <A HREF="gdb_33.html#Binary Data">Binary Data</A>) has been read from the
 | |
| target.  There may be more data at a higher address (although
 | |
| it is permitted to return <SAMP>`m'</SAMP> even for the last valid
 | |
| block of data, as long as at least one byte of data was read).
 | |
| <VAR>data</VAR> may have fewer bytes than the <VAR>length</VAR> in the
 | |
| request.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`l <VAR>data</VAR>'</SAMP>
 | |
| <DD>Data <VAR>data</VAR> (see  <A HREF="gdb_33.html#Binary Data">Binary Data</A>) has been read from the target.
 | |
| There is no more data to be read.  <VAR>data</VAR> may have fewer bytes
 | |
| than the <VAR>length</VAR> in the request.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`l'</SAMP>
 | |
| <DD>The <VAR>offset</VAR> in the request is at the end of the data.
 | |
| There is no more data to be read.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`E00'</SAMP>
 | |
| <DD>The request was malformed, or <VAR>annex</VAR> was invalid.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`E <VAR>nn</VAR>'</SAMP>
 | |
| <DD>The offset was invalid, or there was an error encountered reading the data.
 | |
| <VAR>nn</VAR> is a hex-encoded <CODE>errno</CODE> value.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>An empty reply indicates the <VAR>object</VAR> string was not recognized by
 | |
| the stub, or that the object does not support reading.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qXfer:<VAR>object</VAR>:write:<VAR>annex</VAR>:<VAR>offset</VAR>:<VAR>data</VAR><small>...</small>'</SAMP>
 | |
| <DD><A NAME="IDX1651"></A>
 | |
| Write uninterpreted bytes into the target's special data area
 | |
| identified by the keyword <VAR>object</VAR>, starting at <VAR>offset</VAR> bytes
 | |
| into the data.  <VAR>data</VAR><small>...</small> is the binary-encoded data
 | |
| (see  <A HREF="gdb_33.html#Binary Data">Binary Data</A>) to be written.  The content and encoding of <VAR>annex</VAR>
 | |
| is specific to <VAR>object</VAR>; it can supply additional details about what data
 | |
| to access.
 | |
| <P>
 | |
| 
 | |
| Here are the specific requests of this form defined so far.  All
 | |
| <SAMP>`qXfer:<VAR>object</VAR>:write:<small>...</small>'</SAMP> requests use the same reply
 | |
| formats, listed below.
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`qXfer:<VAR>spu</VAR>:write:<VAR>annex</VAR>:<VAR>offset</VAR>:<VAR>data</VAR><small>...</small>'</SAMP>
 | |
| <DD><A NAME="qXfer spu write"></A>
 | |
| Write <VAR>data</VAR> to an <CODE>spufs</CODE> file on the target system.  The
 | |
| annex specifies which file to write; it must be of the form
 | |
| <TT>`<VAR>id</VAR>/<VAR>name</VAR>'</TT>, where <VAR>id</VAR> specifies an SPU context ID
 | |
| in the target process, and <VAR>name</VAR> identifes the <CODE>spufs</CODE> file
 | |
| in that context to be accessed.
 | |
| <P>
 | |
| 
 | |
| This packet is not probed by default; the remote stub must request it,
 | |
| by supplying an appropriate <SAMP>`qSupported'</SAMP> response (see  <A HREF="gdb_33.html#qSupported">qSupported</A>).
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| Reply:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`<VAR>nn</VAR>'</SAMP>
 | |
| <DD><VAR>nn</VAR> (hex encoded) is the number of bytes written.
 | |
| This may be fewer bytes than supplied in the request.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`E00'</SAMP>
 | |
| <DD>The request was malformed, or <VAR>annex</VAR> was invalid.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`E <VAR>nn</VAR>'</SAMP>
 | |
| <DD>The offset was invalid, or there was an error encountered writing the data.
 | |
| <VAR>nn</VAR> is a hex-encoded <CODE>errno</CODE> value.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>An empty reply indicates the <VAR>object</VAR> string was not
 | |
| recognized by the stub, or that the object does not support writing.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`qXfer:<VAR>object</VAR>:<VAR>operation</VAR>:<small>...</small>'</SAMP>
 | |
| <DD>Requests of this form may be added in the future.  When a stub does
 | |
| not recognize the <VAR>object</VAR> keyword, or its support for
 | |
| <VAR>object</VAR> does not recognize the <VAR>operation</VAR> keyword, the stub
 | |
| must respond with an empty packet.
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="Register Packet Format"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC699"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC698"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC700"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC700"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H2> D.5 Register Packet Format </H2>
 | |
| <!--docid::SEC699::-->
 | |
| <P>
 | |
| 
 | |
| The following <CODE>g</CODE>/<CODE>G</CODE> 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.
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| 
 | |
| <DT>MIPS32
 | |
| <DD><P>
 | |
| 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| <DT>MIPS64
 | |
| <DD><P>
 | |
| 
 | |
| All registers are transferred as sixty-four bit quantities (including
 | |
| thirty-two bit registers such as <CODE>sr</CODE>).  The ordering is the same
 | |
| as <CODE>MIPS32</CODE>.
 | |
| </P><P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="Tracepoint Packets"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC700"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC699"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC701"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC701"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H2> D.6 Tracepoint Packets </H2>
 | |
| <!--docid::SEC700::-->
 | |
| <P>
 | |
| 
 | |
| Here we describe the packets GDB uses to implement
 | |
| tracepoints (see section <A HREF="gdb_11.html#SEC84">10. Tracepoints</A>).
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| 
 | |
| <DT><SAMP>`QTDP:<VAR>n</VAR>:<VAR>addr</VAR>:<VAR>ena</VAR>:<VAR>step</VAR>:<VAR>pass</VAR>[-]'</SAMP>
 | |
| <DD>Create a new tracepoint, number <VAR>n</VAR>, at <VAR>addr</VAR>.  If <VAR>ena</VAR>
 | |
| is <SAMP>`E'</SAMP>, then the tracepoint is enabled; if it is <SAMP>`D'</SAMP>, then
 | |
| the tracepoint is disabled.  <VAR>step</VAR> is the tracepoint's step
 | |
| count, and <VAR>pass</VAR> is its pass count.  If the trailing <SAMP>`-'</SAMP> is
 | |
| present, further <SAMP>`QTDP'</SAMP> packets will follow to specify this
 | |
| tracepoint's actions.
 | |
| <P>
 | |
| 
 | |
| Replies:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>The packet was understood and carried out.
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>The packet was not recognized.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`QTDP:-<VAR>n</VAR>:<VAR>addr</VAR>:[S]<VAR>action</VAR><small>...</small>[-]'</SAMP>
 | |
| <DD>Define actions to be taken when a tracepoint is hit.  <VAR>n</VAR> and
 | |
| <VAR>addr</VAR> must be the same as in the initial <SAMP>`QTDP'</SAMP> packet for
 | |
| this tracepoint.  This packet may only be sent immediately after
 | |
| another <SAMP>`QTDP'</SAMP> packet that ended with a <SAMP>`-'</SAMP>.  If the
 | |
| trailing <SAMP>`-'</SAMP> is present, further <SAMP>`QTDP'</SAMP> packets will follow,
 | |
| specifying more actions for this tracepoint.
 | |
| <P>
 | |
| 
 | |
| In the series of action packets for a given tracepoint, at most one
 | |
| can have an <SAMP>`S'</SAMP> before its first <VAR>action</VAR>.  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
 | |
| <SAMP>`S'</SAMP>, then all the packets in the series specify ordinary
 | |
| tracepoint actions.
 | |
| </P><P>
 | |
| 
 | |
| The <SAMP>`<VAR>action</VAR><small>...</small>'</SAMP> portion of the packet is a series of
 | |
| actions, concatenated without separators.  Each action has one of the
 | |
| following forms:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| 
 | |
| <DT><SAMP>`R <VAR>mask</VAR>'</SAMP>
 | |
| <DD>Collect the registers whose bits are set in <VAR>mask</VAR>.  <VAR>mask</VAR> is
 | |
| a hexadecimal number whose <VAR>i</VAR>'th bit is set if register number
 | |
| <VAR>i</VAR> should be collected.  (The least significant bit is numbered
 | |
| zero.)  Note that <VAR>mask</VAR> may be any number of digits long; it may
 | |
| not fit in a 32-bit word.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`M <VAR>basereg</VAR>,<VAR>offset</VAR>,<VAR>len</VAR>'</SAMP>
 | |
| <DD>Collect <VAR>len</VAR> bytes of memory starting at the address in register
 | |
| number <VAR>basereg</VAR>, plus <VAR>offset</VAR>.  If <VAR>basereg</VAR> is
 | |
| <SAMP>`-1'</SAMP>, then the range has a fixed address: <VAR>offset</VAR> is the
 | |
| address of the lowest byte to collect.  The <VAR>basereg</VAR>,
 | |
| <VAR>offset</VAR>, and <VAR>len</VAR> parameters are all unsigned hexadecimal
 | |
| values (the <SAMP>`-1'</SAMP> value for <VAR>basereg</VAR> is a special case).
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`X <VAR>len</VAR>,<VAR>expr</VAR>'</SAMP>
 | |
| <DD>Evaluate <VAR>expr</VAR>, whose length is <VAR>len</VAR>, and collect memory as
 | |
| it directs.  <VAR>expr</VAR> is an agent expression, as described in
 | |
| <A HREF="gdb_34.html#SEC738">E. The GDB Agent Expression Mechanism</A>.  Each byte of the expression is encoded as a
 | |
| two-digit hex number in the packet; <VAR>len</VAR> is the number of bytes
 | |
| in the expression (and thus one-half the number of hex digits in the
 | |
| packet).
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| Any number of actions may be packed together in a single <SAMP>`QTDP'</SAMP>
 | |
| packet, as long as the packet does not exceed the maximum packet
 | |
| length (400 bytes, for many stubs).  There may be only one <SAMP>`R'</SAMP>
 | |
| action per tracepoint, and it must precede any <SAMP>`M'</SAMP> or <SAMP>`X'</SAMP>
 | |
| actions.  Any registers referred to by <SAMP>`M'</SAMP> and <SAMP>`X'</SAMP> actions
 | |
| must be collected by a preceding <SAMP>`R'</SAMP> action.  (The
 | |
| "while-stepping" actions are treated as if they were attached to a
 | |
| separate tracepoint, as far as these restrictions are concerned.)
 | |
| </P><P>
 | |
| 
 | |
| Replies:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`OK'</SAMP>
 | |
| <DD>The packet was understood and carried out.
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>The packet was not recognized.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`QTFrame:<VAR>n</VAR>'</SAMP>
 | |
| <DD>Select the <VAR>n</VAR>'th tracepoint frame from the buffer, and use the
 | |
| register and memory contents recorded there to answer subsequent
 | |
| request packets from GDB.
 | |
| <P>
 | |
| 
 | |
| 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:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`F <VAR>f</VAR>'</SAMP>
 | |
| <DD>The selected frame is number <VAR>n</VAR> in the trace frame buffer;
 | |
| <VAR>f</VAR> is a hexadecimal number.  If <VAR>f</VAR> is <SAMP>`-1'</SAMP>, then there
 | |
| was no frame matching the criteria in the request packet.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`T <VAR>t</VAR>'</SAMP>
 | |
| <DD>The selected trace frame records a hit of tracepoint number <VAR>t</VAR>;
 | |
| <VAR>t</VAR> is a hexadecimal number.
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`QTFrame:pc:<VAR>addr</VAR>'</SAMP>
 | |
| <DD>Like <SAMP>`QTFrame:<VAR>n</VAR>'</SAMP>, but select the first tracepoint frame after the
 | |
| currently selected frame whose PC is <VAR>addr</VAR>;
 | |
| <VAR>addr</VAR> is a hexadecimal number.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`QTFrame:tdp:<VAR>t</VAR>'</SAMP>
 | |
| <DD>Like <SAMP>`QTFrame:<VAR>n</VAR>'</SAMP>, but select the first tracepoint frame after the
 | |
| currently selected frame that is a hit of tracepoint <VAR>t</VAR>; <VAR>t</VAR>
 | |
| is a hexadecimal number.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`QTFrame:range:<VAR>start</VAR>:<VAR>end</VAR>'</SAMP>
 | |
| <DD>Like <SAMP>`QTFrame:<VAR>n</VAR>'</SAMP>, but select the first tracepoint frame after the
 | |
| currently selected frame whose PC is between <VAR>start</VAR> (inclusive)
 | |
| and <VAR>end</VAR> (exclusive); <VAR>start</VAR> and <VAR>end</VAR> are hexadecimal
 | |
| numbers.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`QTFrame:outside:<VAR>start</VAR>:<VAR>end</VAR>'</SAMP>
 | |
| <DD>Like <SAMP>`QTFrame:range:<VAR>start</VAR>:<VAR>end</VAR>'</SAMP>, but select the first
 | |
| frame <EM>outside</EM> the given range of addresses.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`QTStart'</SAMP>
 | |
| <DD>Begin the tracepoint experiment.  Begin collecting data from tracepoint
 | |
| hits in the trace frame buffer.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`QTStop'</SAMP>
 | |
| <DD>End the tracepoint experiment.  Stop collecting trace frames.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`QTinit'</SAMP>
 | |
| <DD>Clear the table of tracepoints, and empty the trace frame buffer.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`QTro:<VAR>start1</VAR>,<VAR>end1</VAR>:<VAR>start2</VAR>,<VAR>end2</VAR>:<small>...</small>'</SAMP>
 | |
| <DD>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.
 | |
| <P>
 | |
| 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`qTStatus'</SAMP>
 | |
| <DD>Ask the stub if there is a trace experiment running right now.
 | |
| <P>
 | |
| 
 | |
| Replies:
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`T0'</SAMP>
 | |
| <DD>There is no trace experiment running.
 | |
| <DT><SAMP>`T1'</SAMP>
 | |
| <DD>There is a trace experiment running.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="Host I/O Packets"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC701"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC700"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC702"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC702"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H2> D.7 Host I/O Packets </H2>
 | |
| <!--docid::SEC701::-->
 | |
| <P>
 | |
| 
 | |
| The <EM>Host I/O</EM> 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.  See section <A HREF="gdb_33.html#SEC704">D.10 File-I/O Remote Protocol Extension</A>, for more details on the target-initiated protocol.
 | |
| </P><P>
 | |
| 
 | |
| The Host I/O request packets all encode a single operation along with
 | |
| its arguments.  They have this format:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| 
 | |
| <DT><SAMP>`vFile:<VAR>operation</VAR>: <VAR>parameter</VAR><small>...</small>'</SAMP>
 | |
| <DD><VAR>operation</VAR> 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 <VAR>parameter</VAR> 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 (see  <A HREF="gdb_33.html#Binary Data">Binary Data</A>).
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| The valid responses to Host I/O packets are:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| 
 | |
| <DT><SAMP>`F <VAR>result</VAR> [, <VAR>errno</VAR>] [; <VAR>attachment</VAR>]'</SAMP>
 | |
| <DD><VAR>result</VAR> is the integer value returned by this operation, usually
 | |
| non-negative for success and -1 for errors.  If an error has occured,
 | |
| <VAR>errno</VAR> will be included in the result.  <VAR>errno</VAR> will have a
 | |
| value defined by the File-I/O protocol (see section <A HREF="gdb_33.html#SEC732">Errno Values</A>).  For
 | |
| operations which return data, <VAR>attachment</VAR> supplies the data as a
 | |
| binary buffer.  Binary buffers in response packets are escaped in the
 | |
| normal way (see  <A HREF="gdb_33.html#Binary Data">Binary Data</A>).  See the individual packet
 | |
| documentation for the interpretation of <VAR>result</VAR> and
 | |
| <VAR>attachment</VAR>.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`'</SAMP>
 | |
| <DD>An empty response indicates that this operation is not recognized.
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| These are the supported Host I/O operations:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`vFile:open: <VAR>pathname</VAR>, <VAR>flags</VAR>, <VAR>mode</VAR>'</SAMP>
 | |
| <DD>Open a file at <VAR>pathname</VAR> and return a file descriptor for it, or
 | |
| return -1 if an error occurs.  <VAR>pathname</VAR> is a string,
 | |
| <VAR>flags</VAR> is an integer indicating a mask of open flags
 | |
| (see section <A HREF="gdb_33.html#SEC730">Open Flags</A>), and <VAR>mode</VAR> is an integer indicating a mask
 | |
| of mode bits to use if the file is created (see section <A HREF="gdb_33.html#SEC731">mode_t Values</A>).
 | |
| See section <A HREF="gdb_33.html#SEC712">open</A>, for details of the open flags and mode values.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`vFile:close: <VAR>fd</VAR>'</SAMP>
 | |
| <DD>Close the open file corresponding to <VAR>fd</VAR> and return 0, or
 | |
| -1 if an error occurs.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`vFile:pread: <VAR>fd</VAR>, <VAR>count</VAR>, <VAR>offset</VAR>'</SAMP>
 | |
| <DD>Read data from the open file corresponding to <VAR>fd</VAR>.  Up to
 | |
| <VAR>count</VAR> bytes will be read from the file, starting at <VAR>offset</VAR>
 | |
| 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
 | |
| <VAR>count</VAR> was zero.
 | |
| <P>
 | |
| 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| <DT><SAMP>`vFile:pwrite: <VAR>fd</VAR>, <VAR>offset</VAR>, <VAR>data</VAR>'</SAMP>
 | |
| <DD>Write <VAR>data</VAR> (a binary buffer) to the open file corresponding
 | |
| to <VAR>fd</VAR>.  Start the write at <VAR>offset</VAR> from the start of the
 | |
| file.  Unlike many <CODE>write</CODE> system calls, there is no
 | |
| separate <VAR>count</VAR> argument; the length of <VAR>data</VAR> in the
 | |
| packet is used.  <SAMP>`vFile:write'</SAMP> returns the number of bytes written,
 | |
| which may be shorter than the length of <VAR>data</VAR>, or -1 if an
 | |
| error occurred.
 | |
| <P>
 | |
| 
 | |
| <DT><SAMP>`vFile:unlink: <VAR>pathname</VAR>'</SAMP>
 | |
| <DD>Delete the file at <VAR>pathname</VAR> on the target.  Return 0,
 | |
| or -1 if an error occurs.  <VAR>pathname</VAR> is a string.
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="Interrupts"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC702"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC701"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC703"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC703"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H2> D.8 Interrupts </H2>
 | |
| <!--docid::SEC702::-->
 | |
| <P>
 | |
| 
 | |
| When a program on the remote target is running, GDB may
 | |
| attempt to interrupt it by sending a <SAMP>`Ctrl-C'</SAMP> or a <CODE>BREAK</CODE>,
 | |
| control of which is specified via GDB's <SAMP>`remotebreak'</SAMP>
 | |
| setting (see  <A HREF="gdb_18.html#set remotebreak">set remotebreak</A>).
 | |
| </P><P>
 | |
| 
 | |
| The precise meaning of <CODE>BREAK</CODE> is defined by the transport
 | |
| mechanism and may, in fact, be undefined.  GDB does
 | |
| not currently define a <CODE>BREAK</CODE> mechanism for any of the network
 | |
| interfaces.
 | |
| </P><P>
 | |
| 
 | |
| <SAMP>`Ctrl-C'</SAMP>, on the other hand, is defined and implemented for all
 | |
| transport mechanisms.  It is represented by sending the single byte
 | |
| <CODE>0x03</CODE> without any of the usual packet overhead described in
 | |
| the Overview section (see section <A HREF="gdb_33.html#SEC695">D.1 Overview</A>).  When a <CODE>0x03</CODE> byte is
 | |
| transmitted as part of a packet, it is considered to be packet data
 | |
| and does <EM>not</EM> represent an interrupt.  E.g., an <SAMP>`X'</SAMP> packet
 | |
| (see  <A HREF="gdb_33.html#X packet">X packet</A>), used for binary downloads, may include an unescaped
 | |
| <CODE>0x03</CODE> as part of its packet.
 | |
| </P><P>
 | |
| 
 | |
| Stubs are not required to recognize these interrupt mechanisms and the
 | |
| precise meaning associated with receipt of the interrupt is
 | |
| implementation defined.  If the stub is successful at interrupting the
 | |
| running program, it is expected that it will send one of the Stop
 | |
| Reply Packets (see section <A HREF="gdb_33.html#SEC697">D.3 Stop Reply Packets</A>) to GDB as a result
 | |
| of successfully stopping the program.  Interrupts received while the
 | |
| program is stopped will be discarded.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="Examples"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC703"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC702"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC704"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H2> D.9 Examples </H2>
 | |
| <!--docid::SEC703::-->
 | |
| <P>
 | |
| 
 | |
| Example sequence of a target being re-started.  Notice how the restart
 | |
| does not get any direct output:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-> <CODE>R00</CODE>
 | |
| <- <CODE>+</CODE>
 | |
| <EM>target restarts</EM>
 | |
| -> <CODE>?</CODE>
 | |
| <- <CODE>+</CODE>
 | |
| <- <CODE>T001:1234123412341234</CODE>
 | |
| -> <CODE>+</CODE>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| Example sequence of a target being stepped by a single instruction:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>-> <CODE>G1445<small>...</small></CODE>
 | |
| <- <CODE>+</CODE>
 | |
| -> <CODE>s</CODE>
 | |
| <- <CODE>+</CODE>
 | |
| <EM>time passes</EM>
 | |
| <- <CODE>T001:1234123412341234</CODE>
 | |
| -> <CODE>+</CODE>
 | |
| -> <CODE>g</CODE>
 | |
| <- <CODE>+</CODE>
 | |
| <- <CODE>1455<small>...</small></CODE>
 | |
| -> <CODE>+</CODE>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| <A NAME="File-I/O Remote Protocol Extension"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC704"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC703"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC705"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC696"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC736"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H2> D.10 File-I/O Remote Protocol Extension </H2>
 | |
| <!--docid::SEC704::-->
 | |
| <P>
 | |
| 
 | |
| <BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC705">D.10.1 File-I/O Overview</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC706">D.10.2 Protocol Basics</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC707">D.10.3 The <CODE>F</CODE> Request Packet</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC708">D.10.4 The <CODE>F</CODE> Reply Packet</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC709">D.10.5 The <SAMP>`Ctrl-C'</SAMP> Message</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC710">D.10.6 Console I/O</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC711">D.10.7 List of Supported Calls</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC723">D.10.8 Protocol-specific Representation of Datatypes</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC729">D.10.9 Constants</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC735">D.10.10 File-I/O Examples</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| </TABLE></BLOCKQUOTE>
 | |
| <P>
 | |
| 
 | |
| <A NAME="File-I/O Overview"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC705"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC704"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC706"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC696"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC704"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC736"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H3> D.10.1 File-I/O Overview </H3>
 | |
| <!--docid::SEC705::-->
 | |
| <P>
 | |
| 
 | |
| The <EM>File I/O remote protocol extension</EM> (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.
 | |
| </P><P>
 | |
| 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| The communication is synchronous.  A system call is possible only when 
 | |
| GDB is waiting for a response from the <SAMP>`C'</SAMP>, <SAMP>`c'</SAMP>, <SAMP>`S'</SAMP> 
 | |
| or <SAMP>`s'</SAMP> 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 
 | |
| (<SAMP>`Ctrl-C'</SAMP>) within GDB.
 | |
| </P><P>
 | |
| 
 | |
| The target's request to perform a host system call does not finish
 | |
| the latest <SAMP>`C'</SAMP>, <SAMP>`c'</SAMP>, <SAMP>`S'</SAMP> or <SAMP>`s'</SAMP> 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.
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>(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
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="Protocol Basics"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC706"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC705"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC707"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC707"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC704"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC736"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H3> D.10.2 Protocol Basics </H3>
 | |
| <!--docid::SEC706::-->
 | |
| <P>
 | |
| 
 | |
| The File-I/O protocol uses the <CODE>F</CODE> 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 <SAMP>`C'</SAMP>, <SAMP>`c'</SAMP>, <SAMP>`S'</SAMP> or <SAMP>`s'</SAMP> packet.
 | |
| This <CODE>F</CODE> packet contains all information needed to allow GDB
 | |
| to call the appropriate host system call:
 | |
| </P><P>
 | |
| 
 | |
| <UL>
 | |
| <LI>
 | |
| A unique identifier for the requested system call.
 | |
| <P>
 | |
| 
 | |
| <LI>
 | |
| 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.
 | |
| <P>
 | |
| 
 | |
| </UL>
 | |
| <P>
 | |
| 
 | |
| At this point, GDB has to perform the following actions.
 | |
| </P><P>
 | |
| 
 | |
| <UL>
 | |
| <LI>
 | |
| 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 <CODE>m</CODE> packet request.  This additional communication has to be
 | |
| expected by the target implementation and is handled as any other <CODE>m</CODE>
 | |
| packet.
 | |
| <P>
 | |
| 
 | |
| <LI>
 | |
| GDB translates all value from protocol representation to host
 | |
| representation as needed.  Datatypes are coerced into the host types.
 | |
| <P>
 | |
| 
 | |
| <LI>
 | |
| GDB calls the system call.
 | |
| <P>
 | |
| 
 | |
| <LI>
 | |
| It then coerces datatypes back to protocol representation.
 | |
| <P>
 | |
| 
 | |
| <LI>
 | |
| 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 <CODE>M</CODE> or <CODE>X</CODE> packet.  This packet has to be expected
 | |
| by the target implementation and is handled as any other <CODE>M</CODE> or <CODE>X</CODE>
 | |
| packet.
 | |
| <P>
 | |
| 
 | |
| </UL>
 | |
| <P>
 | |
| 
 | |
| Eventually GDB replies with another <CODE>F</CODE> packet which contains all
 | |
| necessary information for the target to continue.  This at least contains
 | |
| </P><P>
 | |
| 
 | |
| <UL>
 | |
| <LI>
 | |
| Return value.
 | |
| <P>
 | |
| 
 | |
| <LI>
 | |
| <CODE>errno</CODE>, if has been changed by the system call.
 | |
| <P>
 | |
| 
 | |
| <LI>
 | |
| "Ctrl-C" flag.
 | |
| <P>
 | |
| 
 | |
| </UL>
 | |
| <P>
 | |
| 
 | |
| After having done the needed type and value coercion, the target continues
 | |
| the latest continue or step action.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="The F Request Packet"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC707"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC706"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC708"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC708"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC704"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC736"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H3> D.10.3 The <CODE>F</CODE> Request Packet </H3>
 | |
| <!--docid::SEC707::-->
 | |
| <P>
 | |
| 
 | |
| The <CODE>F</CODE> request packet has the following format:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><SAMP>`F<VAR>call-id</VAR>,<VAR>parameter<small>...</small></VAR>'</SAMP>
 | |
| <DD><P>
 | |
| 
 | |
| <VAR>call-id</VAR> is the identifier to indicate the host system call to be called.
 | |
| This is just the name of the function.
 | |
| </P><P>
 | |
| 
 | |
| <VAR>parameter<small>...</small></VAR> 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 <VAR>call-id</VAR> as a 
 | |
| comma-delimited list.  All values are transmitted in ASCII
 | |
| string representation, pointer/length pairs separated by a slash.
 | |
| </P><P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="The F Reply Packet"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC708"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC707"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC709"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC709"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC704"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC736"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H3> D.10.4 The <CODE>F</CODE> Reply Packet </H3>
 | |
| <!--docid::SEC708::-->
 | |
| <P>
 | |
| 
 | |
| The <CODE>F</CODE> reply packet has the following format:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| 
 | |
| <DT><SAMP>`F<VAR>retcode</VAR>,<VAR>errno</VAR>,<VAR>Ctrl-C flag</VAR>;<VAR>call-specific attachment</VAR>'</SAMP>
 | |
| <DD><P>
 | |
| 
 | |
| <VAR>retcode</VAR> is the return code of the system call as hexadecimal value.
 | |
| </P><P>
 | |
| 
 | |
| <VAR>errno</VAR> is the <CODE>errno</CODE> set by the call, in protocol-specific
 | |
| representation.
 | |
| This parameter can be omitted if the call was successful.
 | |
| </P><P>
 | |
| 
 | |
| <VAR>Ctrl-C flag</VAR> is only sent if the user requested a break.  In this
 | |
| case, <VAR>errno</VAR> must be sent as well, even if the call was successful.
 | |
| The <VAR>Ctrl-C flag</VAR> itself consists of the character <SAMP>`C'</SAMP>:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>F0,0,C
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| or, if the call was interrupted before the host call has been performed:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>F-1,4,C
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| assuming 4 is the protocol-specific representation of <CODE>EINTR</CODE>.
 | |
| </P><P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="The Ctrl-C Message"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC709"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC708"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC710"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC710"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC704"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC736"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H3> D.10.5 The <SAMP>`Ctrl-C'</SAMP> Message </H3>
 | |
| <!--docid::SEC709::-->
 | |
| <P>
 | |
| 
 | |
| If the <SAMP>`Ctrl-C'</SAMP> flag is set in the GDB
 | |
| reply packet (see section <A HREF="gdb_33.html#SEC708">D.10.4 The <CODE>F</CODE> Reply Packet</A>),
 | |
| the target should behave as if it had
 | |
| gotten a break message.  The meaning for the target is "system call
 | |
| interrupted by <CODE>SIGINT</CODE>".  Consequentially, the target should actually stop
 | |
| (as with a break message) and return to GDB with a <CODE>T02</CODE>
 | |
| packet.
 | |
| </P><P>
 | |
| 
 | |
| It's important for the target to know in which
 | |
| state the system call was interrupted.  There are two possible cases:
 | |
| </P><P>
 | |
| 
 | |
| <UL>
 | |
| <LI>
 | |
| The system call hasn't been performed on the host yet.
 | |
| <P>
 | |
| 
 | |
| <LI>
 | |
| The system call on the host has been finished.
 | |
| <P>
 | |
| 
 | |
| </UL>
 | |
| <P>
 | |
| 
 | |
| These two states can be distinguished by the target by the value of the
 | |
| returned <CODE>errno</CODE>.  If it's the protocol representation of <CODE>EINTR</CODE>, the system
 | |
| call hasn't been performed.  This is equivalent to the <CODE>EINTR</CODE> 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.
 | |
| </P><P>
 | |
| 
 | |
| GDB must behave reliably.  If the system call has not been called
 | |
| yet, GDB may send the <CODE>F</CODE> reply immediately, setting <CODE>EINTR</CODE> as
 | |
| <CODE>errno</CODE> 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 <CODE>M</CODE> or <CODE>X</CODE> packets as necessary.
 | |
| The <CODE>F</CODE> packet may only be sent when either nothing has happened
 | |
| or the full action has been completed.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="Console I/O"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC710"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC709"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC711"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC711"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC704"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC736"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H3> D.10.6 Console I/O </H3>
 | |
| <!--docid::SEC710::-->
 | |
| <P>
 | |
| 
 | |
| 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
 | |
| (<CODE>write(1, <small>...</small>)</CODE> or <CODE>write(2, <small>...</small>)</CODE>).  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:
 | |
| </P><P>
 | |
| 
 | |
| <UL>
 | |
| <LI>
 | |
| The user types <KBD>Ctrl-c</KBD>.  The behaviour is as explained above, and the
 | |
| <CODE>read</CODE>
 | |
| system call is treated as finished.
 | |
| <P>
 | |
| 
 | |
| <LI>
 | |
| The user presses <KBD>RET</KBD>.  This is treated as end of input with a trailing
 | |
| newline.
 | |
| <P>
 | |
| 
 | |
| <LI>
 | |
| The user types <KBD>Ctrl-d</KBD>.  This is treated as end of input.  No trailing
 | |
| character (neither newline nor <SAMP>`Ctrl-D'</SAMP>) is appended to the input.
 | |
| <P>
 | |
| 
 | |
| </UL>
 | |
| <P>
 | |
| 
 | |
| If the user has typed more characters than fit in the buffer given to
 | |
| the <CODE>read</CODE> call, the trailing characters are buffered in GDB until
 | |
| either another <CODE>read(0, <small>...</small>)</CODE> is requested by the target, or debugging
 | |
| is stopped at the user's request.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="List of Supported Calls"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC711"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC710"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC712"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC723"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC704"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC723"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H3> D.10.7 List of Supported Calls </H3>
 | |
| <!--docid::SEC711::-->
 | |
| <P>
 | |
| 
 | |
| <BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC712">open</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC713">close</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC714">read</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC715">write</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC716">lseek</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC717">rename</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC718">unlink</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC719">stat/fstat</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC720">gettimeofday</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC721">isatty</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC722">system</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| </TABLE></BLOCKQUOTE>
 | |
| <P>
 | |
| 
 | |
| <A NAME="open"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC712"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC711"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC713"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> open </H4>
 | |
| <!--docid::SEC712::-->
 | |
| <P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT>Synopsis:
 | |
| <DD><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>int open(const char *pathname, int flags);
 | |
| int open(const char *pathname, int flags, mode_t mode);
 | |
| </FONT></pre></td></tr></table><P>
 | |
| 
 | |
| <DT>Request:
 | |
| <DD><SAMP>`Fopen,<VAR>pathptr</VAR>/<VAR>len</VAR>,<VAR>flags</VAR>,<VAR>mode</VAR>'</SAMP>
 | |
| <P>
 | |
| 
 | |
| <VAR>flags</VAR> is the bitwise <CODE>OR</CODE> of the following values:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>O_CREAT</CODE>
 | |
| <DD>If the file does not exist it will be created.  The host
 | |
| rules apply as far as file ownership and time stamps
 | |
| are concerned.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>O_EXCL</CODE>
 | |
| <DD>When used with <CODE>O_CREAT</CODE>, if the file already exists it is
 | |
| an error and open() fails.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>O_TRUNC</CODE>
 | |
| <DD>If the file already exists and the open mode allows
 | |
| writing (<CODE>O_RDWR</CODE> or <CODE>O_WRONLY</CODE> is given) it will be
 | |
| truncated to zero length.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>O_APPEND</CODE>
 | |
| <DD>The file is opened in append mode.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>O_RDONLY</CODE>
 | |
| <DD>The file is opened for reading only.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>O_WRONLY</CODE>
 | |
| <DD>The file is opened for writing only.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>O_RDWR</CODE>
 | |
| <DD>The file is opened for reading and writing.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| Other bits are silently ignored.
 | |
| </P><P>
 | |
| 
 | |
| <VAR>mode</VAR> is the bitwise <CODE>OR</CODE> of the following values:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>S_IRUSR</CODE>
 | |
| <DD>User has read permission.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>S_IWUSR</CODE>
 | |
| <DD>User has write permission.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>S_IRGRP</CODE>
 | |
| <DD>Group has read permission.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>S_IWGRP</CODE>
 | |
| <DD>Group has write permission.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>S_IROTH</CODE>
 | |
| <DD>Others have read permission.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>S_IWOTH</CODE>
 | |
| <DD>Others have write permission.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| Other bits are silently ignored.
 | |
| </P><P>
 | |
| 
 | |
| <DT>Return value:
 | |
| <DD><CODE>open</CODE> returns the new file descriptor or -1 if an error
 | |
| occurred.
 | |
| <P>
 | |
| 
 | |
| <DT>Errors:
 | |
| <DD><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>EEXIST</CODE>
 | |
| <DD><VAR>pathname</VAR> already exists and <CODE>O_CREAT</CODE> and <CODE>O_EXCL</CODE> were used.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EISDIR</CODE>
 | |
| <DD><VAR>pathname</VAR> refers to a directory.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EACCES</CODE>
 | |
| <DD>The requested access is not allowed.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENAMETOOLONG</CODE>
 | |
| <DD><VAR>pathname</VAR> was too long.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENOENT</CODE>
 | |
| <DD>A directory component in <VAR>pathname</VAR> does not exist.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENODEV</CODE>
 | |
| <DD><VAR>pathname</VAR> refers to a device, pipe, named pipe or socket.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EROFS</CODE>
 | |
| <DD><VAR>pathname</VAR> refers to a file on a read-only filesystem and
 | |
| write access was requested.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EFAULT</CODE>
 | |
| <DD><VAR>pathname</VAR> is an invalid pointer value.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENOSPC</CODE>
 | |
| <DD>No space on device to create the file.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EMFILE</CODE>
 | |
| <DD>The process already has the maximum number of files open.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENFILE</CODE>
 | |
| <DD>The limit on the total number of files open on the system
 | |
| has been reached.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EINTR</CODE>
 | |
| <DD>The call was interrupted by the user.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="close"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC713"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC712"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC714"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> close </H4>
 | |
| <!--docid::SEC713::-->
 | |
| <P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT>Synopsis:
 | |
| <DD><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>int close(int fd);
 | |
| </FONT></pre></td></tr></table><P>
 | |
| 
 | |
| <DT>Request:
 | |
| <DD><SAMP>`Fclose,<VAR>fd</VAR>'</SAMP>
 | |
| <P>
 | |
| 
 | |
| <DT>Return value:
 | |
| <DD><CODE>close</CODE> returns zero on success, or -1 if an error occurred.
 | |
| <P>
 | |
| 
 | |
| <DT>Errors:
 | |
| <DD><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>EBADF</CODE>
 | |
| <DD><VAR>fd</VAR> isn't a valid open file descriptor.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EINTR</CODE>
 | |
| <DD>The call was interrupted by the user.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="read"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC714"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC713"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC715"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> read </H4>
 | |
| <!--docid::SEC714::-->
 | |
| <P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT>Synopsis:
 | |
| <DD><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>int read(int fd, void *buf, unsigned int count);
 | |
| </FONT></pre></td></tr></table><P>
 | |
| 
 | |
| <DT>Request:
 | |
| <DD><SAMP>`Fread,<VAR>fd</VAR>,<VAR>bufptr</VAR>,<VAR>count</VAR>'</SAMP>
 | |
| <P>
 | |
| 
 | |
| <DT>Return value:
 | |
| <DD>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.
 | |
| <P>
 | |
| 
 | |
| <DT>Errors:
 | |
| <DD><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>EBADF</CODE>
 | |
| <DD><VAR>fd</VAR> is not a valid file descriptor or is not open for
 | |
| reading.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EFAULT</CODE>
 | |
| <DD><VAR>bufptr</VAR> is an invalid pointer value.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EINTR</CODE>
 | |
| <DD>The call was interrupted by the user.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="write"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC715"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC714"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC716"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> write </H4>
 | |
| <!--docid::SEC715::-->
 | |
| <P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT>Synopsis:
 | |
| <DD><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>int write(int fd, const void *buf, unsigned int count);
 | |
| </FONT></pre></td></tr></table><P>
 | |
| 
 | |
| <DT>Request:
 | |
| <DD><SAMP>`Fwrite,<VAR>fd</VAR>,<VAR>bufptr</VAR>,<VAR>count</VAR>'</SAMP>
 | |
| <P>
 | |
| 
 | |
| <DT>Return value:
 | |
| <DD>On success, the number of bytes written are returned.
 | |
| Zero indicates nothing was written.  On error, -1
 | |
| is returned.
 | |
| <P>
 | |
| 
 | |
| <DT>Errors:
 | |
| <DD><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>EBADF</CODE>
 | |
| <DD><VAR>fd</VAR> is not a valid file descriptor or is not open for
 | |
| writing.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EFAULT</CODE>
 | |
| <DD><VAR>bufptr</VAR> is an invalid pointer value.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EFBIG</CODE>
 | |
| <DD>An attempt was made to write a file that exceeds the
 | |
| host-specific maximum file size allowed.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENOSPC</CODE>
 | |
| <DD>No space on device to write the data.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EINTR</CODE>
 | |
| <DD>The call was interrupted by the user.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="lseek"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC716"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC715"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC717"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> lseek </H4>
 | |
| <!--docid::SEC716::-->
 | |
| <P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT>Synopsis:
 | |
| <DD><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>long lseek (int fd, long offset, int flag);
 | |
| </FONT></pre></td></tr></table><P>
 | |
| 
 | |
| <DT>Request:
 | |
| <DD><SAMP>`Flseek,<VAR>fd</VAR>,<VAR>offset</VAR>,<VAR>flag</VAR>'</SAMP>
 | |
| <P>
 | |
| 
 | |
| <VAR>flag</VAR> is one of:
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>SEEK_SET</CODE>
 | |
| <DD>The offset is set to <VAR>offset</VAR> bytes.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>SEEK_CUR</CODE>
 | |
| <DD>The offset is set to its current location plus <VAR>offset</VAR>
 | |
| bytes.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>SEEK_END</CODE>
 | |
| <DD>The offset is set to the size of the file plus <VAR>offset</VAR>
 | |
| bytes.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <DT>Return value:
 | |
| <DD>On success, the resulting unsigned offset in bytes from
 | |
| the beginning of the file is returned.  Otherwise, a
 | |
| value of -1 is returned.
 | |
| <P>
 | |
| 
 | |
| <DT>Errors:
 | |
| <DD><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>EBADF</CODE>
 | |
| <DD><VAR>fd</VAR> is not a valid open file descriptor.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ESPIPE</CODE>
 | |
| <DD><VAR>fd</VAR> is associated with the GDB console.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EINVAL</CODE>
 | |
| <DD><VAR>flag</VAR> is not a proper value.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EINTR</CODE>
 | |
| <DD>The call was interrupted by the user.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="rename"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC717"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC716"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC718"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> rename </H4>
 | |
| <!--docid::SEC717::-->
 | |
| <P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT>Synopsis:
 | |
| <DD><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>int rename(const char *oldpath, const char *newpath);
 | |
| </FONT></pre></td></tr></table><P>
 | |
| 
 | |
| <DT>Request:
 | |
| <DD><SAMP>`Frename,<VAR>oldpathptr</VAR>/<VAR>len</VAR>,<VAR>newpathptr</VAR>/<VAR>len</VAR>'</SAMP>
 | |
| <P>
 | |
| 
 | |
| <DT>Return value:
 | |
| <DD>On success, zero is returned.  On error, -1 is returned.
 | |
| <P>
 | |
| 
 | |
| <DT>Errors:
 | |
| <DD><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>EISDIR</CODE>
 | |
| <DD><VAR>newpath</VAR> is an existing directory, but <VAR>oldpath</VAR> is not a
 | |
| directory.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EEXIST</CODE>
 | |
| <DD><VAR>newpath</VAR> is a non-empty directory.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EBUSY</CODE>
 | |
| <DD><VAR>oldpath</VAR> or <VAR>newpath</VAR> is a directory that is in use by some
 | |
| process.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EINVAL</CODE>
 | |
| <DD>An attempt was made to make a directory a subdirectory
 | |
| of itself.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENOTDIR</CODE>
 | |
| <DD>A  component used as a directory in <VAR>oldpath</VAR> or new
 | |
| path is not a directory.  Or <VAR>oldpath</VAR> is a directory
 | |
| and <VAR>newpath</VAR> exists but is not a directory.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EFAULT</CODE>
 | |
| <DD><VAR>oldpathptr</VAR> or <VAR>newpathptr</VAR> are invalid pointer values.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EACCES</CODE>
 | |
| <DD>No access to the file or the path of the file.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENAMETOOLONG</CODE>
 | |
| <DD><P>
 | |
| 
 | |
| <VAR>oldpath</VAR> or <VAR>newpath</VAR> was too long.
 | |
| </P><P>
 | |
| 
 | |
| <DT><CODE>ENOENT</CODE>
 | |
| <DD>A directory component in <VAR>oldpath</VAR> or <VAR>newpath</VAR> does not exist.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EROFS</CODE>
 | |
| <DD>The file is on a read-only filesystem.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENOSPC</CODE>
 | |
| <DD>The device containing the file has no room for the new
 | |
| directory entry.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EINTR</CODE>
 | |
| <DD>The call was interrupted by the user.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="unlink"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC718"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC717"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC719"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> unlink </H4>
 | |
| <!--docid::SEC718::-->
 | |
| <P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT>Synopsis:
 | |
| <DD><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>int unlink(const char *pathname);
 | |
| </FONT></pre></td></tr></table><P>
 | |
| 
 | |
| <DT>Request:
 | |
| <DD><SAMP>`Funlink,<VAR>pathnameptr</VAR>/<VAR>len</VAR>'</SAMP>
 | |
| <P>
 | |
| 
 | |
| <DT>Return value:
 | |
| <DD>On success, zero is returned.  On error, -1 is returned.
 | |
| <P>
 | |
| 
 | |
| <DT>Errors:
 | |
| <DD><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>EACCES</CODE>
 | |
| <DD>No access to the file or the path of the file.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EPERM</CODE>
 | |
| <DD>The system does not allow unlinking of directories.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EBUSY</CODE>
 | |
| <DD>The file <VAR>pathname</VAR> cannot be unlinked because it's
 | |
| being used by another process.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EFAULT</CODE>
 | |
| <DD><VAR>pathnameptr</VAR> is an invalid pointer value.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENAMETOOLONG</CODE>
 | |
| <DD><VAR>pathname</VAR> was too long.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENOENT</CODE>
 | |
| <DD>A directory component in <VAR>pathname</VAR> does not exist.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENOTDIR</CODE>
 | |
| <DD>A component of the path is not a directory.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EROFS</CODE>
 | |
| <DD>The file is on a read-only filesystem.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EINTR</CODE>
 | |
| <DD>The call was interrupted by the user.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="stat/fstat"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC719"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC718"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC720"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> stat/fstat </H4>
 | |
| <!--docid::SEC719::-->
 | |
| <P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT>Synopsis:
 | |
| <DD><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>int stat(const char *pathname, struct stat *buf);
 | |
| int fstat(int fd, struct stat *buf);
 | |
| </FONT></pre></td></tr></table><P>
 | |
| 
 | |
| <DT>Request:
 | |
| <DD><SAMP>`Fstat,<VAR>pathnameptr</VAR>/<VAR>len</VAR>,<VAR>bufptr</VAR>'</SAMP><BR>
 | |
| <SAMP>`Ffstat,<VAR>fd</VAR>,<VAR>bufptr</VAR>'</SAMP>
 | |
| <P>
 | |
| 
 | |
| <DT>Return value:
 | |
| <DD>On success, zero is returned.  On error, -1 is returned.
 | |
| <P>
 | |
| 
 | |
| <DT>Errors:
 | |
| <DD><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>EBADF</CODE>
 | |
| <DD><VAR>fd</VAR> is not a valid open file.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENOENT</CODE>
 | |
| <DD>A directory component in <VAR>pathname</VAR> does not exist or the
 | |
| path is an empty string.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENOTDIR</CODE>
 | |
| <DD>A component of the path is not a directory.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EFAULT</CODE>
 | |
| <DD><VAR>pathnameptr</VAR> is an invalid pointer value.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EACCES</CODE>
 | |
| <DD>No access to the file or the path of the file.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>ENAMETOOLONG</CODE>
 | |
| <DD><VAR>pathname</VAR> was too long.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EINTR</CODE>
 | |
| <DD>The call was interrupted by the user.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="gettimeofday"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC720"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC719"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC721"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> gettimeofday </H4>
 | |
| <!--docid::SEC720::-->
 | |
| <P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT>Synopsis:
 | |
| <DD><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>int gettimeofday(struct timeval *tv, void *tz);
 | |
| </FONT></pre></td></tr></table><P>
 | |
| 
 | |
| <DT>Request:
 | |
| <DD><SAMP>`Fgettimeofday,<VAR>tvptr</VAR>,<VAR>tzptr</VAR>'</SAMP>
 | |
| <P>
 | |
| 
 | |
| <DT>Return value:
 | |
| <DD>On success, 0 is returned, -1 otherwise.
 | |
| <P>
 | |
| 
 | |
| <DT>Errors:
 | |
| <DD><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>EINVAL</CODE>
 | |
| <DD><VAR>tz</VAR> is a non-NULL pointer.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>EFAULT</CODE>
 | |
| <DD><VAR>tvptr</VAR> and/or <VAR>tzptr</VAR> is an invalid pointer value.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="isatty"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC721"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC720"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC722"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> isatty </H4>
 | |
| <!--docid::SEC721::-->
 | |
| <P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT>Synopsis:
 | |
| <DD><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>int isatty(int fd);
 | |
| </FONT></pre></td></tr></table><P>
 | |
| 
 | |
| <DT>Request:
 | |
| <DD><SAMP>`Fisatty,<VAR>fd</VAR>'</SAMP>
 | |
| <P>
 | |
| 
 | |
| <DT>Return value:
 | |
| <DD>Returns 1 if <VAR>fd</VAR> refers to the GDB console, 0 otherwise.
 | |
| <P>
 | |
| 
 | |
| <DT>Errors:
 | |
| <DD><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>EINTR</CODE>
 | |
| <DD>The call was interrupted by the user.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| Note that the <CODE>isatty</CODE> 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 <CODE>ioctl</CODE> and would be more complex than
 | |
| needed.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="system"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC722"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC721"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC723"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> system </H4>
 | |
| <!--docid::SEC722::-->
 | |
| <P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT>Synopsis:
 | |
| <DD><TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>int system(const char *command);
 | |
| </FONT></pre></td></tr></table><P>
 | |
| 
 | |
| <DT>Request:
 | |
| <DD><SAMP>`Fsystem,<VAR>commandptr</VAR>/<VAR>len</VAR>'</SAMP>
 | |
| <P>
 | |
| 
 | |
| <DT>Return value:
 | |
| <DD>If <VAR>len</VAR> is zero, the return value indicates whether a shell is
 | |
| available.  A zero return value indicates a shell is not available.
 | |
| For non-zero <VAR>len</VAR>, 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 <CODE>system</CODE>
 | |
| return value by calling <CODE>WEXITSTATUS(retval)</CODE>.  In case
 | |
| <TT>`/bin/sh'</TT> could not be executed, 127 is returned.
 | |
| <P>
 | |
| 
 | |
| <DT>Errors:
 | |
| <DD><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>EINTR</CODE>
 | |
| <DD>The call was interrupted by the user.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| GDB takes over the full task of calling the necessary host calls 
 | |
| to perform the <CODE>system</CODE> call.  The return value of <CODE>system</CODE> 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.
 | |
| </P><P>
 | |
| 
 | |
| Due to security concerns, the <CODE>system</CODE> call is by default refused
 | |
| by GDB.  The user has to allow this call explicitly with the
 | |
| <CODE>set remote system-call-allowed 1</CODE> command.
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| <DT><CODE>set remote system-call-allowed</CODE>
 | |
| <DD><A NAME="IDX1652"></A>
 | |
| Control whether to allow the <CODE>system</CODE> calls in the File I/O
 | |
| protocol for the remote target.  The default is zero (disabled).
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>show remote system-call-allowed</CODE>
 | |
| <DD><A NAME="IDX1653"></A>
 | |
| Show whether the <CODE>system</CODE> calls are allowed in the File I/O
 | |
| protocol.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| <A NAME="Protocol-specific Representation of Datatypes"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC723"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC722"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC724"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC729"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC704"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC729"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H3> D.10.8 Protocol-specific Representation of Datatypes </H3>
 | |
| <!--docid::SEC723::-->
 | |
| <P>
 | |
| 
 | |
| <BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC724">Integral Datatypes</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC725">Pointer Values</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC726">Memory Transfer</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC727">struct stat</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC728">struct timeval</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| </TABLE></BLOCKQUOTE>
 | |
| <P>
 | |
| 
 | |
| <A NAME="Integral Datatypes"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC724"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC723"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC725"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> Integral Datatypes </H4>
 | |
| <!--docid::SEC724::-->
 | |
| <P>
 | |
| 
 | |
| The integral datatypes used in the system calls are <CODE>int</CODE>, 
 | |
| <CODE>unsigned int</CODE>, <CODE>long</CODE>, <CODE>unsigned long</CODE>,
 | |
| <CODE>mode_t</CODE>, and <CODE>time_t</CODE>.  
 | |
| </P><P>
 | |
| 
 | |
| <CODE>int</CODE>, <CODE>unsigned int</CODE>, <CODE>mode_t</CODE> and <CODE>time_t</CODE> are
 | |
| implemented as 32 bit values in this protocol.
 | |
| </P><P>
 | |
| 
 | |
| <CODE>long</CODE> and <CODE>unsigned long</CODE> are implemented as 64 bit types.
 | |
| </P><P>
 | |
| 
 | |
| See section <A HREF="gdb_33.html#SEC734">Limits</A>, for corresponding MIN and MAX values (similar to those
 | |
| in <TT>`limits.h'</TT>) to allow range checking on host and target.
 | |
| </P><P>
 | |
| 
 | |
| <CODE>time_t</CODE> datatypes are defined as seconds since the Epoch.
 | |
| </P><P>
 | |
| 
 | |
| All integral datatypes transferred as part of a memory read or write of a
 | |
| structured datatype e.g. a <CODE>struct stat</CODE> have to be given in big endian
 | |
| byte order.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="Pointer Values"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC725"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC724"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC726"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> Pointer Values </H4>
 | |
| <!--docid::SEC725::-->
 | |
| <P>
 | |
| 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><CODE>1aaf/12</CODE>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| 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 <CODE>"hello world"</CODE>
 | |
| at address 0x123456 is transmitted as
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><CODE>123456/d</CODE>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| <A NAME="Memory Transfer"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC726"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC725"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC727"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> Memory Transfer </H4>
 | |
| <!--docid::SEC726::-->
 | |
| <P>
 | |
| 
 | |
| Structured data which is transferred using a memory read or write (for
 | |
| example, a <CODE>struct stat</CODE>) 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 <CODE>F</CODE> 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="struct stat"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC727"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC726"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC728"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> struct stat </H4>
 | |
| <!--docid::SEC727::-->
 | |
| <P>
 | |
| 
 | |
| The buffer of type <CODE>struct stat</CODE> used by the target and GDB 
 | |
| is defined as follows:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>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 */
 | |
| };
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| The integral datatypes conform to the definitions given in the
 | |
| appropriate section (see <A HREF="gdb_33.html#SEC724">Integral Datatypes</A>, for details) so this
 | |
| structure is of size 64 bytes.
 | |
| </P><P>
 | |
| 
 | |
| The values of several fields have a restricted meaning and/or
 | |
| range of values.
 | |
| </P><P>
 | |
| 
 | |
| <DL COMPACT>
 | |
| 
 | |
| <DT><CODE>st_dev</CODE>
 | |
| <DD>A value of 0 represents a file, 1 the console.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>st_ino</CODE>
 | |
| <DD>No valid meaning for the target.  Transmitted unchanged.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>st_mode</CODE>
 | |
| <DD>Valid mode bits are described in <A HREF="gdb_33.html#SEC729">D.10.9 Constants</A>.  Any other
 | |
| bits have currently no meaning for the target.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>st_uid</CODE>
 | |
| <DD><DT><CODE>st_gid</CODE>
 | |
| <DD><DT><CODE>st_rdev</CODE>
 | |
| <DD>No valid meaning for the target.  Transmitted unchanged.
 | |
| <P>
 | |
| 
 | |
| <DT><CODE>st_atime</CODE>
 | |
| <DD><DT><CODE>st_mtime</CODE>
 | |
| <DD><DT><CODE>st_ctime</CODE>
 | |
| <DD>These values have a host and file system dependent
 | |
| accuracy.  Especially on Windows hosts, the file system may not
 | |
| support exact timing values.
 | |
| </DL>
 | |
| <P>
 | |
| 
 | |
| The target gets a <CODE>struct stat</CODE> of the above representation and is
 | |
| responsible for coercing it to the target representation before
 | |
| continuing.
 | |
| </P><P>
 | |
| 
 | |
| Note that due to size differences between the host, target, and protocol
 | |
| representations of <CODE>struct stat</CODE> members, these members could eventually
 | |
| get truncated on the target.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="struct timeval"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC728"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC727"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC729"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> struct timeval </H4>
 | |
| <!--docid::SEC728::-->
 | |
| <P>
 | |
| 
 | |
| The buffer of type <CODE>struct timeval</CODE> used by the File-I/O protocol
 | |
| is defined as follows:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>struct timeval {
 | |
|     time_t tv_sec;  /* second */
 | |
|     long   tv_usec; /* microsecond */
 | |
| };
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| The integral datatypes conform to the definitions given in the
 | |
| appropriate section (see <A HREF="gdb_33.html#SEC724">Integral Datatypes</A>, for details) so this
 | |
| structure is of size 8 bytes.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="Constants"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC729"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC728"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC730"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC696"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC704"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC735"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H3> D.10.9 Constants </H3>
 | |
| <!--docid::SEC729::-->
 | |
| <P>
 | |
| 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| <BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> 
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC730">Open Flags</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC731">mode_t Values</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC732">Errno Values</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC733">Lseek Flags</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| <TR><TD ALIGN="left" VALIGN="TOP"><A HREF="gdb_33.html#SEC734">Limits</A></TD><TD>  </TD><TD ALIGN="left" VALIGN="TOP"></TD></TR>
 | |
| </TABLE></BLOCKQUOTE>
 | |
| <P>
 | |
| 
 | |
| <A NAME="Open Flags"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC730"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC729"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC731"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> Open Flags </H4>
 | |
| <!--docid::SEC730::-->
 | |
| <P>
 | |
| 
 | |
| All values are given in hexadecimal representation.
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>  O_RDONLY        0x0
 | |
|   O_WRONLY        0x1
 | |
|   O_RDWR          0x2
 | |
|   O_APPEND        0x8
 | |
|   O_CREAT       0x200
 | |
|   O_TRUNC       0x400
 | |
|   O_EXCL        0x800
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| <A NAME="mode_t Values"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC731"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC730"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC732"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> mode_t Values </H4>
 | |
| <!--docid::SEC731::-->
 | |
| <P>
 | |
| 
 | |
| All values are given in octal representation.
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>  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
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| <A NAME="Errno Values"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC732"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC731"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC733"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> Errno Values </H4>
 | |
| <!--docid::SEC732::-->
 | |
| <P>
 | |
| 
 | |
| All values are given in decimal representation.
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>  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
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
|   <CODE>EUNKNOWN</CODE> is used as a fallback error value if a host system returns
 | |
|   any error value not in the list of supported error numbers.
 | |
| </P><P>
 | |
| 
 | |
| <A NAME="Lseek Flags"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC733"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC732"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC734"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> Lseek Flags </H4>
 | |
| <!--docid::SEC733::-->
 | |
| <P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>  SEEK_SET      0
 | |
|   SEEK_CUR      1
 | |
|   SEEK_END      2
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| <A NAME="Limits"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC734"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC733"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC735"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H4> Limits </H4>
 | |
| <!--docid::SEC734::-->
 | |
| <P>
 | |
| 
 | |
| All values are given in decimal representation.
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>  INT_MIN       -2147483648
 | |
|   INT_MAX        2147483647
 | |
|   UINT_MAX       4294967295
 | |
|   LONG_MIN      -9223372036854775808
 | |
|   LONG_MAX       9223372036854775807
 | |
|   ULONG_MAX      18446744073709551615
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| <A NAME="File-I/O Examples"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC735"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC734"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC736"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC706"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC704"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC736"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H3> D.10.10 File-I/O Examples </H3>
 | |
| <!--docid::SEC735::-->
 | |
| <P>
 | |
| 
 | |
| Example sequence of a write call, file descriptor 3, buffer is at target
 | |
| address 0x1234, 6 bytes should be written:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><- <CODE>Fwrite,3,1234,6</CODE>
 | |
| <EM>request memory read from target</EM>
 | |
| -> <CODE>m1234,6</CODE>
 | |
| <- XXXXXX
 | |
| <EM>return "6 bytes written"</EM>
 | |
| -> <CODE>F6</CODE>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| Example sequence of a read call, file descriptor 3, buffer is at target
 | |
| address 0x1234, 6 bytes should be read:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><- <CODE>Fread,3,1234,6</CODE>
 | |
| <EM>request memory write to target</EM>
 | |
| -> <CODE>X1234,6:XXXXXX</CODE>
 | |
| <EM>return "6 bytes read"</EM>
 | |
| -> <CODE>F6</CODE>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| Example sequence of a read call, call fails on the host due to invalid
 | |
| file descriptor (<CODE>EBADF</CODE>):
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><- <CODE>Fread,3,1234,6</CODE>
 | |
| -> <CODE>F-1,9</CODE>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| Example sequence of a read call, user presses <KBD>Ctrl-c</KBD> before syscall on
 | |
| host is called:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><- <CODE>Fread,3,1234,6</CODE>
 | |
| -> <CODE>F-1,4,C</CODE>
 | |
| <- <CODE>T02</CODE>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| Example sequence of a read call, user presses <KBD>Ctrl-c</KBD> after syscall on
 | |
| host is called:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><- <CODE>Fread,3,1234,6</CODE>
 | |
| -> <CODE>X1234,6:XXXXXX</CODE>
 | |
| <- <CODE>T02</CODE>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| <A NAME="Library List Format"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC736"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC735"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC737"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC696"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H2> D.11 Library List Format </H2>
 | |
| <!--docid::SEC736::-->
 | |
| <P>
 | |
| 
 | |
| On some platforms, a dynamic loader (e.g. <TT>`ld.so'</TT>) 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 <SAMP>`qXfer:libraries:read'</SAMP>
 | |
| packet (see  <A HREF="gdb_33.html#qXfer library list read">qXfer library list read</A>) instead.  The remote stub
 | |
| queries the target's operating system and reports which libraries
 | |
| are loaded.
 | |
| </P><P>
 | |
| 
 | |
| The <SAMP>`qXfer:libraries:read'</SAMP> packet returns an XML document which
 | |
| lists loaded libraries and their offsets.  Each library has an
 | |
| associated name and one or more segment base addresses, which report
 | |
| where the library was loaded in memory.  The segment bases are start
 | |
| addresses, not relocation offsets; they do not depend on the library's
 | |
| link-time base addresses.
 | |
| </P><P>
 | |
| 
 | |
| GDB must be linked with the Expat library to support XML
 | |
| library lists.  See  <A HREF="gdb_31.html#Expat">Expat</A>.
 | |
| </P><P>
 | |
| 
 | |
| A simple memory map, with one loaded library relocated by a single
 | |
| offset, looks like this:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><library-list>
 | |
|   <library name="/lib/libc.so.6">
 | |
|     <segment address="0x10000000"/>
 | |
|   </library>
 | |
| </library-list>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| The format of a library list is described by this DTD:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><!-- library-list: Root element with versioning -->
 | |
| <!ELEMENT library-list  (library)*>
 | |
| <!ATTLIST library-list  version CDATA   #FIXED  "1.0">
 | |
| <!ELEMENT library       (segment)*>
 | |
| <!ATTLIST library       name    CDATA   #REQUIRED>
 | |
| <!ELEMENT segment       EMPTY>
 | |
| <!ATTLIST segment       address CDATA   #REQUIRED>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| <A NAME="Memory Map Format"></A>
 | |
| <HR SIZE="6">
 | |
| <A NAME="SEC737"></A>
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC736"> < </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> > </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC696"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC694"> Up </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <H2> D.12 Memory Map Format </H2>
 | |
| <!--docid::SEC737::-->
 | |
| <P>
 | |
| 
 | |
| 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.
 | |
| </P><P>
 | |
| 
 | |
| The memory map is obtained using the <SAMP>`qXfer:memory-map:read'</SAMP>
 | |
| (see  <A HREF="gdb_33.html#qXfer memory map read">qXfer memory map read</A>) packet and is an XML document that
 | |
| lists memory regions.
 | |
| </P><P>
 | |
| 
 | |
| GDB must be linked with the Expat library to support XML
 | |
| memory maps.  See  <A HREF="gdb_31.html#Expat">Expat</A>.
 | |
| </P><P>
 | |
| 
 | |
| The top-level structure of the document is shown below:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><?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>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| Each region can be either:
 | |
| </P><P>
 | |
| 
 | |
| <UL>
 | |
| 
 | |
| <LI>
 | |
| A region of RAM starting at <VAR>addr</VAR> and extending for <VAR>length</VAR>
 | |
| bytes from there:
 | |
| <P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><memory type="ram" start="<VAR>addr</VAR>" length="<VAR>length</VAR>"/>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| <LI>
 | |
| A region of read-only memory:
 | |
| <P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><memory type="rom" start="<VAR>addr</VAR>" length="<VAR>length</VAR>"/>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| <LI>
 | |
| A region of flash memory, with erasure blocks <VAR>blocksize</VAR>
 | |
| bytes in length:
 | |
| <P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><memory type="flash" start="<VAR>addr</VAR>" length="<VAR>length</VAR>">
 | |
|   <property name="blocksize"><VAR>blocksize</VAR></property>
 | |
| </memory>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| </UL>
 | |
| <P>
 | |
| 
 | |
| Regions must not overlap.  GDB assumes that areas of memory not covered
 | |
| by the memory map are RAM, and uses the ordinary <SAMP>`M'</SAMP> and <SAMP>`X'</SAMP>
 | |
| packets to write to addresses in such ranges.
 | |
| </P><P>
 | |
| 
 | |
| The formal DTD for memory map format is given below:
 | |
| </P><P>
 | |
| 
 | |
| <TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre><!-- ................................................... -->
 | |
| <!-- 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>
 | |
| </FONT></pre></td></tr></table></P><P>
 | |
| 
 | |
| <A NAME="Agent Expressions"></A>
 | |
| <HR SIZE="6">
 | |
| <TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0>
 | |
| <TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_33.html#SEC696"> << </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_34.html#SEC738"> >> </A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">   <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb.html#SEC_Top">Top</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_toc.html#SEC_Contents">Contents</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_38.html#SEC764">Index</A>]</TD>
 | |
| <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="gdb_abt.html#SEC_About"> ? </A>]</TD>
 | |
| </TR></TABLE>
 | |
| <BR>  
 | |
| <FONT SIZE="-1">
 | |
| 
 | |
| <address>
 | |
| 
 | |
| <p>Please send FSF & GNU inquiries & questions to <a
 | |
| href="mailto:gnu@gnu.org">gnu@gnu.org</a>.  There are also <a
 | |
| href="http://www.gnu.org/home.html#ContactInfo">other ways to
 | |
| contact</a> the FSF.</p>
 | |
| 
 | |
| <p>These pages are maintained by <a
 | |
| href="http://www.gnu.org/software/gdb/">the GDB developers</a>.</p>
 | |
| 
 | |
| <p>Copyright Free Software Foundation, Inc., 59 Temple Place - Suite
 | |
| 330, Boston, MA 02111, USA.</p>
 | |
| 
 | |
| <p>Verbatim copying and distribution of this entire article is
 | |
| permitted in any medium, provided this notice is preserved.</p>
 | |
| 
 | |
| </address>
 | |
| 
 | |
| This document was generated
 | |
| by <I>GDB Administrator</I> on <I>March, 27  2008</I>
 | |
| using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
 | |
| "><I>texi2html</I></A>
 | |
| 
 | |
| </BODY>
 | |
| </HTML>
 |