blob: d8f37d603f71f1ab47ffeb4c0dfda23fb0f5d2c3 [file] [log] [blame]
<html lang="en">
<head>
<title>Interrupts - 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="Remote-Protocol.html#Remote-Protocol" title="Remote Protocol">
<link rel="prev" href="Host-I_002fO-Packets.html#Host-I_002fO-Packets" title="Host I/O Packets">
<link rel="next" href="Notification-Packets.html#Notification-Packets" title="Notification Packets">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
Copyright (C) 1988-2019 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>
</head>
<body>
<div class="node">
<a name="Interrupts"></a>
<p>
Next:&nbsp;<a rel="next" accesskey="n" href="Notification-Packets.html#Notification-Packets">Notification Packets</a>,
Previous:&nbsp;<a rel="previous" accesskey="p" href="Host-I_002fO-Packets.html#Host-I_002fO-Packets">Host I/O Packets</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Remote-Protocol.html#Remote-Protocol">Remote Protocol</a>
<hr>
</div>
<h3 class="section">E.8 Interrupts</h3>
<p><a name="index-interrupts-_0028remote-protocol_0029-3589"></a><a name="interrupting-remote-targets"></a>In all-stop mode, when a program on the remote target is running,
<span class="sc">gdb</span> may attempt to interrupt it by sending a &lsquo;<samp><span class="samp">Ctrl-C</span></samp>&rsquo;,
<code>BREAK</code> or a <code>BREAK</code> followed by <code>g</code>, control of which
is specified via <span class="sc">gdb</span>'s &lsquo;<samp><span class="samp">interrupt-sequence</span></samp>&rsquo;.
<p>The precise meaning of <code>BREAK</code> is defined by the transport
mechanism and may, in fact, be undefined. <span class="sc">gdb</span> does not
currently define a <code>BREAK</code> mechanism for any of the network
interfaces except for TCP, in which case <span class="sc">gdb</span> sends the
<code>telnet</code> BREAK sequence.
<p>&lsquo;<samp><span class="samp">Ctrl-C</span></samp>&rsquo;, 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 <a href="Overview.html#Overview">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 &lsquo;<samp><span class="samp">X</span></samp>&rsquo; packet
(see <a href="X-packet.html#X-packet">X packet</a>), used for binary downloads, may include an unescaped
<code>0x03</code> as part of its packet.
<p><code>BREAK</code> followed by <code>g</code> is also known as Magic SysRq g.
When Linux kernel receives this sequence from serial port,
it stops execution and connects to gdb.
<p>In non-stop mode, because packet resumptions are asynchronous
(see <a href="vCont-packet.html#vCont-packet">vCont packet</a>), <span class="sc">gdb</span> is always free to send a remote
command to the remote stub, even when the target is running. For that
reason, <span class="sc">gdb</span> instead sends a regular packet (see <a href="vCtrlC-packet.html#vCtrlC-packet">vCtrlC packet</a>) with the usual packet framing instead of the single byte
<code>0x03</code>.
<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 target supports debugging of multiple
threads and/or processes, it should attempt to interrupt all
currently-executing threads and processes.
If the stub is successful at interrupting the
running program, it should send one of the stop
reply packets (see <a href="Stop-Reply-Packets.html#Stop-Reply-Packets">Stop Reply Packets</a>) to <span class="sc">gdb</span> as a result
of successfully stopping the program in all-stop mode, and a stop reply
for each stopped thread in non-stop mode.
Interrupts received while the
program is stopped are queued and the program will be interrupted when
it is resumed next time.
</body></html>