hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2021 Free Software Foundation, Inc.
 
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with the
Invariant Sections being "Free Software" and "Free Software Needs
Free Documentation", with the Front-Cover Texts being "A GNU Manual,"
and with the Back-Cover Texts as in (a) below.
 
(a) The FSF's Back-Cover Text is: "You are free to copy and modify
this GNU Manual.  Buying copies from GNU Press supports the FSF in
developing GNU and promoting software freedom." -->
<!-- Created by GNU Texinfo 5.1, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Debugging with GDB: Protocol Basics</title>
 
<meta name="description" content="Debugging with GDB: Protocol Basics">
<meta name="keywords" content="Debugging with GDB: Protocol Basics">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="File_002dI_002fO-Remote-Protocol-Extension.html#File_002dI_002fO-Remote-Protocol-Extension" rel="up" title="File-I/O Remote Protocol Extension">
<link href="The-F-Request-Packet.html#The-F-Request-Packet" rel="next" title="The F Request Packet">
<link href="File_002dI_002fO-Overview.html#File_002dI_002fO-Overview" rel="previous" title="File-I/O Overview">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
 
 
</head>
 
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Protocol-Basics"></a>
<div class="header">
<p>
Next: <a href="The-F-Request-Packet.html#The-F-Request-Packet" accesskey="n" rel="next">The F Request Packet</a>, Previous: <a href="File_002dI_002fO-Overview.html#File_002dI_002fO-Overview" accesskey="p" rel="previous">File-I/O Overview</a>, Up: <a href="File_002dI_002fO-Remote-Protocol-Extension.html#File_002dI_002fO-Remote-Protocol-Extension" accesskey="u" rel="up">File-I/O Remote Protocol Extension</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Protocol-Basics-1"></a>
<h4 class="subsection">E.13.2 Protocol Basics</h4>
<a name="index-protocol-basics_002c-file_002di_002fo"></a>
 
<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
<small>GDB</small> is waiting for a response from the continuing or stepping target, 
the File-I/O request is a reply that <small>GDB</small> has to expect as a result
of a previous &lsquo;<samp>C</samp>&rsquo;, &lsquo;<samp>c</samp>&rsquo;, &lsquo;<samp>S</samp>&rsquo; or &lsquo;<samp>s</samp>&rsquo; packet.
This <code>F</code> packet contains all information needed to allow <small>GDB</small>
to call the appropriate host system call:
</p>
<ul>
<li> A unique identifier for the requested system call.
 
</li><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.
 
</li></ul>
 
<p>At this point, <small>GDB</small> has to perform the following actions.
</p>
<ul>
<li> If the parameters include pointer values to data needed as input to a 
system call, <small>GDB</small> 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.
 
</li><li> <small>GDB</small> translates all value from protocol representation to host
representation as needed.  Datatypes are coerced into the host types.
 
</li><li> <small>GDB</small> calls the system call.
 
</li><li> It then coerces datatypes back to protocol representation.
 
</li><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.
 
</li></ul>
 
<p>Eventually <small>GDB</small> replies with another <code>F</code> packet which contains all
necessary information for the target to continue.  This at least contains
</p>
<ul>
<li> Return value.
 
</li><li> <code>errno</code>, if has been changed by the system call.
 
</li><li> &ldquo;Ctrl-C&rdquo; flag.
 
</li></ul>
 
<p>After having done the needed type and value coercion, the target continues
the latest continue or step action.
</p>
<hr>
<div class="header">
<p>
Next: <a href="The-F-Request-Packet.html#The-F-Request-Packet" accesskey="n" rel="next">The F Request Packet</a>, Previous: <a href="File_002dI_002fO-Overview.html#File_002dI_002fO-Overview" accesskey="p" rel="previous">File-I/O Overview</a>, Up: <a href="File_002dI_002fO-Remote-Protocol-Extension.html#File_002dI_002fO-Remote-Protocol-Extension" accesskey="u" rel="up">File-I/O Remote Protocol Extension</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
 
 
 
</body>
</html>