blob: d4ef28457638d035b4b058bff64d6b809888648e [file] [log] [blame]
<html lang="en">
<head>
<title>The Ctrl-C Message - Debugging with GDB</title>
<meta http-equiv="Content-Type" content="text/html">
<meta name="description" content="Debugging with GDB">
<meta name="generator" content="makeinfo 4.13">
<link title="Top" rel="start" href="index.html#Top">
<link rel="up" href="File_002dI_002fO-Remote-Protocol-Extension.html#File_002dI_002fO-Remote-Protocol-Extension" title="File-I/O Remote Protocol Extension">
<link rel="prev" href="The-F-Reply-Packet.html#The-F-Reply-Packet" title="The F Reply Packet">
<link rel="next" href="Console-I_002fO.html#Console-I_002fO" title="Console I/O">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996,
1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
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.''-->
<meta http-equiv="Content-Style-Type" content="text/css">
<style type="text/css"><!--
pre.display { font-family:inherit }
pre.format { font-family:inherit }
pre.smalldisplay { font-family:inherit; font-size:smaller }
pre.smallformat { font-family:inherit; font-size:smaller }
pre.smallexample { font-size:smaller }
pre.smalllisp { font-size:smaller }
span.sc { font-variant:small-caps }
span.roman { font-family:serif; font-weight:normal; }
span.sansserif { font-family:sans-serif; font-weight:normal; }
--></style>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="The-Ctrl-C-Message"></a>
<a name="The-Ctrl_002dC-Message"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Console-I_002fO.html#Console-I_002fO">Console I/O</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="The-F-Reply-Packet.html#The-F-Reply-Packet">The F Reply Packet</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="File_002dI_002fO-Remote-Protocol-Extension.html#File_002dI_002fO-Remote-Protocol-Extension">File-I/O Remote Protocol Extension</a>
<hr>
</div>
<h4 class="subsection">D.14.5 The &lsquo;<samp><span class="samp">Ctrl-C</span></samp>&rsquo; Message</h4>
<p><a name="index-ctrl_002dc-message_002c-in-file_002di_002fo-protocol-2501"></a>
If the &lsquo;<samp><span class="samp">Ctrl-C</span></samp>&rsquo; flag is set in the <span class="sc">gdb</span>
reply packet (see <a href="The-F-Reply-Packet.html#The-F-Reply-Packet">The F Reply Packet</a>),
the target should behave as if it had
gotten a break message. The meaning for the target is &ldquo;system call
interrupted by <code>SIGINT</code>&rdquo;. Consequentially, the target should actually stop
(as with a break message) and return to <span class="sc">gdb</span> with a <code>T02</code>
packet.
<p>It's important for the target to know in which
state the system call was interrupted. There are two possible cases:
<ul>
<li>The system call hasn't been performed on the host yet.
<li>The system call on the host has been finished.
</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 &mdash; successfully or not &mdash; and should behave
as if the break message arrived right after the system call.
<p><span class="sc">gdb</span> must behave reliably. If the system call has not been called
yet, <span class="sc">gdb</span> 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
<span class="sc">gdb</span>. 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.
</body></html>